小编典典

间隔重复(SRS)用于学习

sql

一位客户要求我为基于在线的学习站点添加简单的间隔重复算法(SRS)。但是在投入自我之前,我想与社区进行讨论。

基本上,该网站向用户询问一堆问题(通过从数据库中自动选择100个总问题中的10个说),然后用户给出正确或错误的答案。然后将用户结果存储在数据库中,例如:

userid  questionid  correctlyanswered  dateanswered
1       123         0 (no)             2010-01-01 10:00
1       124         1 (yes)            2010-01-01 11:00
1       125         1 (yes)            2010-01-01 12:00

现在,为了最大程度地提高用户学习所有答案的能力,我应该能够应用SRS算法,以便用户下次进行测验时,会收到错误回答率更高的问题;而不是正确回答的问题。此外,以前回答不正确,但最近经常正确回答的问题应该减少出现。

有人有没有实现过类似的东西?有任何提示或建议吗?


阅读 210

收藏
2021-04-15

共1个答案

小编典典

您想要做的是X_i为所有问题提供一个号码i。您可以对这些数字进行归一化(使它们的总和为1),并以相应的概率随机选择一个。

如果N是不同的问题数,M是每个问题已经被平均回答的次数,那么你会发现XM*N这样的时刻:

  • 创建X[N]设置为0的数组。
  • 遍历数据,每次看到问题i回答错误时,回答时间在哪里增加N[i],并且是增加的函数。f(t)``t``f

由于f不断增加,很久以前回答错的问题的影响要小于昨天回答错的问题。您可以尝试不同的方法f以获得良好的行为。

更聪明的方法
更快的方法不是X[]每次选择问题时都生成,而是将其保存在数据库表中。您将无法f使用此解决方案。取而代之的是,每次错误回答问题时加1,然后定期遍历表格-
每隔一个午夜说一次-然后将所有乘以X[i]一个常数说即可0.9

更新 :实际上,您应该基于正确而不是错误的数据。否则,长时间未回答对与非的问题将有较小的机会被选择。应该相反。

2021-04-15