Qwen3 Embedding 文章ベクトルの日本語性能を JMTEB で測る
オープンウェイトな高性能マルチリンガル embedding, reranker モデル、Qwen3 Embedding シリーズがリリースされましたね。モデルサイズも 8B, 4B, 0.6B とあり文章ベクトルの作成・リランキングで高性能で、Multilingual MTEB leaderboardではトップの性能となっています。
ただ、マルチリンガルモデルはあまり日本語が重視されない傾向にあるので、JMTEB: Japanese Massive Text Embedding Benchmarkで Qwen3-Embedding-0.6B の性能を計測してみました。なお、jsick, jsts がエラーになったため、STSタスクは除いてあります。
JMTEB 計測結果
Model | Retrieval | STS | Classification | Reranking | Clustering | PairClassification |
---|---|---|---|---|---|---|
Qwen3-Embedding-0.6B | 72.81 | -- | 66.09 | 93.10 | 48.84 | 62.42 |
ruri-v3-310m | 81.89 | 81.22 | 78.66 | 93.43 | 55.69 | 62.60 |
ruri-v3-130m | 81.89 | 79.25 | 77.16 | 93.31 | 55.36 | 62.26 |
ruri-v3-70m | 79.96 | 79.82 | 76.97 | 93.27 | 52.70 | 61.75 |
PLaMo-Embedding-1B | 79.94 | 83.14 | 77.20 | 93.57 | 53.47 | 62.37 |
ruri-v3-30m | 78.08 | 82.48 | 74.80 | 93.00 | 52.12 | 62.40 |
sbintuitions/sarashina-embedding-v1-1b | 77.61 | 82.71 | 78.37 | 93.74 | 53.86 | 62.00 |
jinaai/jina-embeddings-v3 | 75.22 | 80.05 | 76.39 | 92.71 | 51.46 | 62.37 |
OpenAI/text-embedding-3-large | 74.48 | 82.52 | 77.58 | 93.58 | 53.32 | 62.35 |
pkshatech/GLuCoSE-base-ja-v2 | 73.36 | 82.96 | 74.21 | 93.01 | 48.65 | 62.37 |
pkshatech/RoSEtta-base-ja | 73.21 | 81.39 | 72.41 | 92.69 | 53.23 | 61.74 |
intfloat/multilingual-e5-large | 70.98 | 79.70 | 72.89 | 92.96 | 51.24 | 62.15 |
OpenAI/text-embedding-3-small | 66.39 | 79.46 | 73.06 | 92.92 | 51.06 | 62.27 |
結果はこちらです。日本語のタスクがあまり学習されていないからなのか、日本語の結果は振るわない結果でした。ruri-v3 シリーズはモデルサイズも小さく、かつ日本語では圧倒的に高性能ですね。
なお Retrieval, Reranking タスクでは、Query の prefix に Instruct: Given a web search query, retrieve relevant passages that answer the query\nQuery:
を追加しています。
また計測に使った、JMTEB用の設定(jsonnet)や結果の summary.json、実行コマンドは以下においてあります。Qwen3-Embedding-0.6B の性能が低すぎる気もするので、何か間違っていたら教えてください。
おまけ: Qwen3 Embedding 論文を読む
Qwen3 Embedding: Advancing Text Embedding and Reranking Through Foundation Modelsが公開されたのでざっくり読んでみました。とりわけ合成データセット作成あたりが個人的に面白かったです。
以下は私の興味範囲のメモ書きです。
- LLM2Vec のような decoder → encoder ではなく、casual attention をそのまま利用
- Embedding モデルは最終層の
[EOS]
トークンの hidden state から最終埋め込みを取得- Query は Instruction + Query で作成。Doc はそのまま。
- InfoNCE を改良したスコア(単純な対照学習ではなく、ハードネガティブを複数含めたり、類似度のポジネガを調整した偽陰性の調整など)
- Reranking は chat template をそのまま使って、"yes", "no" トークンの確率で、関連性スコアとして計算
- decoder model のラベル分類の解き方(該当ラベルトークンの確率を見る)のアプローチをママ適用
- SFT で学習できる
- 1st stage で Qwen3-32B で作った合成データセットをもとに学習
- 情報検索, 対訳マイニング(Bitext Mining), 意味的類似性, 分類 の4つのタイプを作成
- 情報検索の合成データセットの場合、詳細な設定を作り、それをもとにQwen3の事前訓練コーパスの文章からクエリを生成
- 2nd stage で 700万の既存データセット(MS Marco, MIRACLなどなど)と、1st stage のコサイン類似度でフィルタリングした1200万件のデータをもとに学習
- 最後に多様性考慮のモデルマージ
- 詳細は記されてないので推察だが、2nd stage の複数のチェックポイントは、タスク特化学習させたもの、特定言語にフォーカスして学習させたもの、などが考えられそう
- モデルマージは適当にマージして、ベンチマーク走らせると結果が向上することを、少ないコンピューティングリソースで観測できるので、たくさんチェックポイントがあるならいろいろ試した方が良さそう。