FSRS:現代的で効率的な間隔反復アルゴリズム
(github.com/open-spaced-repetition)- 学習の復習スケジュールを最適化する FSRS の
ABC of FSRSWiki は、fsrs4anki から新しいawesome-fsrsWiki へ移動 - 関連する MaiMemo の研究資料は、間隔反復スケジュールの最適化と記憶ダイナミクスのモデリングを、それぞれ ACM KDD・IEEE TKDE 論文として扱う
- 別の記事では、学部生が ACM KDD 論文を発表した経験を通じて、間隔反復アルゴリズムの研究プロセスを紹介
FSRS-Anki-20kとanki-revlogs-10kは、時系列特性を含む オープンソースデータセットとして併せて提示- FSRS はコミュニティ主導の 独立したオープンソースプロジェクトであり、MaiMemo Inc. のような組織の支援が、主要貢献者の継続的な参加を支えている
新しい Wiki に移動した ABC of FSRS
ABC of FSRSページは新しい Wiki へ移動- 新しい場所: https://github.com/open-spaced-repetition/awesome-fsrs/wiki/ABC-of-FSRS
間隔反復の研究資料
- MaiMemo の論文 2 本がリンクされている
- A Stochastic Shortest Path Algorithm for Optimizing Spaced Repetition Scheduling: 間隔反復スケジュールの最適化を扱う ACM KDD 論文
- Optimizing Spaced Repetition Schedule by Capturing the Dynamics of Memory: 記憶ダイナミクスの把握による間隔反復スケジュール最適化を扱う IEEE TKDE 論文
- 2 本の論文はいずれも中国語版リンクも提供されている
研究経験の記事
- How did I publish a paper in ACMKDD as an undergraduate?: 間隔反復アルゴリズムに関する 研究経験を扱った記事
公開データセット
- 時系列特性を含む、間隔反復関連の オープンソースデータセットが提供されている
コミュニティプロジェクトと支援
- FSRS はコミュニティ主導の 独立したオープンソースプロジェクトである
- 墨墨背单词 (MaiMemo Inc.) のような組織の支援に感謝を示している
- MaiMemo の支援により、Jarrett Ye のような主要貢献者が FSRS に時間と専門性を注げるようになっている
- こうした協業は、FSRS が誰にでも自由に提供される先進的な 間隔反復アルゴリズムであり続ける助けとなっている
1件のコメント
Hacker Newsの意見
間隔反復を改善するうえで大きく過小評価されている方法は、カードをもっと簡単にすること。効果的なカードは驚くほど簡単でよいのだと気づいた
最初はAnkiでフランス語の語彙を覚えるために、英語↔フランス語の双方向カードを作っていたが、カードが数百枚になると類義語が多すぎてつらくなった
その後、Katzumotoの日本語学習アドバイスに従って、電子書籍やWebページの段落全体を貼り付け、単語を1つだけ隠す穴埋めカードを作ったところ、簡単なのに効果的だった
さらに怠けて、単語の半分だけ隠したり、単語を太字にして文脈の中でだいたい思い出せれば合格にしたりしたが、むしろそのほうがうまくいった
カードが出てきたときに「うわ、またあのカードか」と思ったら削除し、3回間違えたらAnkiが永久に保留するよう設定した。本当に知る必要がある単語なら、すぐにもっとよい文脈で再び目にするので問題なく、フランス語の語彙は引き続き速いペースで増えた
最大の改善は、より優れた間隔反復アルゴリズムよりもカード形式の改善から生まれる気がするし、役に立つには簡単すぎるカードを作るのは意外に難しいと思う。3言語でAnkiの反復を35,000回以上やってみた結果だ
何かを学び始めた最初の1か月にAnkiへ数千枚を詰め込み、1〜2か月後に復習量に圧倒され、復習が雑務のように感じられてやめてしまうケースをよく見る
違いを生む助言は2つ。カードを少し「簡単すぎる」くらいにすること、そしてどのカードを入れるかをかなり選別することだ
カードを最初に作るときは、そのテーマをちょうど勉強している最中で頭の中に鮮明に残っているため、今の自分にとって面白く挑戦的なカードを作りたくなる。だが1〜2週間後には、混乱させるより記憶を軽くつつく程度に簡単なカードのほうがよい
本1冊分の文章を丸ごとAnkiに入れるより、果樹園を歩くようにゆっくり見回し、いちばんよいリンゴを1つか2つだけ摘むほうがいい。腐ったリンゴ、つまり興味がないカードや難しすぎるカードはデッキ全体を汚染し、復習そのものを避けるようにしてしまう
復習はたいてい素早く流れていくので、カード1枚あたりの学習時間の中で作成時間が意外に大きな割合を占める。最近は文脈をどんどん減らしており、辞書プラグインが作る基本的な単純カードだけで十分な場合も多い
カードの表面にあえて文脈を追加するのは、ほとんどの場合、その文脈の中でしか見かけない専門用語のときくらいだ。単独で学ぶ価値がない場合である
ただし、怠け気味にやり、自分に寛容になるのはよいと思う。答えを採点するときも、ネイティブ並みの完璧な習熟ではなく、実際に混同を避けられる程度に理解できたかを基準に、かなりゆるく扱っている
カードの品質を大きく改善してくれるはずだ
たとえば指板上の音を間隔反復で力ずくで押し込むこともできるが、実際には文脈を混ぜることのほうが効果的だった
ある週は怠けて音名だけをドリルし、別の週はハンガリアン・スケールのような変わった音階をいじり、また別の週はアルペジオのコードやパワーコード進行、特定の曲の音や雰囲気を再現しようとする
時間がたつと、脳がつながりを作り始める。「これは単にGマイナースケールだな」「これはGメジャースケールだけど、あの音を飛ばしているんだな」「このパターンならああいうふうに弾けるんじゃないか?」といった気づきが生まれる
自分が知っていると思っていることより、知らないことに気づく速度のほうがずっと速く伸びるという不思議な感覚もある。それでも、5〜10分のギター課題を投げてくれる間隔反復アルゴリズムを使って、筋肉記憶と神経のつながりを一緒に育ててみようかと考えている
内容が言語だけのときより多様だからか、カード形式の影響力を大きく感じる。他人が作ったデッキでも回答側の文言をよく直すが、定着率に体感できる差が出る
簡潔で自然に流れる回答のほうが身につきやすい。ぎこちなく感じるカードがあれば、ためらわず直すほうがよい
Ankiで外国語の単語を何万語も覚えたが、カードに画像があると、単語を覚えるのにいつも役立った
今は、家族と遊ぶクイズゲームのカード750枚を覚えるという、やや馬鹿げているかもしれないプロジェクトをやっている。すべての質問の答えが年であるカードだ。例: 「Coca Cola Lightは何年に登場したか?」
Midjourneyでカード用の画像を作ると、はるかに思い出しやすくなる
世紀ごとに代表人物を置く仕組みを使っている。Einsteinは1900〜2000年、Marie-Antoinetteは1700〜1800年を表す
物は10年単位を表す。60年代の車は60年代、肩パッド入りジャケットは80年代、といった具合だ。最後の1桁の数字も同じように扱う
Midjourneyにこうした要素を漫画風の画像にしてもらい、いちばん面白い、または突拍子もない画像を保存してAnkiカードの裏面に入れる。画像は年そのものより思い出しやすいことが多い
第二に、画像がない実際の状況では想起が悪くなる可能性があるので、画像がある場合とない場合を分けて定期的にテストすべきだ
第三に、そのクイズがTrivial Pursuitなのか気になる。友人の1人は、オリジナルのGenusエディションのカードを全部意図的に覚えていた
興味深い。ベンチマークによると、このアルゴリズムを使うと、従来の Anki アルゴリズムより 20〜30% 少ないカードを復習すればよいらしい
数日前に https://python.cards で使っている従来の SM-2 アルゴリズムの Python 実装を公開したのだが、FSRS に切り替えることもできそう: https://github.com/vlopezferrando/simple-spaced-repetition
Web アプリをオープンソースとして公開する可能性があるのかも気になる。学生が X を学ぶ、という形で特定分野のフラッシュカードを見せる人気の方式になりそうに見える
説明を見ると、FSRS も依然として各カードに正確な復習日を付けるようだ。この機能のせいで Anki をやめた
大学生でもなく試験を受けるわけでもないので、単にやりたいときに練習したい。セッション間に長い空白があってもいいし、未消化のカードが積み上がっている感じを受けたくない
Anki は素晴らしいアプリだが、復習日を付けるのではなく、カードをランダムサンプリングしつつ、緊急に復習すべき確率に比例して選ぶアルゴリズムがあればよいと思う
https://github.com/fasiha/ebisu のような方式が Anki プラグインで可能か、公開カード形式を使う似たアプリがあるとよい
ただし「未消化分」をすべて片付けると、もう好きなときに練習することはできず、再び練習可能になるまで一定期間待つ必要がある
覚えている事実の反復はうんざりするし、忘れたものの多くは完全に忘れてしまっていた。そのため反復の意味がほとんどなく、進捗が非常に遅かった
核心は、ほとんど忘れる直前に反復することだが、これは期限とスケジュール管理なしには難しい
実際には期限は使っておらず、依頼された一部の分析機能を除けば、ユーザーを複数の難易度レベルに維持しようとしている
常に未消化を 100% なくすことよりも、前に進むことを重視している。本当に重要な単語なら、お気に入りに入れるか、また目にすることになる
公開フラッシュカードアプリではなく、外国語の自動文採掘にかなり注力している。それでも FSRS を修正してみた経験についての質問には喜んで答えられる
製品については https://blog.phrasing.app/phrasing-first-look/ で見られる
FSRS を 3か月使ってきて、以前の SM2 スケジューリングアルゴリズムを試行錯誤で調整しなければならなかった苦痛がついに解消された
各デッキの内容は最適な保持率に大きな影響を与えうるが、今では数か月ごとに各デッキの重みを再学習させれば適切に適応する
論文[0]も、大規模な実環境における間隔反復の科学を厳密に分析した内容を見たいなら読む価値が大きい
広範なベンチマークがあるため、ほとんどの人はレビューが数千件たまるまで、自分のコレクションに合わせて重みを再調整しても大きなメリットはないだろう。著者は 1,000 回以上を推奨している
カードを遅れてやってもうまく機能する。想起確率が安定度と最後の復習時点に基づいており、期限が過ぎた後でも思い出せたなら、安定度が少し長めに更新されるためだ
[0] https://dl.acm.org/doi/10.1145/3534678.3539081?cid=99660547150
[1] https://github.com/open-spaced-repetition/fsrs4anki/wiki/The-Algorithm
フラッシュカードが趣味で好きなので、毎日いくつもの間隔反復アプリを楽しみで使っています。FSRSも使ってみて良いですが、最新のSuperMemoほどではまだありません。
同じ、または似た資料を2つ以上のアプリに入れてみると違いが見えます。それでもFSRSは、現在出ているほぼすべてのものよりずっと優れていて、近いうちにSuperMemoより良くなりそうです。
Mochi Cardsは約1年使ってみましたが、まあまあという程度で、標準のAnkiインストールより少し良いくらいでした。Mnemosyneも似ています。SuperMemoのSaaSアプリも悪くありませんが、言語教材の構成方法は好みではありません。
言語の語彙にはClozemasterを使い、正解した後はその文をSuperMemoに入れています。SuperMemoのアルゴリズムのほうがそれだけ優れているからです。各単語についてのChatGPTの説明もあるので、それもSuperMemoに入れています。
いちばん難しいのは、やはり良いカードを作ることです。アイデアをさらに得るには http://arxiv.org/abs/2401.01257 と https://rust-book.cs.brown.edu が役立ちます。
SuperMemoほど素早くカードを作れるフラッシュカードプログラムは、まだ見つけられていません。SuperMemoではテキストの塊を貼り付け(ctrl-n)、穴埋め削除にする単語を選んで alt-x を押すだけです。同じテキスト片から何度もでき、そのたびに新しい穴埋めカードが復習に入ります。
ほかのアプリは、たいていカードを1枚ずつ作らなければなりません。カードとデッキというメタファーに強く縛られすぎているからのように思います。SuperMemoはすべてをツリー構造で整理していて、これが大きな違いを生みます。実際には必ずしも整理する必要すらないのに、人々は学んだ資料が頭の中できれいなデッキに分類されるかのように振る舞います。
各穴埋めグループはそれぞれ独自の「カード」を持つことになります。
間隔反復の重要性を考えると、Ankiとは違ってモジュール式のアプローチが必要なのではないかと思います。
次の3つは分離されているのではないでしょうか。
データ構造が厳密にモジュール式というわけではありませんが、既存のAnkiデッキや拡張機能との互換性を保ちながら、現実的に可能な限りそこに近いものになっています。
実際、今では履歴と現在のアルゴリズム調整値だけから、すべての間隔と難易度を完全に再計算するボタンがあります。すでにFSRSを使っていて調整値が変わっていないなら、再計算は各復習後の増分計算と同じなので、何の効果もありません。
原理的には、ジャストインタイムで計算する純粋関数と見なせますし、既存互換性と性能のために生成データをキャッシュしている形だと考えればよいです。
関連する厚かましい自己宣伝ですが、YouTube動画からAnkiカードを作れる無料のオープンソースツールを作りました: https://youtube2anki.fly.dev/
フィードバックがほしいです。コードはGitHubにあります: https://github.com/vacmar01/youtube2anki
FSRSとAnkiについて、Xiaojunと何度も話したことがあります。Anki+FSRSのような従来型の間隔反復システムでは、学習者が知識を常に同じ文脈で復習することが多く、知識をより大きなネットワークの一部ではなく孤立した単位として理解してしまう可能性があります。
たとえば単語を単独で学ぶことは、実生活で言語を使うための十分な準備にはなりません。実際の場面では、文脈、連語、用法が大きな役割を果たします。
孤立した反復よりも良い言語学習の方法は、単語をさまざまな文脈や組み合わせの中で目にするようにし、単語が自然にチャンクや文として形作られる仕組みを理解できるようにすることです。
そこで言語学習では、Ankiカードの代わりに実生活の短い動画を見せるものを作っています。各動画は小さなシナリオで、実際の状況で言語がどう使われるかを示します。
学生は単語を暗記するだけでなく、視覚的な手がかりや身ぶりまで含む自然な文脈の中での使われ方を見ます。このアプローチは単語や表現の実際の応用を理解させ、学習をより没入感があり効果的なものにできます。外国語学習で失敗する主な理由は、継続できないことだからです。
Ankiに欠けているもう1つは、「覚えているか?」ではなく、実際の状況に基づくクイズです。学生は学んだことを、楽しく負担の少ない環境で応用する必要があります。
SRSアルゴリズムは解決策の一部にすぎず、万能ではありません。記憶には、感情が符号化に与える影響のような要素が多くあります。初めてのキスや卒業式の日を覚えるのにSRSは必要ありません。
人々はどんなSRSも使わずに母語を流暢に習得しますが、外国語ではSRSを使ってもほとんどの人が流暢にはなれません。
第一言語習得と第二言語習得は、リンゴとベーコンくらい違います。赤ちゃんと大人の脳は違いますし、必要性や能力、文脈も大きく異なります。