RAGの初心者向けガイド:大規模言語モデルがより正確で最新の回答を生成するのを助けるフレームワーク
大規模言語モデルの文脈において、生成 とは、ユーザーのクエリに応じてテキストを生成する大規模言語モデルの部分を指します。これはプロンプトと呼ばれ、ChatGPTの動作と同様です。質問をすると、それに対する回答を生成します。しかし、AI-MLのすべてと同様に、これらの回答を生成する際に100%正確というわけではありません。
このブログでは、大規模言語モデル(LLM)が直面する2つの課題と、RAGがこれらの問題をどのように解決できるかについて議論します。
大規模言語モデル:相互作用の課題
LLMとの相互作用において、2つの問題のある振る舞いが考えられます:
- 古い情報
- 特定のクエリに答える際のソースの欠如
大規模言語モデルは至る所にあります – 驚くほど正確に答えるものもあれば、非常に興味深い間違いを犯すものもあります!
宇宙の例を使って、なぜこれが問題なのか理解してみましょう。
木星と土星のどちらが衛星の数が多いかについては、常に激しい議論がありました。以前私に尋ねられたら、木星と答えたでしょう。なぜなら、太陽系最大の惑星に新しい衛星が発見されたという記事を読んだことがあったからです。しかし、土星はガス惑星の仲間に追い抜かれてからわずか数ヶ月で「太陽系で最も衛星の多い惑星」の座を取り戻しました。この逆転は、土星の62個の新しい衛星の発見によるもので、公式の総数は驚異の145個になりました。しかし、この発見を知る前に質問されたため、私の回答は 最新ではありませんでした 。つまり、問題の1つ目です。
天文学に特別な興味を持っていない人に同じ質問をすると、おそらく同じ答えが返ってくるでしょう。それは彼らの「最善の推測」であるか、あるいは木星が最大の惑星だから衛星の数も最も多いだろうという誤った仮定に基づいているからです。したがって、この回答は ソースがないか、判断の幻覚 に基づいています。つまり、問題の2つ目です。
検索拡張生成の紹介
同じ 「衛星の数は?」 という質問をChatGPTに尋ねてみましょう。

ご覧の通り、この情報は 最後の更新時点でのみ有効 だと言及しています. この質問に正確に答えるためにモデルを再訓練する必要がありますが、それは常に実現可能ではありません。さらに、LLMを「最新の状態に保つ」ことは非常に困難で経済的ではありません。
そこで検索拡張生成 (RAG)が登場します。これはLLMの幻覚と古い訓練データの両方の問題に対処するための戦略です。LLMをこのアーキテクチャと組み合わせることで、追加の訓練に時間とお金をかけることなく、その能力を向上させることができます。
大規模言語モデルの仕組みは、ユーザーが衛星についての質問(プロンプトとも呼ばれる)をすると、LLMは訓練時のパラメータから知っている「木星」と自信を持って答えるというものです。LLMはこの応答生成を行う際にかなり自信を持っていますが、おそらく間違っているでしょう。

しかし、この生成プロセスに検索拡張を追加すると、LLMが知っていることだけに頼るのではなく、コンテンツストアデータを追加します。このコンテンツストアデータは、文書のコレクション、内部または外部のデータベース、あるいはオープンなインターネットなど、何でも構いません。これにより、LLMは今やプロンプトとともに提供される指示セットを持ち、以下のように言います:
- まず、このコンテンツストアで関連する文脈的に適切な情報を探し、それをユーザーの質問と組み合わせてください。
- そして、その後にのみ、なぜその応答になったのかの証拠とともに回答を生成してください。
まとめ
これで、RAGが先ほど見た課題をどのように克服するのに役立つかが視覚化できたと思います。
- 古い情報: モデルを再訓練する代わりに、衛星の発見など新しい情報が利用可能になった場合、データストアに新しい情報を追加するだけで済みます。そうすることで、言語モデルは最新の情報を取得して、より更新された関連性の高い回答を提供できます。
- ソース: 大規模言語モデルは今や、応答を与える前に一次ソースデータに注意を払うよう指示されています。証拠を提供する能力により、幻覚を起こす可能性が低くなります。なぜなら、今や古くなった訓練データに頼ることが少なくなるよう求められているからです。
両面からこれらのモデルのパフォーマンスを向上させる方法について、まだ多くの研究が行われています。例えば、LLMに最高品質のデータを提供するためにリトリーバーを改善すること、そしてLLMがユーザーに最も豊かで最高の応答を与えられるように生成部分を改善することなどです。