📜

RerankでRAGの検索精度はどう変わる?軽量日本語モデルで試してみた

に公開

背景

私たちのチームでは、Retrieval Augmented Generation(RAG)を活用して、社内ナレッジをより効果的に活用する取り組みを進めています。ナレッジ情報をベクトル化し、ベクトル検索によって関連する情報を取得し、それをもとにLLMで回答を生成するという流れです。

しかし、ベクトル検索のみでは検索精度に課題があり、うまく回答が導き出せないケースも少なくありません。
現状、検索結果の上位5件のコンテキストを使って回答を生成しているのですが、検索クエリのばらつきや、そもそも関連情報が十分に取得できないことが原因で、回答の再現率が低くなってしまう傾向があります。
「じゃあ、もっとたくさん検索結果を取ればいいのでは?」等も考えましたが、検索結果の件数を増やすと処理コストが上がるだけでなく、ノイズの多いコンテキストが混ざり、逆に回答の精度が落ちてしまう可能性があります[1]

こうした課題を解決するために、RAGの検索結果をより賢く選び直す「Rerank(再ランキング)」の仕組みを導入できないか調査、検証を行いました。

Rerank(再ランキング)とは

Rerankは、RAG検索の「後段」を担う仕組みで。初期検索(Bi‑encoderやBM25、あるいはHybrid)で取得された候補文書(Top-N)に対して、Cross-EncoderやLLMを用いて関連性を再評価(スコアリング)し、最も有用なコンテキストを上位に並び替える処理です。

実際によく用いられるRerank活用法としては、初期検索で候補を多めに取得してRerankのステップでトップ5程度に絞り込むという二段構えのRAGパイプラインとして運用するケースが多いみたいです。このアプローチにより、検索の取りこぼしを防ぎつつ、LLMに渡すコンテキストを精選できるため、回答精度の向上が期待できます。


