A Day in the Life

とても小さく速く実用的な日本語リランカー japanese-reranker-tiny と xsmall v2 を公開

とても小さな日本語のリランカーモデル japanese-reranker-tiny-v2japanese-reranker-xsmall-v2 を公開しました。情報検索システムにおいて、リランカーは検索結果の精度を高める役割を担いますが、モデルサイズと計算コストが実用における課題でした。

本モデルは最小限のレイヤー数とパラメータ数で作成されており、CPUやAppleシリコン環境でも実用的な速度で動作します。これにより、高価なGPUリソースなしでもRAGシステムの精度向上が可能になり、エッジデバイスでの展開や低レイテンシが要求される本番環境で活用できるでしょう。性能評価では、大型モデルと比較しても競争力のあるスコアを出しています。

Reranker Benchmark

リランカーとは何か、そして小さなリランカーの重要性

リランカーとは、検索システムにおいて、質問(クエリ)と文書の関連性を評価し、最も関連性の高い順に並べ替える(ランキング)するモデルです。従来の文ベクトル(埋め込み)検索だけでは捉えきれない複雑な関連性を評価できる点が強みです。特にCrossEncoderと呼ばれるアーキテクチャを用いることで、質問と文書を一つのペアとして入力し、より細かなニュアンスや文脈的理解を実現します。

小さなリランカーモデルが重要な理由はいくつかあります。まず、リランカーは質問と候補文書のすべての組み合わせを評価する必要があるため、計算量が非常に多くなります。例えば100件の候補文書をリランクする場合、100回のモデル推論が必要です。そのため、モデルが小さいほど処理速度が向上し、レイテンシが低減します。

また、小型モデルは限られたリソース環境での実行も可能です。CPUのみの環境やエッジデバイス、モバイルデバイスでも現実的な速度で動作でき、RAG(検索拡張生成)システムの実用性を大きく高めます。同時に、クラウド等のサーバ環境ではGPUメモリ使用量の削減により、GPUリソースの共有が可能となりコスト効率が大幅に向上します。

このように、小型リランカーは速度、コスト、リソース効率の面で大きなメリットをもたらし、実用的なRAGシステム構築において大切な役割を果たすでしょう。

ベンチマーク性能

ベンチマーク結果は以下です。小さなな tiny, xsmall v2 の性能はモデルサイズを考えるとかなり高く、大きいモデルとしては ruri-v3-reranker-310m が圧倒的ですね。これらの高性能なモデルは、ベースがどれも高性能な ModernBert になったことも、性能向上に寄与しているでしょう。

なお、日本語モデルはどれもJQaRA(クイズ形式)の傾向を学んでおり、bge-reranker-v2-m3 は不利になります。これはリランカーが適切にドメイン課題を学習すれば、だいぶスコアが上がることの例でもあります。

モデル名 avg JQaRA JaCWIR MIRACL JSQuAD
japanese-reranker-tiny-v2 0.8138 0.6455 0.9287 0.7201 0.9608
japanese-reranker-xsmall-v2 0.8699 0.7403 0.9409 0.8206 0.9776
japanese-reranker-cross-encoder-xsmall-v1 0.8131 0.6136 0.9376 0.7411 0.9602
japanese-reranker-cross-encoder-small-v1 0.8254 0.6247 0.9390 0.7776 0.9604
japanese-reranker-cross-encoder-base-v1 0.8484 0.6711 0.9337 0.8180 0.9708
japanese-reranker-cross-encoder-large-v1 0.8661 0.7099 0.9364 0.8406 0.9773
japanese-bge-reranker-v2-m3-v1 0.8584 0.6918 0.9372 0.8423 0.9624
bge-reranker-v2-m3 0.8512 0.6730 0.9343 0.8374 0.9599
ruri-v3-reranker-310m 0.9171 0.8688 0.9506 0.8670 0.9820

推論速度

こちらは、HuggingFace transformers ライブラリを使った、約15万ペアをリランキングした推論速度結果(トークナイズ時間は除いていて、純粋なモデルでの推論時間)です。MPS(Appleシリコン),CPUの計測にはM4 Maxを、GPUにはRTX5090を用い、かつ ModernBert 系列モデルでは GPU 処理時に flash-attention2 を使っています。

japanese-reranker-tiny-v2, xsmall-v2 は速度面で圧倒的ですね。ruri-v3-reranker-310m もモデルサイズを考えるとかなり速く、これらは flash-attention2 が効いているからでしょう。なお、text-embeddings-inference等を使うことで、他のモデルも flash-attention2 を使うことができ、その場合はこの評価以上の速度が出ると思います。

モデル名 レイヤー数 隠れ層サイズ 速度(GPU) 速度(MPS) 速度(CPU)
japanese-reranker-tiny-v2 3 256 2.1s 82s 702s
japanese-reranker-xsmall-v2 10 256 6.5s 303s 2300s
japanese-reranker-cross-encoder-xsmall-v1 6 384 20.5s
japanese-reranker-cross-encoder-small-v1 12 384 40.3s
japanese-reranker-cross-encoder-base-v1 12 768 96.8s
japanese-reranker-cross-encoder-large-v1 24 1024 312.2s
japanese-bge-reranker-v2-m3-v1 24 1024 310.6s
bge-reranker-v2-m3 24 1024 310.7s
ruri-v3-reranker-310m 25 768 81.4s

なお、推論速度のベンチマークに用いたスクリプトはこちらです。

また CPU用に onnx に変換したモデルも公開しているため、例えばラズパイ環境などで、onnx + arm向け量子化モデルを使うことで、実際にエッジ環境でも動くでしょう。

xsmall, tiny モデル作成の簡易テクニカルレポート

japanese-reranker-xsmall-v2, japanese-reranker-xsmall-tiny-v2 の学習データ元として、hotchpotch/japanese-splade-v2 学習で用いたデータセット + ハードネガティブ + 若干の独自データを用いて学習させています。v1と比べて大幅に性能が上がったのは、ModernBert ベースで事前対象学習を行った ruri-v3-pt-30mを用いてることと、v1よりも数倍のデータセットを用いたこと、またハードネガティブでの良質なデータの抽出(各種rerankerのスコアを用い、正しい・正しくないでフィルタリング)を行ったことも大きいでしょう。

また、Tiny モデルのモデルパラメータ抽出元として、sbintuitions/modernbert-ja-30mcl-nagoya/ruri-v3-pt-30mを利用・評価しました。ModernBert アーキテクチャは、グローバルアテンションとローカルアテンションのレイヤーを交互に含みます。例えば modernbert-ja-30m モデルは10層のレイヤーで、[0,3,6,9]層がグローバルアテンションで、それ以外がローカルアテンションとなっています。

最初は全てグローバルアテンションの方が良いだろうと思ったのですが、3,6,9層を含むと基本悪くなり、また出力層に近い層を含むと、こちらも結果が悪くなりました。以下のグラフは同じデータセットで学習したrerankerのrerank評価結果です。出力層に近い6,9などを含むとだいぶ悪くなり学習早期で止めたので、以下の結果には含めてません。また、layer 0 のみは流石に全く性能が出ませんでした。

name JQaRA miracl jsquad JaCWIR
modernbert-ja-30m + full layers 0.7261 0.8095 0.9752 0.9420
modernbert-ja-30m + layer 0,2,4 0.6455 0.7185 0.9588 0.9265
modernbert-ja-30m + layer 0,2 0.6171 0.6784 0.9516 0.9155
modernbert-ja-30m + layer 0 0.2515 0.4416 0.3172 0.0738
ruri-v3-pt-30m + full layers (= xsmall-v2) 0.7403 0.8206 0.9776 0.9409
ruri-v3-pt-30m + layer 0,2,4 (= tiny-v2) 0.6455 0.7201 0.9608 0.9287
ruri-v3-pt-30m + layer 0,1,3 0.6405 0.7124 0.9552 0.9211
ruri-v3-pt-30m + layer 0,3 0.6177 0.6619 0.9482 0.9076

この中から、最も良質な結果になった ruri-v3-pt-30m を xsmall として、tiny モデルとしては ruri-v3-pt-30m + layer 0,2,4 を公開しました。なお、モデルマージすると性能は少々上がりますが、今回は行っていません。

おわりに

本エントリーでは、非常に小型軽量で実用的な日本語リランカーモデルjapanese-reranker-tiny-v2 およびjapanese-reranker-xsmall-v2 についての紹介をしました。これらのモデルは、CPUやAppleシリコンといった環境でも実用的な速度で動作し、高価なGPUリソースを必要とせずにとも、とりわけローカルなRAGシステムなどの検索精度の向上に寄与します。またGPU上で動かすことで、高速なレスポンスも実現可能です。

近年の高性能な ModernBert 等の Encoder モデルの登場により、より高性能な実用的な性能を持つモデルの開発を後押ししています。本記事が、日本語処理技術のさらなる発展に貢献できれば幸いです。

記事の一覧 >

関連するかもエントリー

日本語 Reranker 作成のテクニカルレポート
本記事は、日本語の reranker (CrossEncoder) モデルを作成における技術レポートである。reranker とは何か、といった内容は別記事 日本語最高性能のRerankerをリリース / そもそも Reranker とは? を参照のこと。なお今回作ったモデル一覧...
本記事は、日本語の reranker (CrossEncoder) モデルを作成における技術レポートである。reranker とは何か、とい...
日本語最高性能のRerankerをリリース / そもそも Reranker とは?
💡 新しいバージョンはこちら👉 とても小さく速く実用的な日本語リランカー japanese-reranker-tiny と xsmall v2 を公開日本語に特化した形で学習されたRerankerがほとんど無かったので、日本語を適切に学習させた Reranker ファミリーを...
💡 新しいバージョンはこちら👉 とても小さく速く実用的な日本語リランカー japanese-reranker-tiny と xsmall...
SPLADE モデルの作り方・日本語SPLADEテクニカルレポート
近年、大規模言語モデル(LLM)の台頭により、情報検索の重要性が増している。特に、Retrieval-Augmented Generation(RAG)などの応用分野では、効率的で高精度な検索システムが求められている。ニューラルネットワークを用いた検索モデルの分野では、密ベクトル...
近年、大規模言語モデル(LLM)の台頭により、情報検索の重要性が増している。特に、Retrieval-Augmented Generatio...