On the answer side, I need some reference information to help me decide which button to press

On the answer side, I need some reference information to help me decide which button to press.

I use Anki for language learning (mostly on AnkiDroid).
I’m using the latest version of Anki/AnkiDroid, and FSRS is enabled.

However, I’m facing an issue: when a card shows up that I know fairly well, I often hesitate between pressing “Good” or “Easy”. The phrase “took some mental effort” feels too vague to make a confident choice.

What I’d like is to see a numerical indicator on the back side of the card when answering.
For example:

0 units = brand new card

100 units = card I can recall instantly

Target threshold = 80 units

So, if a card has a value >= 80, I’ll press Easy.
If it’s 79 or less, I’ll press Good.
And if I subjectively feel like I don’t know the card, I’ll press Again.

I assume this value should be based on Difficulty, Stability, and Retrievability in some proportion (or maybe something else). I’m open to recommendations regarding the formula, but the core idea remains: I want to see a number on the answer side.

Now the question is: how can I display this number (or at least the 3 base parameters) on the back of the card in a way that works on AnkiDroid?
Currently, I can’t access any system variables in the card template, even though I know they exist in the database.

Am I the only one experiencing this issue, or have others run into it too?

The reason I want to distinguish between cards I’ve merely learned and those I truly know is to help FSRS better adjust the coefficients.

Right now, since I press Good for both types of cards, FSRS assumes they require a similar review schedule. As a result, I end up seeing well-known cards more frequently than necessary.

But if I always press Easy instead, I’ll run into the opposite problem: I’ll see recently-learned cards too rarely, which increases the risk of forgetting them and having to hit Again more often.

2 Likes

Whenever you hesitate on that distinction, just press Good. That will never be the wrong thing to do.

For a New card – you can already tell that because the blue counter will be underlined when you see the card. You will also see learning-step intervals on the grading buttons.

Beyond that, I think you’re approaching this the wrong way. You’re asking how you can use the FSRS memory state (D, S, R) to decide how well you know the card – but FSRS needs your honest and accurate grading information to figure out the memory state. The information needs to come from you and flow to FSRS – not the other way around.

You also shouldn’t be basing your grade on how well you’ve known the card in the past, just on how well you knew it today. FSRS is taking care of the rest of scheduling each card based on its own review history, so you don’t need to preempt that with another algorithm of your own.

It’s not meant to be excessively vague, but there are lots of different ways to express that besides “some/no mental effort.” If you have to pause and recall the answer, that’s a Good – if the answer comes to you without even thinking, maybe even while you are still reading the card, that sounds like it was Easy. [In my early days, I would use Easy for the “Ha! I probably don’t even need a card for that!” situations.]

It is always fine to grade correct answers Good (and incorrect answers are always Again). For cards that stand out to you as exceptionally hard or easy to answer – when you get them correct, you can use Hard and Easy to communicate that to the algorithm.

4 Likes

That’s exactly what I do. (I only use two buttons: Again and Good.)
Yes, from the perspective of memory retention, this isn’t will never be the wrong thing to do..
But on the other hand, at that moment I could have seen a card that I know less well, and it would have been better to review that one instead.

After all, let’s be honest — when out of 200 reviews per day, 70 cards are shown that, according to the forgetting curve, would be more effective to review in, say, 4 days, and instead we will take 70 cards that actually should be reviewed now, the overall efficiency of learning would increase.

So, in a way, I’m being overly cautious and end up seeing cards earlier than I should, simply because I press Good instead of Easy.

With new cards, everything makes sense to me, and I have a good sense of which button to press and when.
But when a card becomes stable and I keep pressing Good over and over again — that’s where I still can’t quite grasp the moment when I should start pressing Easy instead.

And this kind of hint doesn’t affect the actual state of my memory.
I just want to understand, in this moment, how confidently I know this particular card.

After all, it’s one thing when a card has been shown 5 times and I pressed Good the last 3 times — and it’s a completely different thing when the card has been shown 20 times and I pressed Good the last 12 times.
You’d probably agree that for the second card, I can already start using the Easy button.
But for the first one, I’ll keep pressing Good until the sequence reaches, say, 5 times.
From a risk assessment point of view, if I press Easy for the first card, it will be postponed too far, and by the time it comes up again, I’ll most likely have forgotten it — and I’ll have to press Again.
But for the second card, if I press Easy, those 12 consecutive Good ratings suggest that the chance of forgetting it is extremely low.

Now the opposite extreme:
If I press Good for the first card, it will show up again at the right time.
But if I press Good for the second card, it will just take up the spot of someone else’s card — reducing the overall efficiency.

That’s exactly what I’d like to measure with some kind of numerical indicator.
(Like how many joules my brain spent on answering :grinning_face: just kidding), to have some sort of threshold that tells me I can already start using the Easy button.

1 Like

Not really, this is not how things are supposed to work.

Just by the nature of the two cards being at different points of the learning curve, pressing the same Good button for both would have greatly different effects on them as is (the one rated good 20 times before would already have much bigger intervals at this point and thus will also receive an exponentially larger increase). This is already taken care of by the scheduling algorithm – you don’t need to manually compensate for any effects on top of that. If you are using FSRS, all that is required from you is consistency of rating habits. Given enough statistical data, when you reoptimize your parameters, the algorithm already produces the best fit for your learning curve, taking into account the current intervals of each card, i.e. how well you know it by this point. (In theory, it wouldn’t even matter if you were constistently rating all your correct answers on the cards with intervals larger than, say, 1y as easy instead of good, because, after readjustment, the algorithm will compensate for that habit producing the same delay till the next review to achieve the same retention rate)

That sounds like you have a completely different kind of problem here. If your daily reviews are capped and the cards consistently accumulate beyond the daily limit – this is a bad thing. Not only the cards are pushing each other out of their planned review dates, messing up the scheduling, but also introducing new cards each day that aren’t then reviewed in their proper time and go stale does little to help learning them while wasting time. You should either increase the daily reviews limit or decrease the number of new cards you are trying to learn every day.

What I do personally, is measure the time it takes me to answer a card. If it is less than a certain threshold, roughly equal to the time it takes for me to read the question and type the answer, the card goes to easy. If you any help in implementing this kind of thing into your cards, I can provide some assistance.

4 Likes

Somewhere deep down, I had a feeling about it, but I wasn’t sure if it was really the case. And indeed, the actual efficiency when using only the Again and Good buttons will be drastically different from the scenario where Again, Good, and Easy are used.

I wouldn’t call it a critical issue or anything like that. I made this assumption purely based on my own feeling — that some cards could already be pushed far ahead because I know them well. But since there are also transitional cards in the same category, which get marked sometimes as Good, sometimes as Again, they affect the FSRS factors and therefore the interval of the next review. That’s why the idea came to me to separate them using different buttons.

Since around mid-February, I’ve had only 3 new cards per day and 300 reviews. Yet, according to the stats, I’m averaging about 220 reviews per day. So it’s not like I’m artificially limiting the workload — I’m actually completing the full review batch each day.

Do you mean the timer functionality “Maximum answer seconds” timer? Yes, I use it.

So, if I understood correctly, there’s nothing I need to worry about and I should just keep sticking to my two-button system: Again and Good. With only one exception — if the 10-second answer timer runs out, then I should always press Again, since the card wasn’t recalled. In all other cases, I should press Good, and FSRS will take care of the rest.
(By the way, I try to press “Optimize All Presets” every evening when I’m done with my reviews for the day. Yes, maybe it’s a bit excessive, but I don’t mind clicking one button for the whole collection. It definitely won’t hurt.)

You don’t need to worry about that. If the cards arrived at the same intervals in different numbers of reviews, because some failed several times, they are already differentiated between by the algorithm based on their review history. The ones that got more “Agains” are considered more difficult and are not lumped in the same category as the ones that got straight “Goods” from the very start.

