-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Let FSRS control short term schedule #3375
Let FSRS control short term schedule #3375
Conversation
While I appreciate the efforts you put into this, I don't think that FSRS would be able to assign reasonable short-term intervals unless significant changes are made to the FSRS algorithm. One important problem with the current algorithm: I used v5.0.3 of the python optimizer to generate the v5 parameters for my collection. I got: Here, S0(1) > 1d. So, I won't see a new card again on the same day even if I press I saw that you mentioned "According some cases I researched, the stability of again could be larger than 1d." on the Forums. However, I think that you might have misinterpreted the result (assuming that the calculation of S0 in FSRS 5 is essentially the same as FSRS 4.5). stability_for_pretrain.tsv contains:
If FSRS is using this to calculate S0(1), it is not considering that these cards with In short, FSRS is confusing the stability after the last learning step with the initial stability. Without the changes in this PR, this is not a significant problem because the learning steps force Anki to show the card again on the same day. However, if the scheduling is going to be based on the FSRS stability only, we need to make changes that allow FSRS to better estimate stabilities in the short-term. |
You would be right. But the feature only takes effect when the user has 0 learning step (the learning step field is empty). Besides, to model the short-term memory more accurately, we need more short-term review data with long steps. However, the default settings make this kind of data very rare. For the confusion between the stability after the last learning step and the initial stability, I don't think so. Because FSRS-5 has considered the short-term reviews. The
They are different. Admittedly, FSRS-5 and FSRS-4.5 both both are using the same |
Ok, good to know. In that case, this problem won't be as important as I thought previously.
Sorry if I wasn't clear enough. I was talking specifically about pretraining. In pretraining, the optimizer seems to calculate the stability after the last intraday learning step but then assume that this is equal to the initial stability. Please let me know if I am interpreting it wrongly.
This seems to be a good decision, but it likely won't solve the problem I mentioned above. Regarding the scarcity of data for modelling short-term memory, I sympathize with you. However, I don't have any solution. And this implies that Anki can't remove (re)learning steps altogether, at least not in the near future. |
Then I'd assume from your params you almost always get 1d interval for cards with first rating as Again? If SInc is taken into account. |
Then maybe it's better to use |
This comment was marked as off-topic.
This comment was marked as off-topic.
I thought about this more, and I think @user1823 is right. S0 for Again isn't actually "stability after the user pressed Again", it's "stability after the user pressed Again and went through all of the <1d learning steps". @L-M-Sherlock thoughts? You talked about this before, but maybe you misunderstood the problem. |
If the user has several learning steps, FSRS-5 will optimize S0(Again), W[17], W[18] in the same time. And S0(Again) is less than f(S0(Again)) where f is the short-term memory function. |
I'll just leave some thoughts here: |
For reference, I'll paste my comment from the previous PR:
blank
Is there any reason subtracting days haven't been considered? If this is hard to do in code, sure it's a bad idea. But ideally, if you are dealing with a person who keeps DR to CMRR recommendations, you're better off subtracting a few days than adding a few. Also, consider the opposite situation of a person with 0.99 DR. I'm not necessarily suggesting peeking at CMRR. In a simple situation, we can simply look at DR and have 0.86 or 0.9 as threshold.
blank
blank
In this situation, we end up with two intervals that match. In your examples, an easier solution seems subtracting a few hours from the lower interval so that it doesn't cross the day boundary. Sure, this solves the optics problem we dont want and still allows the user to study at intervals closer to what they want. But consider another situation. Again = 12h and Hard = 23h at 3:00 AM. In this situation, converting Hard to 2d is optimal instead of trying to make Again not cross the day boundary. This is because Hard is closer to a day boundary compared with how close Again is to a day boundary. I am not completely sure about this situation though. For example, the level of precision I'm seeking would require answering whether 1d means a >24h interval or not. |
@dae sorry for pinging you all the time, but I have a question. Well, two.
|
I'm skeptical at the moment. I think it has the potential to cause a lot of user confusion if not done carefully, and it looks like the details are still being figured out. I'd be pushing back strongly if this were a forced change, but since it will only affect users without learning steps, it hopefully won't be too disruptive (but I'm sure it will confuse some users who have accidentally or deliberately blanked out their learning steps, and have grown used to the default 1 minute step). Before we get to the merging-in stage though, I'd like someone to briefly explain what the goal is with this code. Is it just to generate more data for future analysis, or is there some degree of confidence that the intervals FSRS calculates will be close enough to optimal that users might actually wish to opt in?
That depends on how long it's expected to take. I can hold off on a beta for a week or two if it's close and you guys feel it is important to land it in the first beta, or it could be added in a future beta - I suspect we'll need a number of them this time around. |
More of the latter, I'd say. @L-M-Sherlock your input would be valuable here |
My main blocker is I'm hoping to land #3292 before the first beta, but I need to give it some more testing first. Easy days will likely need to wait for a future beta or release, if it's not about to drop already. |
@jakeprobst what are the chances that you will finish Easy Days within a week or two weeks at most? |
Is landing it in the first beta actually important, or just a nice-to-have? If it's the latter, I don't think Jake should feel under any pressure. |
I'd like all algorithmic improvements - FSRS-5, disabling learning steps, new fuzz, Easy Days - to come withing the same release, like Anki 24.10 or Anki 24.12. They can be added inbetween several stages of beta-testing, I guess, but that feels weird to me. |
It's not uncommon for features to land in later betas. Waiting for everything might be "cleaner" (and it's certainly less work for me!), but it means less time than the existing changes can be tested for, or a longer beta testing period. |
unlikely! |
To be honest, I‘m not confident when I have analyzed the short-term recall from the real data recently. Here is an initial result: If a user clicks "again" when first learning a new card, the probability of recalling it the second time that day is 74.6%. If they click "hard," the probability is 91.3%. If they click "good," it's 95.7%. For reviewing old cards, if they click "again," the probability of recalling it the second time that day is 85.1%. Seems the short-term memory has very differently behaviours than the long-term memory. If our goal is to achieve the 90% retrievability in the short-term, the current learning step seems too long for cards rated as Here is the code: https://github.com/open-spaced-repetition/Anki-button-usage |
@L-M-Sherlock question: I assume FSRS will not schedule <1d intervals if the user has any learning steps? |
I'm not so sure pressing |
Let's remember that what FSRS is competing with are static learning steps, not some near optimal scheduling. I very much doubt my learning steps perform anywhere near as well as FSRS does in these statistics. I'm quite eager to try it out. I really hope it gets merged. Edit: Also, given emptied out learning steps and the recently merged change, what FSRS short time scheduling is competing with here is no sub day scheduling at all. Again, I strongly suspect this code is an improvement on that. |
@L-M-Sherlock I'm sure that you are busy, but since Dae plans to release the new verion of Anki in October, I advise you to finish this within 1-2 weeks, so that there is enough time to beta-test it. |
I didn't notice you'd marked this as ready to review before I built beta 2. I'll try get to it tomorrow. |
I still have reservations about FSRS scheduling sub-day intervals, but I understand you want to gather more data, and users would need to opt into it by removing their learning steps, so this hopefully will not cause too much disruption. |
Not necessarily from LTM, user could have learned the card outside Anki earlier on the same day, just before creating a card. |
2024-10-05 update: b5bf939 close #3463