Zenn
💫

【RAG】What is Reranking Model?

に公開

RAGの概要

RAG (Retrieval Augmented Generations) は、RetrieverとGeneratorの二つの段階に分けられる。

  1. Retriever: 与えられたクエリに関連した文書をデータベースから取ってくる
  2. Generator: 取得された文書をもとにクエリに対しての回答文を生成する

Retrieverの知識がなければ、うまく回答を生成することができない。
今回はこのRetrieverに着目する。

埋め込みモデルとリランキングモデル

Retrieverは、主にEmbedding Model(埋め込みモデル)とReranking Model(リランキングモデル)の二つがある。

Embedding Model

  • クエリを入力としてそのベクトルを出力する部分と、文書を入力としてそのベクトルを出力する部分で分かれる
  • 最終的に、この二つのベクトルの類似度を計算し、クエリと文書がどのくらい関連しているかを決定する
  • RAGでは、Embedding Modelとしてこの流れ(Bi-Encoderと呼ぶ)を用いる

Reranking Model

  • クエリと文書を別々に入力するのではなく、結合した上で直接、類似度を出力する
  • RAGでは、Reranking Modelとしてこの流れ(Cross-Encoderと呼ぶ)を用いる
  • クエリと文書の関係を、ベクトル情報だけでなく、Transformerに含まれるAttentionなどの全層から獲得するため、Bi-Encoderよりも一般的に高精度なことが多い

RAG においては、Embedding ModelとReranking Modelを併用することが多い。
これにより、検索速度検索精度のバランスが取れたRetrieverを実現できる。

なぜ高精度のReranking Modelのみにしないのか?

理由はシンプルに時間がかかりすぎるからだ。以下の三つの場合を見てみよう。

Embedding Modelのみの場合

文書をあらかじめベクトル化しておく。
そうすることで、あとはクエリをベクトル化し、クエリと文書のベクトルの類似度を比較するだけ。時間のかかるベクトル化の処理は、一回のみで済む。

  • メリット:高速に全ての文書を取得可能
  • デメリット:Reranking Modelと比較し、精度が低い

Reranking Modelのみの場合

クエリ+文書で入力するため、毎回ベクトル化する必要がある。
つまり、文書が100個なら100回、100万個なら100万回ベクトル化する必要がある。データベースが大きいほど、時間がかかってしょうがない。

  • メリット:精度が高い
  • デメリット:文書が多いほど、処理時間が膨大になる

Embedding Model + Reranking Modelの場合

Embedding ModelでTop N 個に厳選した上で、精度の高いReranking Modelに投げる方法。
これなら、時間がかかりすぎる問題を解消でき、精度の高いReranking Modelに最終的に任せることができる。

まとめ

  • RAGには、Retriever (検索) とGenerator (生成) の二つの段階がある
  • Retrieverにおいて、高速なEmbedding Modelと高精度なReranking Modelをうまく組み合わせることで、高速かつ高精度な検索が実現できる

参考

https://developer.nvidia.com/ja-jp/blog/rag-with-sota-reranking-model-in-japanese/

Discussion

ログインするとコメントできます