Code Monkey home page Code Monkey logo

fsrs4remnote's Introduction

Archived in 2024-04-25

This repository is archived and will be read-only, because FSRS has been integrated to RemNote 1.16 officially: 🎉 RemNote 1.16 – Ultimate Spaced Repetition! 🎉 | Changelog | RemNote

FSRS4RemNote

FSRS4RemNote is a custom scheduler plugin for RemNote implementing the Free Spaced Repetition Scheduler. FSRS is based on the DSR (Difficulty, Stability, Retrievability) model proposed by Piotr Wozniak, the author of SuperMemo. FSRS is improved with the DHP (Difficulty, Half-life, Probability of recall) model introduced in the paper: A Stochastic Shortest Path Algorithm for Optimizing Spaced Repetition Scheduling.

FSRS4RemNote consists of two main parts: scheduler and optimizer.

The scheduler is based on a variant of the DSR model, which is used to predict memory states. The scheduler aims to achieve the requested retention for each card and each review.

The optimizer applies Maximum Likelihood Estimation and Backpropagation Through Time to estimate the stability of memory and learn the laws of memory from time-series review logs.

Usage

  • Install the plugin from the RemNote plugin marketplace.
  • Open the settings page and click on Custom Schedulers.
  • You can choose to use FSRS4RemNote as your Global Default Scheduler or any other scheduler by clicking on the "Scheduler Type" dropdown menu and selecting "FSRS4RemNote".
  • There are a number of scheduler parameters which you can modify if you wish.

FAQ

What does the 'Free' mean in the name?

  • The algorithm (FSRS) supports reviewing in advance or delay. It's free for users to decide the time of review. And it will adapt to the user's memory.
  • Meanwhile, spaced repetition is one essential technology to achieve free learning.
  • FSRS runs entirely locally and has no risk under others' control.

How does FSRS Calculate the next review date?

  • The FSRS4Anki scheduler will calculate memory states based on your rating and the DSR model of memory (Difficulty, Stability, Retrievability). The scheduled date is based on memory states which get updated with each repetition and the custom parameters you set in the Custom Scheduler settings.
  • The DSR model uses thirteen parameters and six equations to describe memory dynamics during spaced repetition practice. For more details, see Free Spaced Repetition Scheduler.
  • The model considers three variables that affect memory: difficulty, stability, and retrievability.
    • Difficulty refers to how hard it is to maintain a memory of something; the higher the difficulty, the harder it is to increase its stability and maintain it long term.
    • Stability refers to the storage strength of memory; the higher it is, the slower it is forgotten.
    • Retrievability refers to memory's retrieval strength; the lower it is, the higher the probability that the memory will be forgotten.
  • In the model, the following memory laws are considered:
    • The more complex the memorized material, the lower the stability increase.
    • The higher the stability, the lower the stability increase (also known as stabilization decay)
    • The lower the retrievability, the higher the stability increase (also known as stabilization curve)

What about cards with long repetition histories using a different scheduler? Do I have to start from scratch?

  • No! The FSRS4RemNote scheduler will automatically convert other schedulers' repetition information to FSRS memory states.

What happens if the plugin isn't running when I do my repetitions?

  • RemNote will automatically fallback to either the Global Default Scheduler or the RemNote default scheduler algorithm.

fsrs4remnote's People

Contributors

bjsi avatar l-m-sherlock avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

bjsi hugomarins

fsrs4remnote's Issues

Create_init_custom_data in case of first rating using the plugin is TOO-EARLY

It looks like if the first rating using the plugin of a card with previous review history if TOO-EARLY, no CustomData is stored:

image

But after 1 hour, when the card is shown, the Init_custom_data will be calculated, and will get an incorrect initial stability (relevant difference if that 'TOO-EARLY' was pressed in a very overdued card). Because the initial stability will be calculated as if [that 'TOO-EARLY' pressing day (-) the previous review date] was the previous interval, when in fact this is not:
image

(Am I not thinking clearly here?)

I noticed that the calculated stability was strange for a card with this edge case:
image

The new stability was too long for my settings (and exactly matched the one that would be correct if the last interval was indeed ['TOO-EARLY' pressing day (-) the previous review date ], instead of 3.7 months).

image

I wouldn't bother you if I knew how to solve this. Can you help me?

[FEATURE] Custom Data exhibition in metatada during queue

@bjsi , is it possible to exhibit the Custom Data in RemNote card metadata, in the "Extra Info" column, just as it already happens in Anki? (you can see stability and difficulty there in Anki)
It makes it easier to see if everything is ok with the scheduler behavior.

Thanks in advance!

image

[FEATURE] Offline support

Is your feature request related to a problem? Please describe.
When offline the custom scheduler is fallbacked into default scheduler.

Describe the solution you'd like
I asked Remnote's support and they say it was not a problem on their end, FSRS does not need network (as anki's implementation) so is that similar story in Remnote's implementation?

Intervals in case of recall of very overdued cards are too large

As far as I can see, the FSRS is not following the formula for the new Stability after a successful recall. In case of a very overdued card, the stability got almost twice my calculated new stability:

image

My settings are: 1, 2.5, 5, -1, -1, 0.2, 1.5, -0.12, 0.8, 3, -0.2, 0.45, 1.2

The system returns a new stability of 1.6y for this card.

image

But, handling the formula, it appeared to me that the interval should instead be about 4.5x the last stability (~60 days), that is, something like 0.74 years. (in the link below, my calculation)

https://www.geogebra.org/m/f3zrfrby

Is there any mistake in the formula I used? Can you just check if the previous Stability is been considered correctly, that is, without reckoning the overdue period, already considered in the Retrievability?

Thanks!

After pressing Hard in a card in Review stage, it appears that the intervals proposed in the next repetition are wrong

Sorry if what I am going to tell sounds nonsense, but as I do not know programming language, I try to figure out things, and maybe my thoughts will not be correct.

I've been using FSRS for a while, and I noted a strange behavior after answering Hard to a card.

It appears that, although the next interval is set correctly, there is another stored information for "stability", and that this stored "stability" does not match the next interval set.

image

Like I said, I don't know how to interpret the code properly, but the behavior that the plugin appears to have is this:

  1. When pressing Hard to a card in the Review stage, the next interval is set correctly.
  2. The "stability" information stored, otherwise, and used in the next repetition of the card, appears to be the "stability" the card would have if I had pressed "God" in that previous review, and not the true interval of the card.
  3. This so being, the intervals calculated for item 2 above (that is, next repetition of the card rated Hard in item 1) are too large, as if the stored "stability" was that of having pressed Good, and not Hard, in item 1 above.

Could you please check the code and see if maybe there is something wrong? Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.