必要な所を取り出して渡す方法
RAG (検索拡張生成) とは、LLM に答えさせる前に、質問に関係する文書を探し出して一緒に読ませ、その中身に基づいて答えさせる方法である。名前は Lewis らの 2020 年の論文から広まった。モデルが学習の時に覚えた知識だけでは、社内の資料や学習の後に出た情報には答えられない。RAG は、必要な部分を答えの直前に渡すことでこれを補う。
よくある作り方では、資料をあらかじめ数百トークンほどの小さな断片に分け、意味の近さで探せる形にしておく。質問が来たら関係の深い断片を選び、質問と一緒にモデルに渡す。
丸ごと読ませる方法との使い分け
資料が少なければ、探さずに全部を読ませる方が簡単である。Anthropic は 2024 年 9 月の説明で、資料が 20 万トークン (約 500 ページ) より少なければ、全部をそのまま指示に入れればよいとしている。その場合、RAG のような方法は要らない。資料がそれより多い時や、資料が頻繁に増える時に RAG が向く。
ただし、長く読ませれば正しく読めるわけでもない。Liu らの研究 (2023 年に公開) では、必要な情報が長い入力の真ん中にある時に、答えの正確さが大きく下がった。長い資料を丸ごと渡す時も、この点には気を付ける。
答えの質を決める 2 つの部分
RAG の答えの質は、探し出す部分と、渡された文書を読んで答える部分の両方で決まる。探す部分で外すと、モデルは正しい答えを書けない。Anthropic は、断片に分けると文脈が失われる例を挙げている。「売上は前の四半期より 3 % 伸びた」という断片だけでは、どの会社のいつの話か分からない。そこで、断片ごとに前後の文脈の説明を足す工夫を示している。
用途から選ぶページの「文書を読ませて答えさせる」は、読んで答える部分の力を比べるもので、12 万トークンの物語の読解を問う課題の正答率で並べている。探す部分の出来は、仕組みを作る側の工夫で決まる。