ChatGPTでの対話型Anki学習

Ankiをデータベースとして使い、忘却曲線に基づいたフラッシュカード学習をChatGPTで対話的にできるようにしてみました。本記事では、その方法とアイディアについて紹介します。

Ankiとは Link to heading

Ankiは、忘却曲線に基づいたフラッシュカード型反復学習システムです。この方法は、人間の記憶メカニズムに合わせて最適なタイミングで復習を促すため、効率的な長期記憶の定着に役立ちます。

Anki学習時の課題とアイディア Link to heading

フラッシュカードを進めていくと、しばしば疑問点や関連事項が浮かび、その場で調べたくなることがあります。しかし、そのために学習の流れが中断されることがあります。また、何度繰り返してもなかなか覚えられない項目は、内容があまりにもピンときていないまま流してしまっているような気がして、追加で何か覚える手がかりが欲しくなります。

この課題を解決するため、ChatGPTのようなLLM(大規模言語モデル)を使って対話的に調べものをしたり、時には脱線しつつAnki学習を進められる環境があれば良いのではないかと考えました。そこで、RAG(Retrieval-Augmented Generation)という手法を用いて、ChatGPTとAnkiを連携させ、学習中に疑問を解決する対話が可能になるプログラムを作成することを目指しました。

Ankiterm - Anki CLIツール Link to heading

簡易的にでもAnkiの機能を自前で作るのは大変そうだったため、Ankiそのものをデータベースとして利用すれば、既存のデータを活用でき、最も効率的だと考えました。そこで、プログラムからAnkiを操作する方法を探してみました。

Anki Connectというプラグインを使うとHTTP APIでAnkiを操作できるようになるのですが、その機能を内部的に利用しているAnkitermというツールを見つけました。これはAnkiをコマンドラインでレビュー(フラッシュカード学習)することができるツールで、UIが私の求めるものに非常に近かったため、これをForkしてユーザーインタラクションの部分にChatGPTによる対話処理を挟み込むことにしました。

プログラムと実行 Link to heading

実装したものはこちらです。今回の対話型インターフェースを追加したほか、音声データの読み上げ機能も作成しました。以下のスクリーンショットは、プログラムの動作イメージを示しています。使い勝手の部分はまだ試作段階であり、完成度は低いものの、フラッシュカードの問題を出題し、それに対して文字を入力して回答すると本来の答えと照らし合わせた評価を返してくれます。自己評価のフィードバックを行った後に、自由形式でその問題に関するやりとりをすることができます。

終わりに Link to heading

私はこれまで主に英単語の学習にAnkiを活用してきましたが、LLMの登場によって学習の形も新しい、より効率的なものに進化しつつあるように思います。今回作成したものはまだ荒削りではありますが、その可能性の一端を探ることができたような気がしています。 LLMの学習への応用は非常に面白い分野であり、今後どんな新しい方法やツールが生まれてくるのか、とても楽しみです。