You can look at it this way: the algorithm already knows and takes into account all the objective measurements of a card, such as its current interval and review history. The buttons “Good” and “Easy” are only there to add any info that cannot be deduced from the objective properties, i.e. subjective measurements like mental effort or how sure you were about your answer.

If that’s the case, then everything seems alright. I just misunderstood what did you mean by the example where 70 cards replaced 70 other ones in your 200 reviews per day.

Not exactly. I use a two-state timer embedded in a card to differentiate between easy and good, and between good and hard. If it takes me less than ~1s to type in the answer, the card is rated “Easy”. If it takes me longer than 10s to answer it, but the answer is still correct, the card is rated as “Hard” (because all-in-all the card was recalled). All of that is automated so it doesn’t require much effort to use.

1 Like

Oh! It’s brilliant. This might be exactly what I need. It seems simple, but for some reason I hadn’t thought of it before.
Indeed, if it takes me less than 2 seconds to answer, I’ll press Easy. If it takes 2–10 seconds and I get it right, then it’s Good. If it takes more than 10 seconds but I still answer correctly, then it’s Hard. (Though I’ve never actually used the Hard button before.)

If you’re using a two-state timer embedded in a card, would it be appropriate for me to ask you to share the code, so I don’t have to reinvent the wheel?

1 Like

@Zaxvatov I think you are overthinking things.
Just take your initial feel and let the system work for you. If you answer confidently then choose Good. If the answer comes to you before you can even select a button, choose Easy.
If it took a little while and you had to remember or cogitate — but you managed to find the correct answer — then choose Hard. Else choose Again.

Your initial reaction is what is required by the formula. Also, if you choose wrongly every now and again, just leave it.

4 Likes

The thing is, my initial feel were highly subjective, and it was hard for me to decide whether a particular card deserved an Easy or a Good rating. The suggested idea with the timer really helps to rely on concrete numbers.

1 Like

I think being subjective is the point. You have to decide. You are not in a competition with someone else. You decide what is Hard, Good, etc., and then the cards are cycled according to your needs.

Just remember that those concrete numbers will not be the same for someone else. But also, they will vary for you depending on how well you feel, how tired you are, how well you can focus, etc. Just don’t get too hung up on the numbers.

1 Like

Sure. The complete implementation would depend on your note template, as well as on what you want the timer to look like and what exactly you want it to do. I can provide the assistance with that as well, but here is the base code:

Styling (timer intervals are set up here, at the top):

:root {
	--time-easy: 1s;
	--time-norm: 10s;

	--timer-width: .5rem;
	
	--col-timer-easy: lightgreen;
	--col-timer-norm: green;
	--col-timer-bg: white;
}

timer {
	margin: .5rem;
	height: var(--timer-width); 
	border-radius: var(--timer-width);
	overflow: hidden;

	background: var(--col-timer-easy);
	background-image: linear-gradient(to right, transparent 50%, var(--col-timer-bg) 50%);
	background-size: 200% 100%;
	animation:	norm-end var(--time-norm) linear forwards, 
				easy-end .2s linear forwards var(--time-easy); 
}
 
@keyframes norm-end { 
	100% {background-position: 100%;} 
}
@keyframes easy-end {
	100% {background-color: var(--col-timer-norm);}
}

JS for the front side:

timer = document.querySelector('timer:not(.off)');
sessionStorage.setItem('ease', 3); // norm
if (timer) {
	sessionStorage.setItem('ease', 4); // easy
	timer.addEventListener('animationend', (event) => {
		sessionStorage.setItem('ease', sessionStorage.getItem('ease') - 1); // -> norm -> hard
	});
}

and the HTML for the element itself is simply

<timer></timer>

Then, on the back side of the card, you can retrieve the ‘ease’ with JS like this:

ease = sessionStorage.getItem('ease');

and use its value to make any necessary adjustments, such as adding a class to some element to make a visual indication of how long it took to answer the card or automatically pressing any of the answer buttons (ease will be equal to 4 for easy answers, 3 for normal, and 2 for hard).