(引用:"Introducing Rerank 3.5: Precise AI Search", Cohere


事前準備

今回検証するにあたり、Rerankモデルとして日本語に特化した軽量モデルである hotchpotch/japanese-reranker-xsmall-v2を使用しました[2]
モデルの詳細については、hotchpotchさんのブログから確認できます[3]
https://secon.dev/entry/2025/05/08/100000-japanese-reranker-v2/

検証環境

項目 バージョン
OS Windows 11 Pro
プロセッサ Intel(R) Core(TM) Ultra 7 155U (1.70 GHz)
メモリ 16GB
ランタイム Python 3.12

検証環境としては、以下の条件で実施しました。

  • 実行環境:CPUのみ(GPUは使用していません)
  • 検証用データ:おすすめの飲食店に関する文書と、ノイズを含む50件のテキストデータ(生成AIで作りました。)
  • embeddingモデル:text-embedding-3-large
  • Rerankモデル:hotchpotch/japanese-reranker-xsmall-v2
検証用データ
[
  {
    "text": "金沢の『加賀料理まつや』は郷土料理が楽しめる落ち着いた雰囲気の飲食店です。"
  },
  {
    "text": "広島の『お好み焼き八昌』は本場のお好み焼きが味わえる飲食店です。"
  },
  {
    "text": "新しいセキュリティポリシーが施行されます。"
  },
  {
    "text": "福岡の『ラーメン一幸舎』は豚骨ラーメンの名店で、地元民にも愛されています。"
  },
  {
    "text": "社内図書室の利用時間が延長されました。"
  },
  {
    "text": "横浜の『中華街大飯店』は本格中華料理が楽しめるおすすめスポットです。"
  },
  {
    "text": "静岡の『お茶カフェ』は抹茶スイーツが人気で、観光客におすすめです。"
  },
  {
    "text": "大阪でおすすめの飲食店は『串カツだるま』。揚げたての串カツが絶品で、観光客にも人気です。"
  },
  {
    "text": "健康診断の予約受付が開始されました。"
  },
  {
    "text": "鹿児島の『黒豚しゃぶしゃぶ店』は黒豚料理が充実していておすすめです。"
  },
  {
    "text": "社内駐車場の利用ルールが変更されました。"
  },
  {
    "text": "新しいプロジェクト管理ツールの導入が決定しました。"
  },
  {
    "text": "社内クラブ活動の新メンバーを募集しています。"
  },
  {
    "text": "札幌の『海鮮市場』では新鮮な魚介類を楽しめる飲食店として評判です。"
  },
  {
    "text": "仙台の『牛たん炭焼き利久』は厚切り牛たんが名物で、観光客に人気です。"
  },
  {
    "text": "今月の営業成績報告を提出してください。"
  },
  {
    "text": "新宿の『焼肉トラジ』は高級焼肉が楽しめる人気店です。"
  },
  {
    "text": "東京・恵比寿の『ビストロカフェ』はランチが美味しく、雰囲気も良いのでおすすめです。"
  },
  {
    "text": "京都の『町家カフェ』は和スイーツが充実していて、観光の休憩にぴったりです。"
  },
  {
    "text": "社内ネットワークのメンテナンスは来週火曜日に実施予定です。"
  },
  {
    "text": "沖縄の『海ぶどう食堂』は沖縄料理が豊富で、地元食材を堪能できます。"
  },
  {
    "text": "神戸の『ステーキランド』はリーズナブルに神戸牛を楽しめるおすすめ店です。"
  },
  {
    "text": "社内スポーツ大会の参加者を募集しています。"
  },
  {
    "text": "新しい採用方針についての説明会が開催されます。"
  },
  {
    "text": "池袋の『ラーメン二郎』はボリューム満点のラーメンで有名です。"
  },
  {
    "text": "社内研修のスケジュールが更新されました。"
  },
  {
    "text": "吉祥寺の『パンケーキカフェ』はふわふわパンケーキが人気です。"
  },
  {
    "text": "函館の『海鮮丼横丁』は新鮮な海鮮丼が楽しめるおすすめ飲食店です。"
  },
  {
    "text": "長崎の『ちゃんぽん亭』は本場のちゃんぽんが味わえるおすすめ店です。"
  },
  {
    "text": "社内イベントの写真が共有フォルダにアップされました。"
  },
  {
    "text": "渋谷の『カフェ・ド・パリ』はスイーツとコーヒーが美味しいおしゃれなカフェです。"
  },
  {
    "text": "秋葉原の『メイドカフェ』はユニークな体験ができる飲食店です。"
  },
  {
    "text": "新しいメールシステムへの移行が完了しました。"
  },
  {
    "text": "オフィスのレイアウト変更についてのお知らせです。"
  },
  {
    "text": "盛岡の『冷麺専門店』は盛岡冷麺が名物で、地元民に人気です。"
  },
  {
    "text": "来月の全体会議はオンラインで実施されます。"
  },
  {
    "text": "新しい福利厚生プランの説明資料が配布されました。"
  },
  {
    "text": "社内清掃のスケジュールが変更されました。"
  },
  {
    "text": "新しい人事評価制度についての説明会が開催されます。"
  },
  {
    "text": "社内掲示板の利用ルールが更新されました。"
  },
  {
    "text": "防災訓練の実施日が決定しました。"
  },
  {
    "text": "社内SNSの利用ガイドラインが更新されました。"
  },
  {
    "text": "新しい勤怠管理システムの使い方ガイドが配布されました。"
  },
  {
    "text": "銀座の『寿司大』は新鮮な寿司が楽しめる高級店です。"
  },
  {
    "text": "名古屋の『ひつまぶし本店』はうなぎ料理が有名で、予約必須の人気店です。"
  },
  {
    "text": "社内アンケートへの回答をお願いします。"
  },
  {
    "text": "福利厚生制度の改定についてのお知らせです。"
  },
  {
    "text": "社内カフェテリアの営業時間が変更されました。"
  },
  {
    "text": "熊本の『馬刺し専門店』は新鮮な馬刺しが楽しめる飲食店です。"
  },
  {
    "text": "高松の『讃岐うどん本舗』は本場のうどんが味わえるおすすめスポットです。"
  }
]
    ```

検証手順

  1. クエリ「中国地方でおいしい飲食店」に対して、Embeddingモデルを用いてベクトル検索を実施
  2. コサイン類似度に基づき、上位10件の文書を抽出
  3. 抽出された文書群に対して、Rerankモデルで関連性を再評価し、順位を再構成

結果

ベクトル検索とRerankの比較表

Rank Cosine Similarity Vector Text CE Score Rerank Text
01 0.4978 横浜の『中華街大飯店』は本格中華料理が楽しめるおすすめスポットです。 0.2012 広島の『お好み焼き八昌』は本場のお好み焼きが味わえる飲食店です。
02 0.4631 長崎の『ちゃんぽん亭』は本場のちゃんぽんが味わえるおすすめ店です。 0.0602 横浜の『中華街大飯店』は本格中華料理が楽しめるおすすめスポットです。
03 0.4353 広島の『お好み焼き八昌』は本場のお好み焼きが味わえる飲食店です。 0.0348 長崎の『ちゃんぽん亭』は本場のちゃんぽんが味わえるおすすめ店です。
04 0.4332 函館の『海鮮丼横丁』は新鮮な海鮮丼が楽しめるおすすめ飲食店です。 0.0335 金沢の『加賀料理まつや』は郷土料理が楽しめる落ち着いた雰囲気の飲食店です。
05 0.4179 金沢の『加賀料理まつや』は郷土料理が楽しめる落ち着いた雰囲気の飲食店です。 0.0325 大阪でおすすめの飲食店は『串カツだるま』。揚げたての串カツが絶品で、観光客にも人気です。
06 0.4070 大阪でおすすめの飲食店は『串カツだるま』。揚げたての串カツが絶品で、観光客にも人気です。 0.0288 函館の『海鮮丼横丁』は新鮮な海鮮丼が楽しめるおすすめ飲食店です。
07 0.3827 札幌の『海鮮市場』では新鮮な魚介類を楽しめる飲食店として評判です。 0.0242 静岡の『お茶カフェ』は抹茶スイーツが人気で、観光客におすすめです。
08 0.3789 静岡の『お茶カフェ』は抹茶スイーツが人気で、観光客におすすめです。 0.0159 熊本の『馬刺し専門店』は新鮮な馬刺しが楽しめる飲食店です。
09 0.3755 沖縄の『海ぶどう食堂』は沖縄料理が豊富で、地元食材を堪能できます。 0.0090 沖縄の『海ぶどう食堂』は沖縄料理が豊富で、地元食材を堪能できます。
10 0.3697 熊本の『馬刺し専門店』は新鮮な馬刺しが楽しめる飲食店です。 0.0067 札幌の『海鮮市場』では新鮮な魚介類を楽しめる飲食店として評判です。

Rerankの実行速度

処理項目 所要時間
モデルのロード 約3.0秒
10件の処理時間 約0.034秒
1件あたりの処理時間 約0.0034秒

考察

検証用データ50件の中で中国地方に該当する飲食店は「広島のお好み焼き店」のみでしたが、Rerankモデルはその文書を正しく高スコアで評価し1位に再配置したことから、意味的な関連性をより正確に捉えていることが確認できました。一方、ベクトル検索では「横浜の中華料理店」が最も高いコサイン類似度を示しており、これは中国地方の「中国」というワードに引っ張られた可能性が考えられます。

まとめ

今回の検証では、Rerankが思っていた以上に効果的であることがわかりました。ベクトル検索だけではクエリの意図をうまく汲み取れず、「中国地方」の検索で「横浜の中華料理店」がトップに出てくるようなズレもありましたが、Rerankを通すことで、唯一正解だった「広島のお好み焼き店」がしっかり1位に再配置されました。また、処理時間は非常に短く、RAGパイプラインに組み込んでも実用上ほとんど影響はないレベルでした。意味的な関連性を精度高く捉えられる点で、RAGの品質向上に十分役立てそうです。


参考リンク

脚注
  1. "Long Context RAG Performance of Large Language Models", Quinn Leng et al. ↩︎

  2. hotchpotch/japanese-reranker-xsmall-v2 ↩︎

  3. とても小さく速く実用的な日本語リランカー japanese-reranker-tiny,xsmall,small,base の v2 を公開 ↩︎

セリオ株式会社 テックブログ

Discussion