The best way to modify and synthesize exploded repetition software

I am wondering how to modify and generalize exploded repetition software. In particular, I am wondering how to change the number of cards displayed, the range of cards and the ability to specify a specific deck of cards.

I worked on reuse software for a while and found the following issues:

It is difficult to make sure that the number of cards that will be displayed on a specific date remains within a certain range

Instead of telling me which cards I need to study today, I would like to pick up a deck when I want and go through a couple of cards, depending on how much time I have

I understand that the last point is somewhat contrary to the logic of spaced repetition, but it may be possible to find a compromise.

The problem that the program should solve will be "Given that I am now asked to display a card, which card to choose, based on each history of learning cards, importance, etc."

This approach can easily generalize to incremental reading and to-do list management, I think.

Since I am a beginner programmer, any help on how to implement such an algorithm would be greatly appreciated.

Below you will find my main attempt to address the problem; the most obvious problem here is that the code does not account for the growth of the card file over time.

#! /usr/bin/env python import random box = [] class flashcard(object): def __init__(self, quest, answ, score): self.question = quest self.answer = answ self.score = score # ------------------------------------------------------------------------------ f = open('list.txt','r') for line in f: parts = line.split('\t') box.append(flashcard(parts[0],parts[1],int(parts[2]))) f.close() # ------------------------------------------------------------------------------ keepgoing=True while keepgoing: card = random.choice(box) if random.uniform(0,1) * card.score < 1: a = raw_input(str(card.score) + ' ' + card.question + ' ') if a == card.answer: card.score *= 3 elif a == 'q': keepgoing = False else: card.score = 1 print 'WRONG -->' + card.answer else: pass # ------------------------------------------------------------------------------ f = open('list.txt','w') for card in box: f.write("%s\t%s\t%s\n" % (card.question, card.answer, card.score)) f.close() 

Best, j


Well thank you! Although your points are absolutely correct, only now I understand that the motivation for my question was broader, and therefore some points remain open to me.

1st I would be interested to have sthg. for a command line that is as simple as possible Secondly, I would like to avoid date-based logic, even if this contrasts slightly with SRS 3rd I would like to have a simple script that I can hack into many different applications such as list management affairs, management of reading lists, management of a playlist (as in http://imms.luminal.org/ ), etc.

So, I would like to have a common script that can represent elements randomly, but weighted by importance, lightness, urgency, interest, etc.

+5
source share
2 answers

There is a wealth of literature on this subject. Lindsay, Schroyer, Paschler and Moser recommend a document that I recommend “Improving the Long-Term Preservation of Knowledge by Students through Personalized Reviewing”: https://web.archive.org/web/20140331061418/http://laplab.ucsd.edu/article /LindseyShroyerPashlerMozer2013.pdf (if the link does not work, be sure to get a version with applications and additional online materials that describe in detail the machine learning algorithm that they describe).

This specific document describes a machine learning algorithm that, given the set of correct and incorrect answers of students to a list of questions with time stamps, estimates the probability of a correct answer for each (student, question) -pair. So this answers exactly one of your questions. At any given time, such an algorithm can tell you the question that is most at risk of being forgotten (the minimum probability of a correct answer). Moreover, it gives you a sorted list of questions that reduce the risk of forgetting. And yet, even more than that, you will get a number from 0 to 1, indicating the risk of forgetting, so you can set a threshold such as "Do not ask me questions for which the probability of forgetting is less than 5%.".

Not a beginner's project, but please try!

Another minor point: please feel free to experiment with non Anki's learning strategies. There is no evidence other than the popularity that Anki workflows are the best way to do anything, in fact I doubt very much that this works for all students.

Edit I developed an algorithm for Bayesian repeating at intervals and implemented it in Python, JavaScript, etc., which I called Ebisu: https://fasiha.imtqy.com/ebisu/

+2
source

You can use Anki the way you want. You do not need to make all the cards that are due every day, and at the same time you have the opportunity to view the cards earlier than they should. It should even be possible to write an Anki plugin that hides the number of credit cards and automatically evaluates the cards before they appear if there are no matching cards.

As a practical matter, I would recommend not changing the process. Having a certain amount of proper cards means that you feel successful when you finish your daily pile of cards. This sense of success helps you establish the habit of regularly making your cards.

Do not draw your cards exactly at the time they are waiting, also increases the total training time. If you look at the cards later, you will increase the number of cards that you forget. If you look through them earlier, you are wasting your time.

If you still want to invent the wheel, you should start by reading how the SM2 algorithm works.

+1
source

Source: https://habr.com/ru/post/1415711/


All Articles