18 ポイント 投稿者 GN⁺ 2025-05-19 | 1件のコメント | WhatsAppで共有
  • Spaced Repetition System は、過去に学習した資料の復習間隔を広げていく学習手法であり、少ない時間投資でも効果的な長期記憶の形成を可能にする
  • 機械学習ベース の予測によって個人ごとのカードスケジューリングを最適化する FSRS(Free Spaced Repetition Scheduler) アルゴリズム により、従来手法より効率とユーザー満足度が大きく向上した
  • Ankiの最新バージョンではFSRSがデフォルトスケジューラとして採用されており、ほとんどのユーザーがすでに活用している
  • WaniKani、Bunpro などのサービスと比べて、AnkiとFSRSの組み合わせ は学習効率と柔軟性で優れている

間隔反復システムの概要

  • さまざまな分野で、知識の習得と長期記憶の維持のために 間隔反復システム が活用されている
  • 学校の授業や趣味の学習のように限られた時間の中でも、効果的な復習を可能にするソリューションである
  • フラッシュカード形式で情報を繰り返し提示し、復習間隔をユーザーの反応に応じて調整する
  • 1日20分の投資で、1年に 3,650語 を無理なく覚えられる

従来のスケジューリング手法と限界

  • 初期の間隔反復システムでは SuperMemo-2 アルゴリズム が主に使われていた
  • この方式では「1日後、正解すれば6日後、再び正解すれば15日後、その後は37.5日後」という形で復習間隔が延びていく
  • 不正解の場合は再び1日後にリセットされるため、同じカードを短い間隔で何度も見ることになり、フラストレーション が大きい
  • この方式は経験的・恣意的に定められたルールに基づいており、個々の知識項目ごとに最適化されていない
  • すべての情報の 忘却曲線 が同一であると仮定する、非現実的な前提がある

FSRS: 改良された機械学習ベースのスケジューリング

  • FSRS(Free Spaced Repetition Scheduler) は最新の機械学習手法に基づき、復習間隔を個別に最適化する
  • 「いつカードの想起確率が90%まで下がるか」を予測問題に置き換え、正確な復習タイミングを算出する
  • FSRSモデルは、難易度(カードごとに1〜10)、安定性(想起率が100%→90%に下がるまでの期間)、回想可能性(日数経過後の想起確率)の3つの関数を曲線フィッティングで求める
  • 21個のパラメータを用いて大規模なレビュー・データに合わせて曲線を最適化し、個人ごとの復習履歴を反映してパラメータを再調整する
  • FSRSでは、ユーザーが望む 目標想起率(例: 90%)を設定でき、それに応じた日々の学習量やカード数をシミュレーションできる
    • たとえば、想起率を70%に設定すると、1日の復習量は減り、記憶しているカード数はむしろ増える

FSRSの実際の適用

  • Ankiは2023-11にリリースされた23.10バージョンから、デフォルトスケジューラとして FSRS を採用している
  • FSRSを活用すると、日々の復習負担が減り、間違えたカードを復習するときにもストレスが過度に増えない
  • 推奨設定 に従うことで、学習効率と学習量のバランスを最適化できる
  • オープンソースプロジェクトのため、複数の言語やソフトウェアで実装可能である

他の学習サービスとの比較

  • WaniKani、Bunpro などのサブスクリプション型サービスでは、決められた間隔 しか提供されず、個別最適化された調整がない
    • 例: 4時間、8時間、1日、2日、7日... などの恣意的な復習周期設定
  • カードを間違えたときに最小段階へ初期化しない、あるいは機械学習ベースの予測がないため、効率性で大きく劣る
  • 一定間隔が過ぎたカードは二度と表示されなくなり、長期的な知識の損失が発生する
  • その結果、学習者のストレスと非効率 が蓄積する

Ankiの利点

  • UIはやや使いにくいこともあるが、高性能な学習機能、継続的なアップデート、幅広いカスタマイズ性が強みである
  • 実際にさまざまな分野・段階の学習者に適した 柔軟性 を提供している
  • 初級から上級まで、長期的な知識構築に最適である
  • 実際のユーザー体験に基づき、効果的な学習ツール としての地位を確立している