Also, if you are using {{FrontSide}} on the back of your card, additional adjustments will have to be made to prevent the timer to appear on the back side and resetting the ease variable.

3 Likes

No one’s saying these should be universal numbers. I think it’s like the number of new cards per day — in the end, everyone sets their own value, but 20 is a reasonable place to start.
Secondly, we’re talking about language learning, where the goal is to build automaticity, not to spend 30 seconds pulling each word from memory.
And thirdly, it’s just a guideline, not strict automation. Which means that regardless of the numbers, I can still choose whichever difficulty button I feel is appropriate.

I thought about that too, since I can review cards at home in silence or on a bus — and those are completely different conditions. But again, both can be accounted for, like adding a couple of extra seconds for more difficult environments. The main thing is that there’s a baseline you can work from.

I agree with you — in the end, it’s still subjective. But in my case, when I was given full freedom right away, I felt lost and didn’t know what to choose. Maybe, after the trying objectivity with timer, i’ll eventually decide it doesn’t work for me, going back to full subjectivity. But at least I’ll have that experience of objectivity.

2 Likes

Wheeee!!! I’m so happy. :slight_smile:

Here’s what I came up with:

  1. As soon as a card is shown, a timer starts running. It doesn’t appear anywhere on the screen, so there’s no feeling of urgency and I don’t get that instinctive reaction that I have to rush and answer as fast as possible. This way, I can calmly focus on giving a thoughtful response.

  2. As soon as I flip the card, the timer stops. (I also added tenths of a second, not just full seconds, so that in the future I can fine-tune the intervals based on my reaction time. For example, right now the interval for the “Easy” option is 3 seconds. But if I notice that my answers for easy cards are consistently around 3.1–3.3 seconds — which actually falls into the “Good” range — I’ll increase the interval from 3 to 4 seconds.)

  3. The next thing I ran into is that sometimes a word has several translation variants. (In my template, it can be up to six.) So the total time to answer naturally increases as well. That’s why I had to set different intervals depending on how many fields are filled in.

  4. For convenience, I display the timer value at the bottom of the screen. I’ve split that line into four parts, and each value appears right above the corresponding button.

  5. And finally — I also decided to display markers showing where each interval starts and ends between the blocks. This helps me see whether the current intervals really match this particular card. So for now it’s more of a safeguard to compare the card’s structure (number of filled-in fields) with the corresponding time intervals.

As a result — this little beauty came out of it.


Although for a card with only one field, the time markers at the bottom are different. (3, 10, 17 secs)

Thank you so much for the idea! :blush:

4 Likes

That’s very elaborate and cool!

I’m a little concerned about this point though:

If what you mean by this is that some of your cards require recalling multiple translations at once, keep in mind that this is not recommended and such information is better to be spread over multiple cards with one translation per each.

2 Likes

Actually, the template is a 1-to-6 scheme for 7 card types.

That is, there’s one field with the foreign word and six fields with translation options.
The first six card types train translation 1 → word, translation 2 → word, and so on, while the 7th type trains word → all translation options.
In the deck settings, the learning order is set by card type, so the 7th card won’t appear until the previous six (or four, or two — depending on how many translations it has) have been learned.

Unfortunately, I couldn’t come up with a better algorithm.
Because if you split the 7th card into separate ones, the base word remains the same, and it becomes unclear which translation is being tested.
And writing a hint like “translation 3 is being tested” feels kind of silly.

I’ve been using this setup for a year now and haven’t had any major issues.
The only inconvenience is when a new translation is added — and during review of the 7th card, there’s suddenly one more meaning that wasn’t tested before. If I fail to recall it, I reset the card to “Again.” But those cases are rare.

1 Like

What I like to do is add an example sentence on the front of the card, so that it would show the use of the word in the specific meaning expected as the translation.

It also helps to learn the meanings sequentially and only introduce a new one after all previous are firmly cemented in memory. This way I can put already-known translations on the front side as well, without compromising the effectiveness of reviews for those meanings.

2 Likes

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.