シリーズ・全7本
日本語RAGの検索品質
RAGで必要な文書を検索できないとき、見直す候補はモデルだけではありません。このシリーズでは日本語の評価データを使い、埋め込みモデル・チャンク分割・リランカー・ハイブリッド検索・クエリ拡張という工程を一つずつ切り分けて測っています。まず入口記事で取りこぼしと順位を診断し、見直す工程を決められます。比較結果と処理時間から、どの工程を改善するか判断するためのシリーズです。
困っていることから選ぶ
- 検索精度が上がらない原因を切り分けたい根拠の取りこぼしと正解順位を分けて調べ、見直す工程を決めます。RAGの検索精度を上げる方法—取りこぼしと順位から改善箇所を決める →
- 日本語の埋め込みモデルを選びたいruri・e5などの検索精度、処理速度、モデルの大きさを比べます。日本語RAGの埋め込みモデル9種比較—大きいほど検索精度が上がるとは限らない →
- 文書の区切り方と重なり幅を決めたい段落・文字数・オーバーラップを変え、根拠が分断される条件を確認します。RAGのチャンク分割は段落で切るか文字数で切るか—100文字・重なりなしでは正解が境界で消えた →
- 候補にはある正解文書を上位に出したいリランカーによる順位の変化と、追加の処理時間を比べます。日本語RAGリランカー5種を実測—取りこぼしの改善は確認できず、正解順位は上がった →
- キーワード検索を組み合わせるべきか知りたいBM25とベクトル検索の併用が効く条件と、順位への影響を確かめます。RAGのハイブリッド検索を実測比較—BM25・dense・RRFの選び方 →
- 質問文の書き換えが検索に効くか知りたいHyDE・マルチクエリの検索品質と、生成にかかる時間を比較します。日本語RAGのHyDE・マルチクエリを実測—正解順位はむしろ下がった →
連載順に読む
第1回RAGとは?検索・生成の仕組みと精度が落ちる4つの場所
RAGは外部文書を検索し、その内容をLLMへ渡して回答を作る仕組みです。文書の分割から検索、並べ替え、回答生成までの流れと、精度が落ちたときに確認する場所を整理します。
第2回RAGの検索精度を上げる方法—取りこぼしと順位から改善箇所を決める
RAGの検索精度が上がらないとき、原因が取りこぼし(候補に入っていない)か順位(下に沈んでいる)かを質問ごとに数えて見分けます。分割・検索・並べ替えのどこから改善するかを5本の日本語RAG実験から判断する手順と、手元で動く診断コードを掲載します。
第3回日本語RAGの埋め込みモデル9種比較—大きいほど検索精度が上がるとは限らない
ruri-v3・multilingual-e5・static-embedding-japaneseなど日本語の埋め込みモデル9種をApple M1で比較しました。検索3指標の測定値はruri-v3-130mが最も高く、310mへ大きくしても上がりませんでした。JSTS・JSQuADによる精度・速度・サイズの実測から、用途別の選び方と注意点を整理します。
第4回RAGのチャンク分割は段落で切るか文字数で切るか—100文字・重なりなしでは正解が境界で消えた
日本語RAGでチャンクの区切り方を8構成で比べたところ、元の段落境界を使う構成の順位品質が最も高く、100文字・オーバーラップなしでは500問中20問の正解が境界で分断されていました。段落構造を使えない文書での起点は200〜400文字・オーバーラップ20%。100〜800文字の実測と、手元で動く実装例を掲載します。
第5回日本語RAGリランカー5種を実測—取りこぼしの改善は確認できず、正解順位は上がった
日本語RAGのリランカー5種を500問で比較しました。Recall@5は改善を確認できませんでしたが、4種でnDCG@10・MRR@10が上昇。精度と追加レイテンシの実測、手元で動く実装例を掲載します。
第6回RAGのハイブリッド検索を実測比較—BM25・dense・RRFの選び方
BM25・dense・RRF融合を日本語500問で比較しました。単体同士の検索精度は区別できませんでしたが、RRF融合はnDCG@10・MRR@10を改善。個別クエリ、速度、手元で動く実装例まで掲載します。
第7回日本語RAGのHyDE・マルチクエリを実測—正解順位はむしろ下がった
日本語RAGへHyDEとマルチクエリを足し、JSQuAD 500問で比較しました。どちらもdense単体よりnDCG@10・MRR@10が低下し、生成には数秒から数十秒かかりました。悪化した実例と、手元で動くHyDE実装を掲載します。