ユーザーと文書が同じ意味を表すのに異なる言葉を使っている場合、キーワード検索はうまく機能しません。「燃費の良い車」と検索しても、「燃料消費の少ない車」について書かれた記事は見逃されてしまいます。この問題を解決するために、エンベディングが考案されました。
中核となるアイデア
テキストの段落を数百から数千次元のベクトルに変換するモデルである。重要なのは、意味が近い2つの段落であれば、たとえ共通する単語が1つもない場合でも、その空間内で互いに近い位置にある2つのベクトルが生成されるという点である。
2つのベクトルの近さを表す一般的な指標であるコサインを比較すると、1の場合は同じ方向、0の場合は無関係である。
典型的なRAGシステムのプロセス
- 文書を適切な長さ(通常は数百語程度)のセグメントに分割し、各セグメントが一部重なり合うようにする
- 各セグメントの埋め込みベクトルを計算し、ベクトルデータベースに保存する
- 質問が入力されたら、その質問の埋め込みベクトルを計算し、最も近いセグメントを検索する
- それらのセグメントを質問と共に言語モデルに渡し、回答を生成させる
実際に故障しやすい箇所
不適切な箇所で区切られています。文の途中で区切ったり、表をその見出しから切り離したりすると、文脈が失われ、埋め込みが意味をなさなくなります。見出しなどの自然な区切りに沿って区切るようにしてください。
意味のみに基づく場合。エラーコード、固有名詞、製品コードについては、キーワード検索の方がより正確です。両方を組み合わせて再ランク付けを行うと、どちらか一方だけを使うよりもはるかに良い結果が得られます。
引用しすぎです。20個もの引用を文脈に詰め込むと、正しい情報がノイズに埋もれてしまい、回答の質が低下してしまうことがよくあります。
RAGの品質は、テキスト生成の段階よりも検索の段階に大きく左右される。間違った段落を見つけてしまえば、どんなに優れたモデルでも役に立たない。
Thảo luận