さらに詳しく

  • 間隔反復の原理、FSRSの詳細な動作方式、および実装例については以下の資料を参照
    • open-spaced-repetition/awesome-fsrs: さまざまなプログラミング言語やソフトウェアにおけるFSRS実装一覧
    • open-spaced-repetition/srs-benchmark: FSRSと各種アルゴリズム(例: SuperMemo-2、Duolingoアルゴリズムなど)を比較したベンチマーク結果
      • 現時点でFSRSより一貫して優れた性能を示しているのは、OpenAI ReptileアルゴリズムベースのLSTMニューラルネットワーク程度である

1件のコメント

 
GN⁺ 2025-05-19
Hacker Newsの意見
  • Trane の創設者であることを明記しておきたいです(https://github.com/trane-project/trane/)。Trane は Anki に似たシステムの代替になり得ますが、下位スキル要素間の階層構造が明確な大半の領域(音楽、語彙学習など)に適用できます。Anki、SuperMemo など既存システムには、未解決の問題が3つあると考えています。第一に、暗記重視の方式が問題です。私は、記憶ではなく熟達度ベースの採点が必要な領域(音楽など)にも適用できるものを求めていました。第二に、階層構造の情報がないため、大規模なスキル習得が難しいことです。Anki では Trane の機能(下位スキル依存関係に基づく進度制限と熟達度確認)を再現しにくいです。第三に、自分で練習問題を作ることを要求する点です。これはかなり時間がかかり、複雑なスキルについては専門家が必要です。Trane は実質的に完成しており、私は音楽学習に使っています。UI がないので私しか使っていませんが、無償で働きたくないので仕方ないと思っています。今は Trane ベースのリテラシー・チューターを開発中です。完成すれば、学生はアルファベットから大学レベルの読解・作文までを最新研究に基づいて学べます。年内に MVP を出すのが目標です
  • SRS に関する多くの議論と進展を見てきました。しかし、私が見たい、そして本当に重要だと思うのは、読解・理解と SRS の間の領域です。Web ブラウザや PDF など既存のプログラムから、Anki や Mochi のような人気 SRS へフラッシュカードを簡単に生成できる独立ツールがほとんどありません。こうした機能は OS 統合のように自然で摩擦なく動くべきで、「もう1つの別アプリ」ではなく、SRS に簡単に渡せるパイプである必要があります。Mac フレンドリーで目障りでない、そういうシステムが必要です。もしそういうツールを知っていたら教えてほしいです
    • 「既存のプログラムから簡単にフラッシュカードを作る」という考え方は、しばしば誤解されています。SRS の価値の半分以上は、自分でフラッシュカード化する概念を選び、類似点・相違点・属性などを探る過程から生まれます。大変ではありますが、この過程そのものが理解に大きく役立ちます。しかしこの能力自体が難しいため、多くの人は SRS をうまく活用できず、効果を感じられないままやめてしまいます。もう1つの誤解は、SRS は単なる暗記用だという点です。実際には、うまく設計すれば複雑なテーマの理解にも十分使えます
    • 私は Fresh Cards というフラッシュカードアプリを作っていますが、ユーザーから Web ページや PDF からフラッシュカードを取り込む機能についてよく問い合わせを受けます。ただ、正直それがどう動くべきかまだ分かっていません。ユーザーが自分でハイライトして「カード化」をクリックする方式にすべきなのか、それとも自動でテキストを解析して質問・回答の一覧を提示する方式にすべきなのか悩んでいます。何を基準にカード化するのか、どこまで細かく分割するのかを決めるのが難しいです。特に日付や名前など単純な事実を抜き出すだけでは、コンテンツによってはあまり役に立ちません。結局のところ非常にオープンな問題なので、全員のニーズを満たすのは難しそうです
    • macOS のサービスモデルは、この目的によく合っていると思います。サービスとは、さまざまなアプリでコンテキストに応じて動作し、追加開発なしでアプリ間連携を支援する仕組みです。たとえばテキストを選択して右クリックし、サービスメニューから「New SRS Card」のような機能を呼び出せば、その場で簡単なカードを作れます。SRS アプリがこうしたサービスを内蔵してくれれば、とても素早く簡単にカードを作れるはずです
    • 私は LLM にシステムプロンプトを入れてこの問題を解決しています。ChatGPT で概念を理解したあと、フラッシュカード生成を依頼し、その結果を Mochi にコピー&ペーストしています。今後は LLM と Mochi の間で、カード追加の直接統合がさらに進化することを期待しています
    • 言語学習の文脈では、YouTube / Netflix の音声カードや字幕を抽出して「マイニング」する非常に優れたツールがあります。オープンソースで無料のものもありますが、最初は多少の摩擦があります。有料ソリューションのほうが少し親切です
  • LLM で学習するときのおすすめのコツは、トピックごとの会話内容を csv として Google Drive に保存し、Anki に同期する MCP ツールを作ることです。このやり方は、私の LLM 活用におけるゲームチェンジャーでした。LLM は長期的には考える量を減らしてしまう面もありますが、どうせ使うなら学習ツールとして活用するのを勧めます
    • 私は Anki デッキから翌日に復習予定のカードを選び、LLM に新しい文を生成させる Python スクリプトを作りました。単にカードをいつも暗記して正解するのではなく、新しい文脈でも単語認識力を高めるのが目的です。さまざまな文脈で学ぶことで、実際の言語習得に役立つことを期待しています
    • 具体的にどのように csv を Anki カードへ同期しているのか、また LLM の結果を csv にする MCP 実装がどんなものかについて、ブログ記事を読んでみたいです
    • ChatGPT 4o のボイスモードは、初級中国語学習において本当に革命的な体験です。家の中の物の名前を尋ねたり、単語同士の関連を聞いたり、短い文を作ってもらって文法を確認したりするのに大いに役立ちます。まだ MCP はありませんが、会話内容を構造化された形式で要約してもらうことはできます
  • 私が Anki で最も不満なのはデータモデルです。「ノートコレクション」(自分で作るもの、LLM で生成するもの、友人や学生と共有したいもの)を階層的に管理し、そこから最終的に学習するカードセットをテンプレート基準で派生させるべきだと思っています。復習履歴とモデル、特定の状況で復習するカードを制限する方法(中国語や日本語の書き取りには紙が必要なので、状況ごとにデッキを切り替えて使うなど)など、階層の分離が必要です。一方で Anki ではこれらがすべて1つのデータベースに混在しており、インポート/エクスポート/共有/外部データ操作も非常にやりにくいです。自分のデータを好きに操作できないたびにうんざりします。こうした問題のないシステムを知っている人はいますか?
    • 複数のノートコレクションや、セッションごとのカード制限は、Anki のデッキとタグ、Better Tags、サブデッキ機能などで十分に実現できます。すべてのデッキは別ファイルとして分離でき、spaced repetition モデルも FSRS など複数をサポートしています。エクスポートや共有もファイル単位(圧縮ファイル)で簡単ですし、外部操作向けのライブラリやツールも多く、オープンソースかつライブラリベースの構造なのでデータ抽出もしやすいです。既存システムへの不満は Anki で解決できる場合です
    • あなたが挙げた点はどれも事実と異なります。Anki には優れたオープンソースのドキュメントがあります。プログラミングできる人なら ChatGPT を使ってほぼ何でもできますし、私は sqlite データベースからデータマイニングもよく行っています
    • Anki のデータモデルには非効率な点が多いです。実際、テーブルの1行に JSON が入っているような、かなりその場しのぎな構成もあり、段階的に成長してきたため不格好な構造です。一方で、テンプレートと cloze deletion 機能(一部だけを隠して複数カードを自動生成する機能)は非常に優秀で、今ではその構造に感謝しています。私は cloze deletion とテンプレート導入のために Fresh Cards のスキーマを再設計中です。私のアプリでは各カード属性をテーブルに分割しています。Anki が初期に同期対応しづらかった理由には、こうしたスキーマも関係しています
    • 言語学習に限られますが、私の TheHardWay(https://thehardway.app)のような構造(フラッシュカードが/ Markdown ノートと統合されているもの)は良い選択かもしれません
    • たとえばレストラン関連の単語、空港関連の単語をそれぞれグループ化すれば、ユーザーは自然に連想できます
  • 私は大学時代、次のような方法で spaced repetition を活用していました。覚えるべきキーを Word 文書に縦に並べて PDF として保存します。PDF の各キーの横に注釈フィールド(値)を作ります。注釈をクリックして答えを確認し、簡単に答えられるたびに注釈を左へ移し、迷ったときは右へ戻していました。最終的には注釈表の位置で復習優先度を調整できました。欠点はたくさんありましたが、私には合っていましたし、Anki のようなアルゴリズムが普及する前の話なので、今だったら体験は違っていたかもしれません
    • 面白い方法ですが、説明だけではイメージしにくいです。例のファイルがあれば見てみたいです
  • FSRS の実験に興味があるなら、Open Spaced Repetition が公式の Python、Typescript、Rust パッケージを提供しています(各 GitHub リンクの案内あり)。ts-fsrs と rs-fsrs は FSRS 6 をサポートしており、py-fsrs もまもなく対応予定です。また、py-fsrs と fsrs-rs は過去の復習履歴に基づくモデル最適化まで提供しています
    • Chessbook のオープニング練習で Rust パッケージを使っています。とても使いやすく、ユーザーの負担を減らしつつ記憶率を高めてくれます。FSRS システムは本当に素晴らしいです
    • Ruby ユーザーなら、新規カードの間隔問題を修正した FSRS gem の fork を参照するとよいです(https://github.com/arvindang/rb-fsrs)。元の Python 版から移植したものです
  • spaced repetition は20年にわたって人気を保っていますが、万能薬ではありません。何十ものアプリ、何千回もの講演があっても、結局は多くの人がダイエットや自己啓発と同じように途中でやめてしまいます。「子どもの教育を本気で考えるなら、Google や Apple が毎週ノートカード作成を要求し、合格するとスマホのロックを解除してくれるような unlock システムを出すべきだ」と思ったことがあります。もちろん回避手段は必要でしょうし、実際に導入する人は少ないでしょうが、それくらい日常化される必要があると思います
    • spaced repetition は「時間の最適化」に焦点を当てていますが、自己管理やモチベーションには効きません。時間的負担が大きいなら効率的ですが、動機づけや自己統制が弱いと簡単に燃え尽きます。私の場合、Anki のおかげで GCSE と A レベルで成功したあと、ひどく燃え尽きて結局休学しました。結果として Anki は成功の原動力であると同時に、休息のきっかけにもなりました
    • 「万能薬ではない」という発言は、基準の定義がないので空疎です。ダイエットも万能薬ではありませんが、6年以上 SRS を使ってきた私にとっては人生を変えた体験です
    • SRS は、暗記と語学習得の違いを十分に理解していない人には刺さりにくいです。暗記を目的にする人には歓迎されますが、私の目標はスペイン語やフランス語の読解力そのものです。単語や例文の反復練習は、建設現場の足場のようなものです。構造物を直接作るわけではありませんが、全体の工程を大幅に加速します。暗記と語学習得が別物ではなく、補完関係にあることを、もっと上手く伝えられるとよいと思います
    • 万能解決策を期待するなら失望するだけです。結局は「労力」が必要です。あくまでツールにすぎません
    • SRS には参入障壁の高い UX の問題があります。1) カード作成に時間がかかる 2) 自己採点が必要 3) 単一のプロンプト-回答構造 4) 自主学習が必要(足場づくり、理解の段階づけ)。さらに根本的には、SRS は「正確な質問-回答」には優れていますが、一般化は弱いです。実際、知識グラフの構築はあまり得意ではありません。想起型知識(暗記)と論理モデル型知識の違いを見ると、暗記はほとんど「辞書検索」のように機能し、論理モデル(数学概念など)ははるかに複雑です。SRS 擁護者は、論理モデルも結局は「事実の集合」の暗記が基礎だと主張しますが、それでも SRS の実際的な価値は「よく整理されたノート」以上の実用性にあります。ただし、天才になるには全然足りません
  • 10年近く Anki を使ってきて、改善すべきなのは UI / デザインだけだと思っています。アルゴリズムの自動化以上に、実際のインターフェースが多くの新規ユーザーには退屈だという点のほうが大きいです。強力なパワーユーザー向け機能は良いのですが、直感性に欠けます。spacing effect は人間の学習において非常に過小評価されている核心だと思います
    • AnkiDroid のメンテナーです。現在、レビュアーのデザインを完全に作り直しており、プロダクションアプリの「開発者向けオプション」で確認できます。自分でもデザインに満足していませんが、リソースがかなり不足しています。Android 側に興味があれば連絡歓迎です
    • Anki は大好きですが、典型的な「エンジニアが設計した」製品です。非常に強力で奥深い一方、デザインは無骨で直感的ではありません。HN 読者のような技術オタクなら習得できますが、一般的な Duolingo ユーザーには厳しいです
    • エディタ画面がとても使いにくいです。ここは早急に改善すべきです。メイン画面のタブも本当のタブのようには動作しませんし、復習画面には「Again / Good」の2ボタンモードが標準で内蔵されるべきです。アドオンだけでも人気が出そうですし、実装も簡単です
    • 何年にもわたって Anki や SRS についての記事はたくさん読んできましたが、実際に使ったことはありません。何かおすすめの学習分野があるのか気になります
    • Duolingo と比べると、やはり退屈です。それでも何年も使っています。少しのゲーム要素(ストリーク、効果音など)をオプションで導入すると、もっと良くなりそうです
  • 「Why Anki Doesn’t Work for Me」という記事を6年前に書きました(アルゴリズム改善前の話です)。Anki にいくつも問題を感じていましたが、新しいアルゴリズムが私の中心的な不満を解消してくれたので、もう一度試してみるつもりです。残りの問題が今でも障壁なのか気になります
    • 私は A レベルの途中で FSRS 拡張に切り替えました。Google Colab notebook で自分の学習パターンに合わせたカスタムフィッティングも行いました。復習量が半分に減り、復習タイミングも分散されてずっと快適になりました。効果は同等かそれ以上でした。新しいやり方を強くおすすめします
    • 私も似た体験があります。Anki が短期記憶に偏りすぎていて、数日あるいは数週間たつとほとんど白紙から学び直す感じになっていました。当時はほぼすべての SRS コミュニティが Anki を神格化していましたが、私はやめました
    • WaniKani は最高の SRS UI を持っていますが、古いアルゴリズムのため本質的には同じ限界があります。「最後の復習後はそのカードを永久に見なくてよい」という構造には、常に知識喪失のリスクがあるように感じて不安です
  • spaced repetition の興味深い点は、「単純暗記」が、ある状況では現代教育が考えているよりもはるかに重要な役割を果たすという前提です。数学やプログラミングでは理解のほうが暗記より重要だと考えられがちですが、spaced repetition はそれに対する反論になり得ます
    • 教育制度が産業革命以前から現代へ移行する過程で、暗記中心の古典教育(ラテン語、ギリシャ語)から「理解中心」への転換が起きました。当時の変化は必要でしたが、行き過ぎていたのかもしれません。現在は暗記が必要以上に低く評価されています
    • 最近のプログラミングでは「必要になったら調べればいい」という考え方が主流です。しかし、どうしても暗記しておくべきものもあります(プログラミング言語、パターンなど)。実践は非構造的な SRS のようなもので、特定の領域(例: C++ でのドライバ開発)では SRS が大いに役立ちます
    • 繰り返し使う演算(掛け算など)は暗記として内在化しておかないと、より上位の概念学習に集中できません。この構造こそが学習効率の核心です
    • 暗記は理解の前提です。覚えていないものを理解することはできません
    • 想起型知識と論理モデル型知識の違いは非常に興味深いです。LLM は典型的に前者に近く、数学では限界が大きいです