CoolFace
Modelpublic

hotchpotch/japanese-reranker-base-v2

sourceHugging Facemitupdated 5mo agoView on Hugging Face
8likes5.4kdownloads
Model Card

hotchpotch/japanese-reranker-base-v2

日本語リランカーモデルシリーズ(v2)です。

リランカーについてや、技術レポート・評価等は以下を参考ください。

Reranker Benchmark

使い方

動作には transformers ライブラリの v4.48 以上が必要です。

pip install -U "transformers>=4.48.0" sentence-transformers sentencepiece

GPU が Flash Attention 2 をサポートしている場合、flash-attn ライブラリを入れることで、高速な推論が可能です。

pip install flash-attn --no-build-isolation

SentenceTransformers

python
from sentence_transformers import CrossEncoder
import torch

MODEL_NAME = "hotchpotch/japanese-reranker-base-v2"

model = CrossEncoder(MODEL_NAME)
if model.device == "cuda" or model.device == "mps":
    model.model.half()
query = "感動的な映画について"
passages = [
    "深いテーマを持ちながらも、観る人の心を揺さぶる名作。登場人物の心情描写が秀逸で、ラストは涙なしでは見られない。",
    "重要なメッセージ性は評価できるが、暗い話が続くので気分が落ち込んでしまった。もう少し明るい要素があればよかった。",
    "どうにもリアリティに欠ける展開が気になった。もっと深みのある人間ドラマが見たかった。",
    "アクションシーンが楽しすぎる。見ていて飽きない。ストーリーはシンプルだが、それが逆に良い。",
]
scores = model.predict(
    [(query, passage) for passage in passages],
    show_progress_bar=True,
)
print("Scores:", scores)

HuggingFace transformers

python
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from torch.nn import Sigmoid


def detect_device():
    if torch.cuda.is_available():
        return "cuda"
    elif hasattr(torch, "mps") and torch.mps.is_available():
        return "mps"
    return "cpu"


device = detect_device()
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME)
model.to(device)
model.eval()

if device == "cuda":
    model.half()

query = "感動的な映画について"
passages = [
    "深いテーマを持ちながらも、観る人の心を揺さぶる名作。登場人物の心情描写が秀逸で、ラストは涙なしでは見られない。",
    "重要なメッセージ性は評価できるが、暗い話が続くので気分が落ち込んでしまった。もう少し明るい要素があればよかった。",
    "どうにもリアリティに欠ける展開が気になった。もっと深みのある人間ドラマが見たかった。",
    "アクションシーンが楽しすぎる。見ていて飽きない。ストーリーはシンプルだが、それが逆に良い。",
]
inputs = tokenizer(
    [(query, passage) for passage in passages],
    padding=True,
    truncation=True,
    max_length=512,
    return_tensors="pt",
)
inputs = {k: v.to(device) for k, v in inputs.items()}
logits = model(**inputs).logits
activation = Sigmoid()
scores = activation(logits).squeeze().tolist()

print("Scores:", scores)

小型リランカーの特徴

japanese-reranker-tiny-v2、japanese-reranker-xsmall-v2、japanese-reranker-small-v2、japanese-reranker-base-v2は、以下の特徴を持つ小型リランカーモデルです:

  1. 1.CPUやAppleシリコン環境でも実用的な速度で動作
  2. 2.高価なGPUリソースなしでもRAGシステムの精度向上が可能
  3. 3.エッジデバイスでの展開や低レイテンシが要求される本番環境で活用可能
  4. 4.ModernBertベースのruri-v3-pt-30m(tiny/xsmall)、ruri-v3-pt-70m(small)、ruri-v3-pt-130m(base)を利用

評価結果

モデル名avgJQaRAJaCWIRMIRACLJSQuAD
japanese-reranker-tiny-v20.81380.64550.92870.72010.9608
japanese-reranker-xsmall-v20.86990.74030.94090.82060.9776
japanese-reranker-small-v20.88560.76330.95860.83850.9821
japanese-reranker-base-v20.89300.78450.96030.84250.9845
japanese-reranker-cross-encoder-xsmall-v10.81310.61360.93760.74110.9602
japanese-reranker-cross-encoder-small-v10.82540.62470.93900.77760.9604
japanese-reranker-cross-encoder-base-v10.84840.67110.93370.81800.9708
japanese-reranker-cross-encoder-large-v10.86610.70990.93640.84060.9773
japanese-bge-reranker-v2-m3-v10.85840.69180.93720.84230.9624
bge-reranker-v2-m30.85120.67300.93430.83740.9599
ruri-v3-reranker-310m0.91710.86880.95060.86700.9820

推論速度

以下は約15万ペアをリランキングした際の推論速度結果(トークナイズ時間を除く純粋なモデル推論時間)です。MPS(Appleシリコン)とCPU測定にはM4 Max、GPUにはRTX5090を使用しています。GPU処理では flash-attention2 を使用しています。

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

ライセンス

MIT License

学習データセット

主な学習データセットは hotchpotch/japanese-reranker-v2-hard-negatives です。