上周和太记作者 @林一二 、钓鱼插件作者 @凹夫几 讨论了一下开源间隔重复的未来,于是抽空写了一个间隔重复算法:open-spaced-repetition/free-spaced-repetition-scheduler
这里简单介绍一下。
名称中的「自由」是什么意思?
本算法支持自由复习,可以提前,也可以推迟,算法会根据记忆模型进行适应。
同时,间隔重复是实现自由学习[1]的基础技术之一。而且算法可以在本地运行,无需担心泄露自己的学习数据。
算法的原理是什么?
本算法基于 SuperMemo 作者 Piotr Wozniak[2] 提出的 DSR 模型开发。
该模型考虑了影响记忆的三个变量:难度(difficulty),稳定性(stability)和可提取性(retrievability)。
稳定性指的是记忆的存储强度,越高,记忆遗忘得越慢。可提取性指的是记忆的检索强度,越低,记忆遗忘的概率越高。
在本模型中,考虑了以下记忆规律:
能简单描述一下算法吗?
- 难度范围
- 初始难度
- 初始稳定性
- 指数遗忘曲线模型
- 复习成功后稳定性更新公式
- 稳定性增长系数 a = 60
- 难度衰减系数 b = 0.7
- 稳定性衰减系数 c = 0.2
- 复习失败后的稳定性
- 遗忘次数
- 遗忘衰减系数 f = 0.3
- 复习后难度更新公式
- 评分范围
- 0 表示遗忘(复习失败)
- 1 表示记住(复习成功)
- 2 表示容易(复习成功)
- 评分影响系数 d = 1
- 可提取性影响系数 e = 1
- 初始稳定性自适应
- 即对第一次复习到遗忘曲线进行线性回归,计算实际的稳定性
- 初始难度自适应
- 目标保留率
- 目前保留率
- 如果 ,就提高初始难度,这样新卡片的复习间隔增长速度就会下降,反之亦然
有现成的算法库吗?
钓鱼插件实现了该算法的 JavaScript 版本:fishing/action-fishing.js,本项目中的 simulator.py 中实现了 Python 版本。
该算法尚未稳定,还有待收集数据验证。很多参数是人工设置的,尚未实现自适应,所以目前没有提供算法库。
我可以使用该算法吗?
可以,但请在项目中指向本仓库。
字虽不多,但求有意。最近还得忙下一篇论文的算法,就不一一展开介绍了,感兴趣的朋友直接 fork 一份代码自己玩吧~
参考
1. 自由学习 ./272543239.html2. 彼得 · 沃兹尼亚克 ./303204832.html