2010-06-03 124 views
13

客户要求我为基于在线的学习网站添加简单的间隔重复算法(SRS)。但在投入自己之前,我想和社区讨论一下。用于学习的间隔重复(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算法在测验中,经常会错误地回答问题;而不是正确回答的问题此外,以前回答不正确,但最近经常正确回答的问题应该不太常见。

有没有人实施过这样的事情?任何提示或建议?

Theese是我所发现的最好的链接:

回答

6

你想要做的是对所有问题i有一个数字X_i。您可以将这些数字归一化(使它们的总和为1)并进行优先选择。

  • 创建阵列X[N]设置为:

    如果N是不同的问题和M数量每个问题都有平均得到回答的次数,那么你可以在M*N时间这样的发现X 0.

  • 运行数据,每次看到问题i回答错误时,增加其中t是应答时间,f是增量功能。

由于f正在增加,很久以前回答错误的问题比昨天回答错误的影响更小。您可以尝试使用不同的f以获得良好的行为。

更聪明的方式 一个更快的方法就是不要产生X[]每次你选择的问题,但它保存在一个数据库表。 你无法应用f这个解决方案。相反,每次问题被错误地回答时,只需加1,然后定期运行表格 - 例如每半夜 - 并将所有X[i]乘以常数 - 例如0.9

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

8

Anki是实施间隔重复一个开源项目。 作为开源代码,您可以浏览libanki的源代码,这是Anki的一个间隔重复库。 截至2013年1月,Anki版本2资源可以浏览here

来源于Python,可执行伪代码语言。 阅读源代码来理解算法可能是可行的。数据模型使用sqlalechmey,Python SQL工具包和对象关系映射器定义,它为应用程序开发人员提供了SQL的全部功能和灵活性。

+2

Anki是Affero GPL(即有效的GPL)。如果你“移植”它,你的应用可能需要获得Affero GPL(病毒许可证)。小心这种方法。如果有人能够将Anki的SRS引擎抽象为一个独立的项目,然后可以插入任何前端,并要求Damien制作LGPL(因此使用它的应用程序不会被GPL) ,但要理解和解开Anki内部结构还是有点工作的,即使如此,Damien可能也不想要Un-GPL SRS引擎。 – 2014-03-30 00:13:09