间隔重复(SRS)用于学习 [英] Spaced repetition (SRS) for learning

查看:108
本文介绍了间隔重复(SRS)用于学习的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

A client has asked me to add a simple spaced repeition algorithm (SRS) for an onlinebased learning site. But before throwing my self into it, I'd like to discuss it with the community.

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

Basically the site asks the user a bunch of questions (by automatically selecting say 10 out of 100 total questions from a database), and the user gives either a correct or incorrect answer. The users result are then stored in a database, for instance:

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算法,以便用户,下次他参加测验时,会收到更多错误回答的问题;比正确回答的问题要多。同样,以前回答不正确,但最近经常正确回答的问题应该较少出现。

Now, to maximize a users ability to learn all answers, I should be able to apply an SRS algorithm so that a user, next time he takes the quiz, receives questions incorrectly answered more often; than questions answered correctly. Also, questions that are previously answered incorrectly, but recently often answered correctly should occur less often.

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

Have anyone implemented something like this before? Any tips or suggestions?

这些是我找到的最佳链接:

Theese are the best links I've found:

  • http://en.wikipedia.org/wiki/Spaced_repetition
  • http://www.mnemosyne-proj.org/principles.php
  • http://www.supermemo.com/english/ol/sm2.htm

推荐答案

您想做什么对于所有问题 i ,都应使用数字 X_i 。您可以将这些数字归一化(使它们的总和为1),并以相应的概率随机选择一个。

What you want to do is to have a number X_i for all questions i. You can normalize these numbers (make their sum 1) and pick one at random with the corresponding probability.

如果 N 是不同问题的数量, M 是每个问题的平均回答次数,那么您可以找到 X M * N 时间中像这样:

If N is the number of different questions and M is the number of times each question has been answered in average, then you could find X in M*N time like this:


  • 创建数组 X [N] 设置为0。

  • 遍历数据,每次看到问题 i 回答错误,将 N [i] 增加 f(t),其中 t 是应答时间, f 是递增函数。

  • Create the array X[N] set to 0.
  • Run through the data, and every time you see question i answered wrong, increase N[i] by f(t) where t is the answering time and f is an increasing function.

由于 f 越来越多,所以很久以前回答错的问题的影响要小于昨天回答错的问题。您可以尝试使用其他 f 来获得良好的行为。

Because f is increasing, a question answered wrong a long time ago has less impact than one answered wrong yesterday. You can experiment with different f to get a nice behaviour.

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

The smarter way A faster way is not to generate X[] every time you choose questions, but save it in a database table. You won't be able to apply f with this solution. Instead just add 1 every time the question is answered wrongly, and then run through the table regularly - say every midnight - and multiply all X[i] by a constant - say 0.9.

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

Update: Actually you should base your data on corrects, not wrongs. Otherwise, questions not answered neither true nor false for a long time, will have a smaller chance of getting chosen. It should be opposite.

这篇关于间隔重复(SRS)用于学习的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