ファインチューニングは最後の手段。RAGの検索精度を上げる正しい順序とは

ファインチューニングは最後の手段。RAGの検索精度を上げる正しい順序とは AI

RAGシステムの検索精度が出ない。
そんなとき、すぐにEmbeddingモデルのファインチューニングに飛びつく人は少なくありません。

でも実際は、ファインチューニングの前に試すべきことが山ほどあります。
Redditのr/Ragコミュニティで、500万件の金融データセットに対してファインチューニングを行った経験者が投稿したチェックリストが話題になっていました。

コメント欄の議論も含めて非常に実践的だったので、その内容をベースに整理してみます。

まずチャンキングを見直す

検索精度が低い原因として、Embeddingモデルの性能を疑いたくなる気持ちはわかります。
しかし、投稿者が真っ先に挙げたのは「チャンキングの品質」でした。

やり方はシンプルです。
失敗しているクエリを20件ほど抜き出して、上位5件の取得チャンクを目視で読む。
正解となる情報がチャンクの中に含まれていなければ、そもそもどんなモデルを使っても正しい結果は返ってきません。

チャンキングが壊れた状態でファインチューニングをしても無駄になるだけ。
ここは地味な作業ですが、最初に確認すべきポイントです。

ハイブリッド検索を試したか

次に確認すべきは、BM25とベクトル検索を組み合わせたハイブリッド検索の導入です。

投稿者によると、セットアップには1日もかからないとのこと。
それだけでNDCGが10〜15ポイント改善したケースもあるそうです。

モデルに一切手を加えずにこの改善幅が出るのであれば、試さない理由はないでしょう。
ハイブリッド検索を導入していない段階では、Embeddingモデルが本当にボトルネックかどうかすら判断がつきません。

コメント欄では、ハイブリッド検索に加えてリランカー(Reranker)の導入も推奨されていました。
ある投稿者は「Embeddingモデルのファインチューニングよりも先に、リランカーのファインチューニングを検討すべきだ」と指摘しており、この順序は理にかなっています。

リランカーはクロスエンコーダーベースのため、クエリと文書の関係をより精密に評価できるからです。

別のEmbeddingモデルを試す

ファインチューニングに踏み切る前に、そもそも別のモデルへの切り替えで解決する可能性も検討すべきです。

投稿者は、自前の100件のゴールドセット(正解付きクエリセット)を用意し、2〜3種類のモデルを比較することを勧めていました。
MTEBのようなベンチマークスコアだけで判断するのではなく、自分のドメインデータで実際に測定することが大切です。

ここで注意したいのは、汎用ベンチマークのランキングがそのまま特定ドメインの性能を反映するとは限らない点。
金融、法律、医療、科学といった専門領域では、ベンチマーク上位のモデルが必ずしも最適とは限りません。

また、クローズドソースのAPIモデルを選ぶと、稼働率や価格変更に依存するリスクも生じます。
Apache 2.0やオープンウェイトで公開されているモデルであれば、自前でホスティングできるため、長期的なポータビリティの面で有利です。

HNSWのパラメータも確認する

コメント欄で別の投稿者が鋭い指摘をしていたのが、インデックスの設定に関する問題です。

期待する結果がランキング上は低いだけなら、モデルやリランカーの問題かもしれません。
しかし、期待する結果がそもそも検索結果に含まれていない場合は、HNSWグラフの設定ミスを疑うべきだという話です。

具体的には、ef_constructionやef_search、Mといったパラメータの調整で改善する場合があります。
モデルを責める前に、インフラ側の設定を見直す価値は十分にあるでしょう。

それでもファインチューニングが必要な場合

ここまでの手順をすべて試しても精度が足りない。
その場合に初めてファインチューニングを検討する段階に入ります。

ただし、いくつかの前提条件があります。

まず、ハードネガティブを含む500件以上のラベル付きペアが必要です。
500件未満ではほぼ確実に過学習が起きるとのこと。

さらに、ランダムに選んだネガティブサンプルでは学習シグナルが弱すぎて効果が出ません。
「惜しいけど不正解」なドキュメントをネガティブとして用意することが重要です。

そして、ファインチューニングが効果を発揮するのは、自分のドメインが汎用モデルの学習データに本当に含まれていないケースに限られます。
ゲノミクスや独自の専門用語、特殊な法律用語のような、一般的な学習コーパスにない語彙を扱う場合がこれに該当するでしょう。

一方で、カスタマーサポートやドキュメント検索のような用途であれば、モデルの問題ではなく検索アーキテクチャの問題であることがほとんどだと投稿者は述べています。

正しい順序で進める

まとめると、検索精度改善のアプローチは以下の順序で進めるのが効率的です。

チャンキングの修正
→ ハイブリッド検索の導入
→ リランカーの追加
→ Embeddingモデルの変更
→ HNSWパラメータの調整
→ そして最後にファインチューニング。

どの段階でも、自前の100件ゴールドセットに対するNDCG@10やRecall@5で効果を測定してください。
MTEBのスコアではなく、自分のプロダクションクエリで評価するのが鉄則です。

地味な作業から始めるのは面倒に感じるかもしれません。
しかし、基礎を飛ばしてファインチューニングに走ると、数週間を無駄にするリスクがあります。

まず足元を固めましょう。
それだけで、驚くほど精度が改善するケースは珍しくありません。

タイトルとURLをコピーしました