2010-06-03 30 views
13

Un cliente me ha pedido que agregue un algoritmo simple de repetición espaciada (SRS) para un sitio de aprendizaje en línea. Pero antes de lanzarme en eso, me gustaría discutirlo con la comunidad.Repetición espaciada (SRS) para aprender

Básicamente, el sitio le hace al usuario un montón de preguntas (seleccionando automáticamente 10 de cada 100 preguntas de una base de datos) y el usuario responde de manera correcta o incorrecta. Los usuarios de resultados se almacenan en una base de datos, por ejemplo:

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  

Ahora, para maximizar la capacidad de los usuarios para aprender todas las respuestas, yo debería ser capaz de aplicar un algoritmo SRS para que un usuario, la próxima vez que toma el cuestionario, recibe preguntas contestadas incorrectamente con más frecuencia; que las preguntas respondidas correctamente. Además, las preguntas que anteriormente se respondieron incorrectamente, pero que a menudo se respondieron correctamente con frecuencia, deberían producirse con menos frecuencia.

¿Alguien ha implementado algo así antes? ¿Algún consejo o sugerencia?

theese son los mejores enlaces que he encontrado:

Respuesta

6

Lo que quiere hacer es tener un número X_i para todas las preguntas i. Puede normalizar estos números (hacer su suma 1) y hacer una elección priorizada.

Si N es el número de diferentes preguntas y M es el número de veces que cada pregunta ha sido contestada en promedio, entonces se podría encontrar X en M*N momento como este:

  • crear el conjunto de matriz X[N] a 0.
  • Ejecutar a través de los datos, y cada vez que vea pregunta i contestó mal, aumentan N[i] por f(t) donde t es el tiempo de respuesta y f es una función incresing.

Dado que f va en aumento, una pregunta que se respondió erróneamente hace mucho tiempo tiene menos impacto que ayer una respuesta incorrecta. Puede experimentar con diferentes f para obtener un buen comportamiento.

La manera más inteligente Una forma más rápida no es generar X[] cada vez que elige preguntas, pero lo guarda en una tabla de base de datos. No podrá aplicar f con esta solución. En su lugar, solo agregue 1 cada vez que la pregunta se conteste incorrectamente, y luego ejecute la tabla regularmente, por ejemplo, cada medianoche, y multiplique todos X[i] por una constante, digamos 0.9.

Actualización: En realidad, debe basar sus datos en correcciones, no en errores. De lo contrario, las preguntas que no responden ni verdaderas ni falsas durante mucho tiempo tendrán menos posibilidades de ser elegidas. Debería ser opuesto.

8

Anki es un programa de código abierto aplicación de la repetición espaciada. Al ser de código abierto, puede buscar la fuente libanki, una biblioteca de repeticiones espaciadas para Anki. A partir de enero de 2013, se pueden buscar las fuentes de la versión 2 de Anki here.

Las fuentes están en Python, el lenguaje ejecutable pseudocódigo. Leer la fuente para comprender el algoritmo puede ser factible. El modelo de datos se define utilizando sqlalechmey, el kit de herramientas Python SQL y Object Relational Mapper que brinda a los desarrolladores de aplicaciones toda la potencia y flexibilidad de SQL.

+2

Anki es Affero GPL (es decir, efectivamente GPL). Si lo "portas", es posible que tu aplicación tenga que ser Affero GPL (licencia viral). Cuidado con este enfoque. Sería genial si alguien pudiera abstraer simplemente el motor SRS de Anki en un proyecto independiente que luego podría conectarse a cualquier interfaz y pedirle a Damien que haga esa LGPL (para que las aplicaciones que la usen no sean GPL). , pero va a ser un poco difícil entender y desenredar las partes internas de Anki, e incluso entonces, Damien podría no desear desconectar el motor SRS de GPL. –