A Day in the Life

日本語最高性能のRerankerをリリース / そもそも Reranker とは?

日本語に特化した形で学習されたRerankerがほとんど無かったので、日本語を適切に学習させた Reranker ファミリーを作りました。小さいモデルから大きなモデルまで揃っています。

評価性能は以下の通りで、現在(2024年4月頭)に公開されているRerank日本語タスクにおいては最高性能かな、と思っています。なぜなら日本語を学習させたRerankerがほぼ公開されていないから…。

モデル名 layers hidden_size JQaRA JaCWIR MIRACL JSQuAD
japanese-reranker-cross-encoder-xsmall-v1 6 384 0.6136 0.9376 0.7411 0.9602
japanese-reranker-cross-encoder-small-v1 12 384 0.6247 0.939 0.7776 0.9604
japanese-reranker-cross-encoder-base-v1 12 768 0.6711 0.9337 0.818 0.9708
japanese-reranker-cross-encoder-large-v1 24 1024 0.7099 0.9364 0.8406 0.9773
japanese-bge-reranker-v2-m3-v1 24 1024 0.6918 0.9372 0.8423 0.9624

なお、今回作ったRerankerの技術的な話は、日本語 Reranker 作成のテクニカルレポートに記載しているので、興味のある方はそちらをご覧ください。

そもそも Reranker とは?

Reranker とは、名前の通り再ランク付け(rerank)するもので、質問文に対して関連する順に文章を並べ替えます。文ベクトル(文章のembeddings)で類似度を測って並べ替えするものと何が違うのか?と思われるかもしれませんが、実際、文ベクトル類似度でも同じように並べ替えが可能です。

embeddings と reranker

しかしながら、大きく二つの点で異なります。

Reranker は再ランク性能が高い

文ベクトルは、質問文と文章を同じベクトル空間上の表現として類似度を測ります。そのため大規模なデータに対しても事前に文章のベクトルを算出しておくことで、効率的な計算が可能です。

しかしながら、Reranker は再ランクに特化しており、例えば今回作ったモデルは CrossEncoderというアーキテクチャを用いて質問文と文章を一つのペアにして評価することで、より細かなニュアンスや質問と文章の関連性からの文脈的理解を行えます。そのため質問に関連する文章がより上位になりやすく性能が高いです。

Reranker は事前計算ができず遅い

精度が高いなら、文ベクトルなど作らずに全部 Reranker で評価すればいいじゃない?と思われるかもしれませんが、Reranker は質問と文章両方を入力に使います。文ベクトルなら、対象となる文章のベクトルをオフラインで事前に計算することができるため、検索時には質問文のベクトルだけ計算すれば、それを元に検索が可能です。

しかしながら、Reranker (CrossEncoder)は文章のみを事前に計算しておくことができないため、例えば対象文章が100件のデータならオンラインでその場で実行時に100件分全て計算しても問題ない計算量ですが、件数が増えるにつれて現実的な速度では検索できなくなります。

Reranker の使い所

とすると、現実世界の検索では Reranker の使い所がないのでは、と思われるかもしれません。そこで、まず文ベクトルなどの効率よくオフライン計算ができる手法で質問に関連する文章上位100件を抽出し、その後Rerankerでその100件をより効率よく並べ替えすることで精度を上げる、といった用途で活用できます。

Retrieve & Re-Rank Pipeline

Retrieve & Re-Rank Pipeline より引用

GCP の記事、Your RAGs powered by Google Search technology, part 2 などでも、Deep re-ranking の項で同じ手法について書かれているように、再ランク付は重要です。

実際に Reranker で再ランクを行うと、どれぐらい情報検索スコアが変化するのか

以前書いた記事、 ベクトル検索のみで、AI王クイズ第一回コンペに臨む - Q&Aタスクでの複数の日本語embeddingsの評価では約550万の文章を各種文ベクトルモデルで文ベクトルに変換後、IVFPQアルゴリズムを使い、近似最近傍探索で検索評価を行っています。これらの各種文ベクトルモデルで正解率を出した結果は以下です。

ではこの近似最近傍探索での検索結果の上位100件を用いて、今回作ったモデルの中で、最小最速のRerankerモデルの xsmall で再ランク付けしてみましょう。

rerank - japanese-reranker-cross-encoder-small-v1

かなり結果が向上したのがわかると思います。550万の文章から現実的な速度で検索するために近似最近傍探索を行っており、通常の文ベクトルの総当たり類似度検索よりも精度が落ちていることもあって、Rerankerモデルで再ランクすることによって大幅なスコア向上となっています。

また、例えば OpenAI の text-embeddings は、日本語の情報検索タスクではあまりスコアが芳しくないことが多いのですが、それらも再ランクすることで大幅にスコアが上がっていますね。

では続いて、大きなlargeモデルのRerankerで再ランクしてみましょう。

rerank - japanese-reranker-cross-encoder-large-v1

