-
Notifications
You must be signed in to change notification settings - Fork 32
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
Better understand probability-based schedules to pick initial a=b #16
Comments
Thanks Ahmed! I'm still doing quite a bit of analysis, but I feel that failing should have less of an impact (which is SM's biggest flaw IMO). I'm currently doing that by artificially increasing the amount of time passed to |
I've been thinking of your comment, and two things that I do might help— First is that, if you fail when probability of recall is low, then the halflife will barely change, since the algorithm isn't surprised you failed after a long time without studying. And very often I review when recall probability is low, so failure isn't something I'm afraid of (which might be a good thing or bad thing—some research does show that the more you struggle to recall, the better your retention gets; but personally the joy I get from remembering the answer after a long struggle is much less than finishing my reviews and moving on with my life).
Second, how much of an impact does failing really have? I made some changes to the Svelte Ebisu playground you made: https://svelte.dev/repl/9e31d30ac2da4746bb0f405987876a66?version=3.15.0 to allow you to set what probability of recall to quiz on (instead of fixed at 50%), and tying a=b to be the same, and setting the halflife to 1.0 (arbitrary units since they scale). There's two columns of buttons, and the left three columns of numbers correspond to the first column of buttons, and similarly the right three columns of numbers correspond to the second column of buttons.
As you can see, over a stretch of successful quizzes, the ratio of TTQ slowly decreases towards 1.0, that is, although the next quiz is still farther away from now than the previous quiz was from now, the rate of growth in TTQ is slowing down. This is in contrast to SM2/Anki, where ratio of time between quizzes is constant (assuming Good rating), i.e., the quizzes continue to be spaced exponentially apart.
Anyway getting back to the topic at hand: by playing with initial Reducing the probability-to-quiz to 10%, as I suggested above, shows you that the ratio of TTQs greatly increases: you're under-reviewing so the algorithm gets a lot of confidence that you know the flashcard. Comparing to the case above, quiz # 9 has TTQ-ratio of 1.61x for all-passes, whereas the fail+pass case has slower growth at 1.55x, but it's still only 4% different. Lowering initial I'll think about a nice way to adjust the memory model and add it to the library. Here's a simple thing you can do: say you have a model = [4.4, 3.3, 2.2] # for example
hl = ebisu.modelToPercentileDecay(model) # compute halflife
balancedModel = ebisu.updateRecall(model, True, 0.00001, False, hl)
# (3.336557408068802, 3.336553824064345, 2.783719390318511) The new model is "balanced" because Now if your user is annoyed at how often they are seeing some flashcard, you can compute the I'll make a function, something like Sorry for the lengthy post, your Svelte playground and comment have been very thought-provoking (I may have stumbled on a couple of improvements to the algorithm to make the runtime faster). Thank you for your continued interest and support! |
@mustafa0x a heads up & request—I've pushed a branch to this repo with a new API for def updateRecall(prior, k: int, n: int, tnow: float) The old boolean is gone and instead you supply two integers: Now, this can be (ab)used by a quiz app to model ease of recall, or to potentially ameliorate the impact of a failed quiz. E.g.,
The math behind this assumes each of the I mention this because from my informal tests, the new
With all that as background, my request is, if you have the time and inclination, try out this new You can find the updated Python file at https://github.com/fasiha/ebisu/blob/binomial-quiz/ebisu/ebisu.py in the (Hat tip to #23 for prodding me.) |
Pushed 2.0.0 Python version. I'll try to update the JavaScript & Java versions sometime this week 🤞 |
@fasiha Wonderful work, thank you! I hope to soon take an in-depth look at this change. |
@mustafa0x Did our two Svelte examples break 😢?
They seem to render nothing. |
They were made before v2, so |
Dohhh, thanks @mustafa0x, I didn't even think to check whether svelte.dev had version-pinned dependencies or fetched latest. Thanks! Updated mine too! |
Closed this because Ebisu v3 is moving away from Beta priors on recall to Gamma priors on half-life. Please feel free to reopen or add comments! |
@mustafa0x sent this: https://svelte.dev/repl/23a76045aa884384b8de8b737d682a7f?version=3.15.0
I made a small enhancement: https://svelte.dev/repl/67711abbe3784fccb67dc6b3f614a6d6?version=3.15.0
Per my email:
The text was updated successfully, but these errors were encountered: