小程序初览
从前天开始开这个坑,这两天把预想中的界面做的差不多了,大概长得就是这个样子。界面传承了之前的两个小程序,这样的话做起来相对而言简单一点,需要用的组件可以方便地复制粘贴,整个小程序预计在 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 (化简后)
- EF’ 新的简易因子
- EF 旧的简易因子 3. q 为评价的分数,分数请参照「单词记忆等级」
- 该式子中当 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 进行改进,再加上一些新的特性,即构成背单词应用的算法核心。
有SM2算法的英语程序吗?
你好!这篇文章有好久了🤣,实际上像这种记忆的算法都是通用的,我这里推荐Anki哈哈哈,但是牌组需要自己去收集或者制作。
第二张表可以再看一下吗,似乎算错了,第二个EF=2.6,而不是表中的2.5
你好!重新按照文中的公式计算了一下确实是2.6,可能公式输错了大概🤣