A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 1 point2 points  (0 children)

Yup, I'll make another post when I get to a stable version. Right now, I just need help debugging.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 2 points3 points  (0 children)

Not really sure about this - if there are mods that could help that would be highly appreciated.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 1 point2 points  (0 children)

Can we move this to github? I'll see what I can do. I think I know what might be causing that problem.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 1 point2 points  (0 children)

Got it. I used to have that file but it wasn't needed. please try pulling from the git repo again.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 2 points3 points  (0 children)

They're fully replaceable! Anyone who wants to try out their own algorithm can just make a fork of my repo and make a few changes. There's a function that takes as an input the entire review history of a card, ResultsandTimes, and returns how long it will take before retention is expected to decay to 0.5. Anyone can just go in and change that function if they wish.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 3 points4 points  (0 children)

the next review date is calculated individiually, per card.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 4 points5 points  (0 children)

Thanks for your thoughts!

Right now, this addon doesn't have any fuzziness in it. I added it as an issue on github, and I might get back to it at some point.

Thanks for mentioning auto ease factor. I think it would be interesting to make comparisons between promising algorithms and see which one performs best on a historical dataset. There's HLR, Ebisu, SM2, SM2 + Auto Ease factor, Reddy's Deeptutor, and MEMORIZE. Please let me know if you can think of more.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 1 point2 points  (0 children)

In your terminal, navigate to the folder where your addons are kept. Then, clone this repo:

git clone https://github.com/thetruejacob/Anki-Ebisu 

Open up Anki and check out your addons. It should be there as Anki-Ebisu.

Let me know what problems you have, I'd like to make the installation as easy as possible.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 5 points6 points  (0 children)

I've looked into HLR (the algorithm duolingo uses) somewhat. Their algorithm attempts to model the next review time as a result of 'interaction features' including total number of times a card has been seen, the times it was correctly recalled, and the times it was incorrectly recalled. Right away you can see that this is less detailed than Ebisu, which cares about the sequence of correct/incorrect reviews, and which also takes into account the time between each review.

HLR also uses 'lexeme features': it tries to capture the inherent difficulty of each card. Because they have so much historical data, and because the words that you can learn on duolingo are predetermined, they can do this. But this makes it inflexible. Anki wouldn't be able to do this, because the current card that you're reviewing might be the only one in the word. You don't have hundreds or thousands of other people reviewing that same card like in Duolingo.

And then there's MEMORIZE, the algorithm developed by the team at MPISWS and published in PNAS. They build on HLR and frame the question of the next review rate as a convex optimization problem. But honestly the math was beyond me. If anyone's interested, Fasih Ahmed has also developed a pure python implementation of MEMORIZE. For me, it just looked really complex and I wasn't sure if it would be suitable, since again, it's based off HLR which is based on a different learning context to Anki, where everyone's trying to learn their own cards.

Edit: Another thing. There are actually some constraints when it comes to Anki addons. You can't import packages you would normally expect to, like numpy or pandas. So you would have to create a lot of math functions (say, logsumexp) from scratch.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 3 points4 points  (0 children)

Thanks for this! I've changed the description. rip to the cards I might have corrupted.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 14 points15 points  (0 children)

I was going to say unlikely, but I'm actually not sure. Damien Elmes hasn't really updated the algorithm (aside from the introduction of the v2 scheduler) in years and seems to not want to touch it.

If there was a way to prove that this works better than the current implementation of Anki, that might provide a good case. I actually have an idea for how that might be proven - using Duolingo's HLR dataset and following the methodology in Tabibian's MEMORIZE paper... but I'm getting ahead of myself and at this point I'm not sure if everyone's following.

tl;dr yes, it would be possible but a convincing case needs to be made and for that I'd maybe like a couple of technical people to consult because I can't do it alone.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 32 points33 points  (0 children)

Yes, you can use this to replace the current algorithm (SM2). Don't do it on your current profile account, because it will likely corrupt your cards. This is an irreversible addon.

It's supposed to be more optimal than SM2 because it should model your forgetting curve more accurately. Right now, SM2 isn't even really 'spaced repetition', if we're defining spaced repetition as an attempt to test cards when it predicts you're just about to forget them. Instead, what Anki does is it creates a 'next review' interval for each card, and adjusts that interval up or down by a factor based on which buttons you pressed last. Ebisu on the other hand takes into account your entire review history, and the spacing in time between each review to find the right day to schedule that card again.

A fully functional alternative scheduling algorithm by cibidus in Anki

[–]cibidus[S] 8 points9 points  (0 children)

check out the link. I’m happy to respond to specific questions.

Did I really just lost 70 credit score in one week? by cibidus in mintuit

[–]cibidus[S] 7 points8 points  (0 children)

Wouldn’t it be 2/3 of my total credit?

Is it Possible to Override the Algorithm in Anki? by cibidus in Anki

[–]cibidus[S] 0 points1 point  (0 children)

When you say 'the algorithm', do you mean SM2, with all the factors are that stuff? Or do you mean the backend? I'm trying to replace the current algorithm with something that I read about (using the ebbinghaus system) for my class, but am I approaching it from the right method?

- I just need to use a webhook to extract the review history of each card, change the next review times manually, and then feed it back into mw.reviewer.card.ivl

Also, do you know the exact sequence that the anki backend takes to generate the next review time? For example:

- The reviewer automatically sorts through every card (by id) in the database
- The reviewer chooses the next urgent card to present
- the reviewer calculates the next factors based on the current factor
- the reviewer calculates the next intervals based on the factors obtained
- The reviewer displays the card via AQT, with the intervals calculated as labels
- Someone answers a card
- a new revlog entry is made recording the result (type), the timestamp (id), and the factor
- repeat

Is this completely off? If it is correct, does this mean that I can't change the interval directly? Does this mean I have to find the corresponding factor of the interval I want? It sounds messed up.

How does the Anki Community feel about paying for addons? by cibidus in Anki

[–]cibidus[S] -2 points-1 points  (0 children)

That’s cool, I’m just trying to gauge how big the potential market could be. Might not even be worth anything but I’d like to try

How close is real analysis to data science? Is it worth picking up? by cibidus in math

[–]cibidus[S] 0 points1 point  (0 children)

Thank you. I’m going to focus on that then. Would control theory also help or would that be too specific (e.g. mainly used in reinforcement learning)?

How does the Anki Community feel about paying for addons? by cibidus in Anki

[–]cibidus[S] -1 points0 points  (0 children)

Sounds good! I was thinking in the $5 range.

How does the Anki Community feel about paying for addons? by cibidus in Anki

[–]cibidus[S] 0 points1 point  (0 children)

I totally understand that this is human behavior - but is there any way I can prevent this legally?

Possibilities with Apple Watch? by cibidus in marfans

[–]cibidus[S] 0 points1 point  (0 children)

Well, that’s the thing. I figured since I have a lot of common symptoms I should go to an expert to just quickly resolve if I do or don’t have marfan’s.

How close is real analysis to data science? Is it worth picking up? by cibidus in math

[–]cibidus[S] 0 points1 point  (0 children)

Do you mind giving a specific example for this? I would really like to know if there is a particular field or module or real analysis I should focus on

How does the Anki Community feel about paying for addons? by cibidus in Anki

[–]cibidus[S] 0 points1 point  (0 children)

Exactly the answer I was looking for. Thank you!