The new algorithm for Kongzi isn’t really a new algorithm, it is a variation on “prefer unknown cards” from Desktop Kongzi, which was generally the most useful way to use the program.

Modeled after Physical Flashcards

When I teach kids English I give them a colorful little plastic box and a series of laminated index cards which I have produced with colorful pictures on them. The kids love ’em. I tell the kids, when you review the cards, pick 5 or 6 cards off the top of the deck (from the front of the box). Review them. Then put the cards you knew very well at the back of the deck, and put the cards you didn’t know well at the front, for next time.

I ask them to do this once a day for no more than five minutes, and it is a system which works very well for them.

Compared to nothing.

Well, for my advanced students I tell them, if they know the card a little bit but still forgot, they can insert the card into the middle of the deck.

So the idea here is to re-insert the card into the deck based on how well you know it.

Using Randomness

Since we’re doing a computer simulation, I found it easiest to take randomly from the first 5 or six cards, with the lowest score, which would simulate picking the top five or six cards for study and looking at one of them. Then, I thought, I would improve on this slightly by using a distribution, so one always had a chance to ‘refresh one’s memory’ by seeing a known card here and then. Frankly I find that this gives kids confidence when studying.

I chose a simple distribution whereby all of a user’s flashcards are sorted by a number called the Familiarity Score (or “f-score”). Two cards are chosen and the card which is first in the list is the one used. Since the cards are sorted by “f-score”, the cards with the lowest score have a higher chance of being picked. To make a long story short, the program tends to pick cards with lower fscores many more times often than cards with higher fscores, but to a certain extent it is relative to what the fscores of the other cards are.


In practice I find students, especially beginning students, or students who do not study each day, appreciate this system for the following reasons:

  • You always have a chance to pull any card, which some people like. Knowing you won’t see a card for six months might not be very convincing to some people.
  • You always have something to review. Being told by Anki that you have no cards to review on the night before a test is not helpful.

So the K-0 algorithm is essentially an algorithm designed for cramming. As long as that’s what it intends to be, it’s a fine algorithm.


The problem with being a “fine algorithm” is that it becomes a very poor solution to any other similar-but-different problem.

  • The relativeness of the f-score system is unreliable. It could be said the system picks cards based on other card’s f-scores. That doesn’t make sense.
  • Known cards will end up being shown much more often than they really need to because the distribution was not designed to model human memory, but to simply “prefer” lesser known cards.
  • Recently learned cards will also be shown much more often than they need to as they increase in f-score; the algorithm does not respond well to a local/recent string of successful answers on a card.

Some of these issues were kludged in the original Kongzi Desktop software. For example, it had a feature that let you quickly set the known or unknown status of a card.  There are pros and cons to that approach but overall I do feel it is a kludge. Least of all, why would you add a card you “knew” very well anyways?

Frankly I would put K-0’s usefulness at about 50% of something like Anki/SM-2. It’s useful, but about as useful as physical flashcards. At the moment, I am keeping my students on physical flashcards and/or Anki. Well, I am considering experimenting with using K-0 on live students to see how they like the interface. But having a “real” SRS program like Anki is obviously more effective, even though the algorithm Anki uses (SM-2) is severely outdated.

Future Developments for K-1

“Make K-1 operate more like SM-2.”

There will be an immediate switch to scheduling cards based on time. Cards will be given a “due” field which is the time the card becomes due. There will be an “interval” field, which will record the increase or decreae previously applied to the card. Finally, after experimenting with this sort of algorithm in Kongzi Desktop, I will add a “status” field, which will allow you to “hold”, “skip”, “review”, “relearn”, etc. a card. This section is a powerful addition and needs to be qualified. That will be done in the post on K-1 which will possibly be as early as today.

As a preview, I plan to have a card status for hard failed cards which have long intervals. This will schedule the card more often over the short term while not decreasing the interval greatly. It will then make a decision whether to really reset the card or to keep the longer interval.

Another feature I plan to add is that cards which are reviewed early will not increase greatly but perhaps be re-set at the former interval; and that cards which are reviewed late may take into account the extra time since the last review, and soften the blow of a hard fail while rewarding an easy or known response.

These are all great ideas, but the main thrust behind K-1 will be to get onto a simple scheduling system and start keeping track of statistics a little more. A vital feature of K-1 will likely be adding some sort of statistics output, because it is really a useful tool, especially for teachers.

Kongzi Online UI development

This is as good a place as any to record my thoughts on the matter. The big thing that will be done next is add Teacher-Student relationships and possibly Class/Group functions. The basic idea is to get Teachers to give their students a code; when the student adds this code they become a “student” of the teacher until they or the teacher remove them from a “class group”. The teacher will then be able to add and edit cards for all the students in the group and to view their statistics. This is a much needed feature and I have missed it sorely in Anki and other programs for decades.

By Serena

Leave a Reply

Your email address will not be published. Required fields are marked *