昨日、llamaindexが公開したRerankに関する記事を読みました。
Rerankは非常に興味深いトピックなので、共有したいと思います。
1.Rerankとは
Rerankとは、RAGによって返された結果を再度並べ替えることで精度を高める手法です。
精度を高められる理由は、RAGがベクトル間の類似度を比較して検索結果を決定する際に、データベース内のデータ量が膨大であるため、各ベクトル間の類似度をすべて計算してから決めるとものすごい時間がかかります。そのため、基本的にはクイックソートで、ある程度の類似度(例えば99%,95%)を持つチャンクならすべて抽出し、そこからランダムにいくつ(パラメーターで指定された返す件数)を選ぶというやり方となっています。これにより処理速度は向上しますが、当然精度もその分落ちてしまいます。そこで、Rerankすると、得られた結果を再度並べ替えるので、RAGの精度を向上させることも可能です。
2.Rerankの評価指標
Rerankの精度を評価する指標にはHit-RateとMRR(Mean Reciprocal Rank)があります。
Hit-Rateは名前の通りに、検索文書の中で正解を見つけ出せる(上位X件から)割合です。
MRRは、検索結果における適合文書が上位から数えて何番目にあるかを示す指標です。
計算方法は最初に見つかった適合文書のランクの逆数をスコアとします:
1位なら1/1=1.0、2位なら1/2=0.5、複数個あれば最後平均値を計算してその結果をMRRスコアにします。(1+0.5)/2=0.75
Llamaindexの調査結果から見ると、基本的にはすべてのRAGに対して、Rerankをすればある程度精度上げられます。
HitRateは4%から最大で10%まで向上し、MRRはさらに最大で20%以上の向上が可能です。
3.Rerank実験
私も簡単なRAGを実装し、Rerankの効果を試しました。
まず最初に、RAGのテスト用データをChatGPTに作成してもらいました。
生成されたデータは、「スマホを初期状態に戻すために必要な処理」という質問と、それに対する数十個の回答です。
RAGで検索した結果、top5の回答が以下になりました。
確かに正解(3番目)は含まれていましたが、完全に間違っている内容も混じっていますね。(例えば、2番と5番は正解とあまり関係ないと思いますが)
最後、この五つの回答をRerankしました。(使用したRerankモデルは、現時点で精度が最も高いOSSモデルの”bge-reranker-large”です)
Rerankの結果は以下の通りです。数字が大きいほど質問との関連性が高いということです。大きい順に並ぶと31452です。
3が最も適切な回答であることは判断できましたね。あと、関連性が低い2と5のスコアもかなり低くくつけましたので、Rerankは確かに効果ありますね。
【参照先】
LlamaindexのRerank記事:
Rerankモデル(bge-reranker):