こちらはさらに大幅にスコアが上がっていますね。計算機リソースに余裕があれば大きなモデルを使うのは良いのですが、モデルサイズによってどんどん再ランクにかかる速度が増えていきます。各々のモデルで、JaCWIR の評価にかかった実行速度(GPU RTX3090 で実行)は以下です。

モデル名 layers hidden_size 実行速度(秒)
japanese-reranker-cross-encoder-xsmall-v1 6 384 196
japanese-reranker-cross-encoder-small-v1 12 384 265
japanese-reranker-cross-encoder-base-v1 12 768 481
japanese-reranker-cross-encoder-large-v1 24 1024 1253
japanese-bge-reranker-v2-m3-v1 24 1024 1173

xsmallとlargeでは、6倍ほど速度に差が出ています。このように、性能と速度とのトレードオフが発生するので、どれぐらいの性能と速度が必要かを考えて Reranker を選ぶ必要があります。実行時に処理するRerankerは処理速度が重要なケースも多いでしょう。

なお他の様々なモデルとの評価結果については、日本語 Reranker 作成のテクニカルレポートをご覧ください。また本記事でのAI王クイズコンペの再ランク評価は、評価にtestデータを用いているため直接学習はしていないものの、AI王クイズコンペのdev, unused を用いたデータセットJQaRAのデータも今回作成したモデルは学習しているため、スコアが上がりやすい傾向であることに留意ください。

意外と大事な Reranker

今回日本語の Reranker を作ったきっかけは、数百万〜の文章に対して情報検索をしていると、文ベクトル+近似最近傍探索のみの検索よりも、Reranker を組み合わせた方がだいぶ良い検索結果になったためです。この時に使った Reranker はマルチリンガルモデルの cross-encoder-mmarco-mMiniLMv2-L12-H384-v1 だったのですが、マルチリンガルでだいぶ精度が上がるなら、日本語をちゃんと学習させればさらに精度が上がるのでは?と思い立ったのがきっかけです。

またRerankerは、良くも悪くもオンライン計算が必要になります。悪い点は計算コストが高い点ですが、精度以外の良い点としては事前計算を再計算しなくて良いことも挙げられるでしょう。例えば文ベクトルモデルでより良いモデルを適用したくなっても、データベースにすでに文ベクトルデータが事前計算され格納されているため、本番環境で利用されている文ベクトルの変更は慎重に行う必要がありますし、数億データ〜ともなってくると全て再計算するのにも計算機コストがかかります。しかしながらRerankerは、ソートアルゴリズムの変更のようなもので、事前計算データの変更もなく適用が可能なので、差し替えがしやすいです。

さらに、Reranker は解きたい課題のドメインのデータで学習させると、性能・スコアがかなり上がることも観測しており、そのために文ベクトル変換は汎用モデルを、Rerankerはドメイン特化モデルを、といった使い分けもできるでしょう。

というわけで、日本語を学習させたRerankerの作成と、Reranker はどのようなものか?についてご紹介しました。世の中はLLMの学習と利活用にフォーカスしている感がありますが、個人的にはLLMの利活用が進むにつれ、検索を人間ではなくAIに最適化する時代が訪れ情報検索の分野の重要性がさらに増すのでは、と思っています。

情報検索をよりよく行う手段の一つとして、Reranker は欠かせないものになってくるでしょうし、本記事でRerankerや情報検索も面白そうだぞ、と興味を持たれる方が少しでも増えたら幸いです。


なおこの文章は、私が書いた草稿をもとに、Claude 3 Opusによって生成した文章を微調整したものです。

記事の一覧 >

関連するかもエントリー

日本語 Reranker 作成のテクニカルレポート
本記事は、日本語の reranker (CrossEncoder) モデルを作成における技術レポートである。reranker とは何か、といった内容は別記事 日本語最高性能のRerankerをリリース / そもそも Reranker とは? を参照のこと。なお今回作ったモデル一覧...
本記事は、日本語の reranker (CrossEncoder) モデルを作成における技術レポートである。reranker とは何か、とい...
ベクトル検索のみで、AI王クイズ第一回コンペに臨む - Q&Aタスクでの複数の日本語embeddingsの評価
この記事は、Kaggle Advent Calendar 2023の21日の記事である。長いトークンを扱えるLLMの登場などの背景もあり、LLM出力の精度を上げる手法として Retrieval-Augmented Generation(RAG)の重要性の高まりを感じる。例えば K...
この記事は、Kaggle Advent Calendar 2023の21日の記事である。長いトークンを扱えるLLMの登場などの背景もあり、L...
日本語 RAG タスクで e5-large 並みの性能の ColBERT
先日公開された、ColBERT の日本語pretrainモデル、JaColBERTの性能が良いらしい。早速、普段評価に利用している、AIクイズ王のQ&A RAGタスクで評価してみた。評価https://docs.google.com/spreadsheets/d/1eSYzxzI...
先日公開された、ColBERT の日本語pretrainモデル、JaColBERTの性能が良いらしい。早速、普段評価に利用している、AIクイ...