Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I've been thinking about this for a while too as an FSRS developer [1].

In general, we can think of a spaced repetition system as being (i) Content-aware vs. Content-agnostic and (ii) Deck-aware vs. Deck-agnostic

Content-aware systems care about what you're studying (language, medecine, etc) while Content-agnostic systems don't care about what you're studying.

Deck-aware systems consider each card in the context of the rest of the cards (the "deck") while Deck-agnostic systems consider each card in pure isolation.

Currently, FSRS is both Content-agnostic as well as Deck-agnostic. This makes it extremely easy to integrate into a spaced repetition system, but this also means the model will underfit a bit.

It it interesting to note that you could in practice optimize seperate FSRS models for each deck covering different topics, which would make it Content-aware in a sense. Additionally, "fuzz" is a somewhat Deck-aware feature of the model in that it exists specifically to reduce interactions between other cards in the deck.

[1] https://github.com/open-spaced-repetition/py-fsrs



I ran into a question a while ago that I couldn't find a good answer to, and while it's not exactly on topic this seems like a good place to ask it.

I was working in a detail rich context, where there were a lot of items, about which there were a lot of facts that mostly didn't change but only mostly. Getting a snapshot of these details into approximately everyone's head seemed like a job for spaced repetition, and I considered making a shared Anki deck for the company.

What wasn't clear was how to handle those updates. Just changing the deck in place feels wrong, for those who have been using it - they're remembering right, the cards have changed.

Deprecating cards that are no longer accurate but which don't have replacement information was a related question. It might be worth informing people who have been studying that card that it's wrong now, but there's no reason to surface the deprecation to a person who has never seen the card.

Is there an obvious way to use standard SRS features for this? A less obvious way? A system that provides less standard features? Is this an opportunity for a useful feature for a new or existing system? Or is this actually not an issue for some reason I've missed?


For what you describe, he ideal system would do this:

1. Identify knowledge blocks that you want people to learn. This is what would be tracked with the SRS.

2. Create cards, with a prompt which requires knowledge blocks to answer. Have the answers in this system feed back knowledge to the SRS.

3. When one of the knowledge blocks changes, take the previous knowledge familiarity and count that against the user.

So for example, at some point a card might be "Q. What effect will eating eggs have on blood cholesterol? A. Raise it." That would be broken down into two knowledge blocks: "Cholesterol content of eggs" and "Effect of dietary cholesterol on blood cholesterol".

At some point you might change that card to "Q. What effect will eating eggs have on blood cholesterol? A. None, dietary cholesterol typically doesn't affect blood cholesterol." (Or maybe we're back again on that one.)

The knowledge blocks would be the same, but you'd have to take the existing time studied on the "Effect of dietary cholesterol on blood cholesterol" and mark it against recall rather than towards recall. Someone who'd never studied it would be expected to learn it at a certain pace; but someone who'd studied the old value would be expected to have a harder time -- to have to unlearn the old value.

I think you could probably hack the inputs to the existing FSRS algorithm to simulate that effect -- either by raising the difficulty, or by adding negative views or inputs. But ideally you'd take a trace of people whose knowledge blocks had changed, and account for unlearning specifically.


You could have a company-provided Anki account for each user where you add and remove cards just for that user. (I thought you might even be able to use your own server, but that doesn't seem to be an option for the iOS app: https://ankicommunity.github.io/Tutorials/anki_custom_sync_s... )

Then placing a "this has changed" notification card at the front of the new queue only for people who learned the old information is as simple as checking the corresponding card's review status in the database.


This specific problem gave us lots of headache while building https://rember.com We don't have a good solution yet. My hope is that something like content-aware memory models solve the problem at a lower level, so we don't have to worry about it at the product level.


Being easy to integrate is an underappreciated feature of FSRS.

Using decks to draw semantic boundaries is likely overly constraining. I think we want to account for finer differences between cards. Decks are coarse and people differ in the ways they use them, some people recommend having just one global deck. Notes are too fine. We explored something in between: a note capturing an idea or concept, plus an associated set of cards. Turns out it's hard to draw idea boundaries. That's why I think it's easier to relate cards by semantic embeddings or more rigid but clearer structures, like the DAG of dependencies suggested elsewhere in this thread.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: