Comments (12)
By the way, I plan to use a brand new way to find the optimal retention in FSRS Optimizer. It has been implemented in https://github.com/open-spaced-repetition/fsrs-rs
The main idea of the new method is to simulate the review process of user with different retention and select the retention which maximize the estimated total knowledge.
from fsrs-optimizer.
fsrs-optimizer/src/fsrs_optimizer/fsrs_simulator.py
Lines 101 to 103 in 3583fd2
The forgotten cards' ratings must be again
, so we don't need to sample for them. The code only sample rating fromhard
, good
and easy
for those recalled cards.
fsrs-optimizer/src/fsrs_optimizer/fsrs_optimizer.py
Lines 515 to 532 in 3583fd2
Here I have estimated these probabilities from the user's actual review history.
from fsrs-optimizer.
Please see my paper. The mechanism of this part has been described in Section 4 OPTIMAL SCHEDULING:
source: www.maimemo.com/paper/
from fsrs-optimizer.
The main idea of the new method is to simulate the review process of user with different retention and select the retention which maximize the estimated total knowledge.
Can you explain how that one works, then? The way I see it, it will just output the max. retention every time, since that's what maximizes total knowledge. Unless you mean total knowledge acquired per unit of time.
from fsrs-optimizer.
In the simulation, the time to learn per day is fixed. If the retention is too high, the user will have no time to learn new cards.
For the details of simulation, please see this pseudo code:
from fsrs-optimizer.
That's not very easy for me to understand, but thank you.
Unrelated, but have you compared the speeds of the Rust-based optimizer and Python-based optimizer? I would assume that Rust version is faster.
from fsrs-optimizer.
I haven't compared the speeds. Because Rust-based optimizer hasn't implemented the splits of dataset.
from fsrs-optimizer.
Also, how do you know whether the new method is better?
With the algorithm itself, finding out whether a change is good or bad is very straightforward - just run both on the same dataset and check the RMSE. We have "ground truth" - the actual repetition history. But how do you assess which method of finding optimal retention is better?
from fsrs-optimizer.
The old method didn't support decimal difficulty, so it's imprecise. And it also assumed the user only press good
and again
.
from fsrs-optimizer.
So I was looking at the code, and this raises 2 questions:
- If I understand it correctly, does it mean that in the simulator "Again" can only happen during the first review, and cannot happen during later reviews?
review_rating_prob
only has 3 values. - Wouldn't it be better to estimate these probabilities from the user's actual review history?
from fsrs-optimizer.
Thank you. One more question: does the simulator use the same value of answer time (recall_cost
) for Hard, Good and Easy? Wouldn't it be more precise to use 3 different values for three passing grades?
from fsrs-optimizer.
The current simulator uses the same value. You can open an issue for this feature request.
from fsrs-optimizer.
Related Issues (20)
- Use the median instead of the mean for recall costs and learn cost HOT 8
- A better outlier filter for "Compute minimum recommended retention" HOT 2
- [Feature request] Further improving the estimation of reviews times for calculating minimum recommended retention HOT 13
- Q: Effect of review_duration column on weights HOT 1
- try ruff in ci? HOT 2
- `optimizer.create_time_series` raises Exception HOT 2
- In the stability charts, change RMSE to MAPE
- Enforce S0(Again) < S0(Hard) < S0(Good) < S0(Easy) HOT 2
- FSRS-5 优化器,优化参数时发生报错:“error Columns not found: 1, 2, 3, 4” HOT 5
- index 1 is out of bounds for axis 0 with size 1 [BUG] HOT 1
- Training data is inadequate. HOT 5
- [Feature Request] make the simulator more precise by using different values of recall_cost for Hard, Good and Easy
- [Bug] Can't use absolute path as arg HOT 1
- [BUG] 'Optimizer' object has no attribute 'w' HOT 1
- [Feature request] Improve post-lapse stability analysis HOT 13
- See if this code could be used to speed up finding optimal retention HOT 16
- [Feature Request] Investigate how robust are parameters and RMSE HOT 18
- Optimized w[3] too low HOT 12
- [Feature Request] Add another condition to the outlier filter HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fsrs-optimizer.