开第三个坑「法语背单词记忆小助手」:背单词软件的算法

小程序初览

从前天开始开这个坑,这两天把预想中的界面做的差不多了,大概长得就是这个样子。界面传承了之前的两个小程序,这样的话做起来相对而言简单一点,需要用的组件可以方便地复制粘贴,整个小程序预计在7月中下旬上线(当中还要搬家啥的,所以时间还真不一定),如果不懒一点的话可能更早一点。

整个小程序有什么难度呢?我觉得它大部分的逻辑和组件的功能在小程序「法语动词变位记忆小助手」类似甚至相同,但是问题出在背单词软件的算法逻辑上。那算法逻辑又难在哪里呢?其实说起来是挺简单的一件事:当你第一次看到一次单词时,你眼前有三个选项:困难、模糊、简单。当你选了其中一项之后,该单词就会在相应的时间重新出现在你的眼前,这时还是有那么三个选项。你的选择有一次决定了该单词下次出现在你眼前的时间。

这里的时间间隔可以让它很简单:比方说,当选择了简单按钮,单词隔5天出现在你的眼前;选择了模糊按钮,单词每隔3天出现在你的眼前;选择了困难,单词隔天就出现在你眼前。

单词记忆等级

根据SuperMemo的分级,单词从最熟悉到最不熟悉分为6个级别。这6个级别的描述分别为:

5 – perfect response
4 – correct response after a hesitation
3 – correct response recalled with serious difficulty
2 – incorrect response; where the correct one seemed easy to recall
1 – incorrect response; the correct one remembered
0 – complete blackout.

SuperMemo 2 算法

SM2算法

间隔重复使用以下的公式:

I(1)=1
I(2)=6
当 n>2时:  I(n)=I(n-1)*EF

其中:

  • I(n) – 第n次重复后的间隔时间(单位为天)
  • EF – 简易因子

简易因子的范围是1.1~2.5,其中1.1最难、2.5最简单,也就是说数字越大越简单。在记忆过程中这个数字将会不断减少,也就是说当用户对一个单词越不熟悉,简易因子的值会越小。此外简易因子应当不低于1.3,因为当值低于1.3会出现较多重复。

其中计算一个新的单词的简易因子的式子是这样的:、

EF'=EF+(0.1-(5-q)*(0.08+(5-q)*0.02)) 
EF'=EF-0.8+0.28*q-0.02*q*q             (化简后)
  1. EF’ 新的简易因子
  2. EF旧的简易因子
  3. q为评价的分数,分数请参照「单词记忆等级」
  4. 该式子中当q等于4时,简易因子将不会改变

模拟一下?

下表是我使用Excel进行了一下实验,看一下根据上述算法当记住一个单词需要多长时间以及该单词在记忆过程中出现的规律。下面的表格中只有公式是符合原SM2算法的,其初始的间隔天数分别是1和2;此外,单词会随着记忆等级q的提高而增加再次遇到的时间(如表1和表2);反之,则会缩短时间(如表3)。

Anki算法和它的区别

  • SM2的算法中初始间隔为1天,然后就是6天,但是在Anki中能够自定义。在新的小程序中,我打算把第2个间隔时间改为2~3天。
  • Anki中的记忆评级是4种,而SM2的记忆评级有6种。
  • 回答时间如果超过预计也会被考虑在内。在新的小程序中暂时不加入回答时间的限制。
  • 当用户选择不认识时,该卡片的间隔时间将会重置,也就是说可能会在第2天能立即看到该卡片。

总结

更多内容可以参考这篇博文。在这篇博文的结尾处,作者提到了几种新的特性:

  • 不限制每天的单词复习数量。
  • 尽量减少用户对于卡片记忆类型的输入。
  • 将卡牌制作为三面卡组。(即单词页例句页以及解释页)
  • 总的来说就是基于SM2算法,结合anki进行改进,再加上一些新的特性,即构成背单词应用的算法核心。

参考资料

  1. Application of a computer to improve the results obtained in working with the SuperMemo method
  2. SuperMemo与Anki算法研究与探索
  3. 有效背单词的一个简单算法(一)——SugarMemo算法学习记录
  4. Spaced repetition algorithm from SuperMemo (SM-2)

发表评论

电子邮件地址不会被公开。 必填项已用*标注