WeMM-Embedding:Tencentによるユニバーサル・マルチモーダル検索
TencentのWeMM-Embeddingモデルは、テキスト、画像、動画、ビジュアルドキュメントを1つの埋め込み空間に統合し、ベンチマークで高い性能を示しながら、柔軟な次元数にも対応します。
WeMM-Embedding:Tencentのユニバーサル・マルチモーダル埋め込みモデル
マルチモーダル検索システムは、データ形式ごとに専用のエンコーダー、前処理パイプライン、類似度計算戦略が必要になるため、複雑になりがちです。TencentのWeChat Visionチームは、WeMM-Embeddingによって異なるアプローチを採用しています。これは、テキスト、画像、動画、ビジュアルドキュメント、さらにマルチモーダル入力を交互に組み合わせたデータを、統一されたベクトル空間で表現するよう設計された埋め込みモデル群です。
この特性により、画像とテキストの検索、動画検索、ビジュアルドキュメントの探索、マルチモーダル推薦、混在メディアを対象とした検索拡張生成などの用途に利用できます。Tencentが作成したコードはApache License 2.0の下でオープンソースとして公開されており、推論例、サービング用スクリプト、報告された結果に使用された評価パイプラインも含まれています。
モデルファミリーと対応入力
リポジトリには、次の3つのモデルサイズが用意されています。
| モデル | 対応するMatryoshka次元数 |
|---|---|
WeMM-Embedding-2B |
64, 128, 256, 512, 1024, 2048 |
WeMM-Embedding-4B |
64, 128, 256, 512, 1024, 2560 |
WeMM-Embedding-9B |
64, 128, 256, 512, 1024, 2048, 4096 |
3つのモデルはすべて、テキスト、画像、動画、ビジュアルドキュメント、マルチモーダル入力の交互配置に対応しています。音声は現在サポートされていません。この制限は、幅広いマルチモーダルベンチマークの結果を解釈する際に重要です。MMEB-v3の集計評価では、音声タスクのスコアは0として扱われます。
埋め込みは、モデル専用の<embedding>トークン位置にある最終層の隠れ状態から抽出されます。その後、得られたベクトルはL2正規化されるため、ベクトルデータベースや検索パイプラインでコサイン類似度または内積検索を簡単に利用できます。
インストールと推論
リポジトリをクローンし、依存関係をインストールします。
pip install -r requirements.txt
プロジェクトでは、推論と再現性のためにtransformers==5.2.0を推奨しています。新しいバージョンでは前処理の挙動が変わる可能性があるため、リポジトリの例やベンチマーク値を再現する場合は、バージョンを固定するのが適切です。
Transformersによる推論
Transformersの例では、テキスト、画像、動画の入力をそれぞれ独立して受け付けます。
python examples/transformers_inference.py \
--model /path/to/WeMM-Embedding-2B \
--image /path/to/image.jpg \
--video /path/to/video.mp4 \
--dimension 2048
このコマンドは、指定されたテキスト、画像、動画の入力に対して個別の埋め込みを生成します。--dimensionを省略した場合、モデルは完全な埋め込み次元数で出力します。2Bモデルの完全なサイズは2048次元、4Bモデルは2560次元、9Bモデルは4096次元です。
Sentence Transformers
プロジェクトにはSentence Transformersとの統合も用意されています。
python examples/sentence_transformers_inference.py \
--model /path/to/WeMM-Embedding-2B \
--image /path/to/image.jpg \
--video /path/to/video.mp4 \
--dimension 2048
上記のローカルパスを使う例とは異なり、SentenceTransformerではHugging FaceのモデルIDを直接読み込めます。たとえば、次のように指定します。
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("tencent/WeMM-Embedding-2B")
テキスト、画像、動画の入力はSentenceTransformer.encode()を通して処理されます。--dimensionオプションで使用するMatryoshka表現を選択できるため、アプリケーションは検索品質とベクトルサイズおよび検索コストのバランスを取れます。
Matryoshka埋め込み:再学習なしでより小さなベクトルを生成
WeMM-Embeddingは、Matryoshka Representation Learning(MRL)に対応しています。1つのモデルで複数の次元数の有用な埋め込みを生成できるため、ベクトルサイズごとに別のモデルを用意する必要がありません。
低次元の表現を作成するには、完全なベクトルを切り詰めたうえで、結果をもう一度正規化します。
import torch
embedding = torch.nn.functional.normalize(
embedding[..., :d],
dim=-1,
)
2回目の正規化は重要です。切り詰めるとベクトルのノルムが変化するため、再正規化によって類似度計算の一貫性を保ちます。
リポジトリの報告によると、MMEB-v2では、2Bモデルを256次元にした場合でも、フル次元の画像および動画性能の98.7%を維持します。これにより、ストレージ、メモリ帯域幅、近似最近傍検索インデックスのコストを大幅に削減できます。実運用では、初回検索に256次元ベクトルを使用し、より高い再現率が必要な場合に大きな次元数を使うという構成が可能です。
vLLMまたはSGLangによるサービング
モデルは、vLLMまたはSGLangを通じてプーリングエンドポイントとして公開できます。リポジトリでは、vLLM 0.27.0およびSGLang 0.5.9をテストしています。
vLLMの場合:
MODEL_PATH=/path/to/WeMM-Embedding-2B
vllm serve "$MODEL_PATH" \
--runner pooling \
--chat-template "$MODEL_PATH/embedding_chat_template.jinja"
SGLangの場合は、まずプロジェクトの動画処理パッチを適用してから、埋め込みサーバーを起動します。
MODEL_PATH=/path/to/WeMM-Embedding-2B
python scripts/patch_sglang_video.py
python -m sglang.launch_server \
--model-path "$MODEL_PATH" \
--is-embedding \
--enable-precise-embedding-interpolation
同等のラッパーはscripts/serve_vllm.shとscripts/serve_sglang.shに含まれています。明示的な動画パッチと正確な補間オプションは、フレームサンプリングや時間方向の前処理がレイテンシと検索品質の両方に影響する動画ワークロードで特に重要です。
ベンチマーク性能
78のデータセットを対象とするMMEB-v2では、画像および動画タスクはHit@1、ビジュアルドキュメントタスクはNDCG@5で測定されます。2BのWeMM-Embeddingモデルは平均スコア77.9を報告しており、画像は79.6、動画は70.8、ビジュアルドキュメントは80.7です。4Bモデルの平均は79.2、9Bモデルの平均は80.6に達し、画像、動画、ビジュアルドキュメントのスコアはそれぞれ81.9、74.3、83.3です。
比較の文脈として、Qwen3-VL-EmbeddingはMMEB-v2で2Bが73.2、8Bが77.8の平均スコアを報告しています。リポジトリにはDME-Smallが74.8、DME-Mediumが78.4とも記載されていますが、これらは重みが公開されておらず、公開推論エンドポイントもない、クローズドソースのリーダーボード提出として扱われています。
78のMMEB-v2タスク、53のテキストタスク、47のエージェントタスク、11の音声タスク、MCMRを含む190タスクで構成される、より広範なMMEB-v3評価では、WeMM-Embeddingは次の結果を報告しています。
- 2B: V3-All 56.0、Text 45.3、Agent 45.1、MCMR 42.5、Audio 0.0
- 4B: V3-All 58.2、Text 47.9、Agent 49.0、MCMR 41.9、Audio 0.0
- 9B: V3-All 59.5、Text 48.8、Agent 51.0、MCMR 49.3、Audio 0.0
テキストの結果にはNDCG@5が使用され、エージェント、MCMR、音声の結果にはHit@1が使用されています。9Bモデルの音声スコアが0なのは音声入力がサポートされていないためであり、モデルが音声エンコーダーとして評価された結果ではありません。
評価の再現
mmeb_v3_eval/ディレクトリには、報告された数値の算出に使用された評価コードが含まれています。これは公式のTIGER-AI-Lab/VLM2Vecパイプラインを基にしており、マルチノード・マルチGPU推論、WeMM専用バックボーン、バッチ前処理、整合されたデータセット指示、64フレームの動画サンプリングに対応する変更が加えられています。
一般的な評価設定は次のとおりです。
cd mmeb_v3_eval
DATA_ROOT=/path/to/MMEB-V3 \
bash scripts/download_data.sh
MODEL_PATH=/path/to/WeMM-Embedding-2B \
DATA_BASEDIR=/path/to/MMEB-V3 \
OUTPUT_DIR=exps/wemm_embedding \
bash scripts/run_eval.sh
評価ツールには、torchrun --nnodes=Nを使用したシングルノードおよびマルチノード実行についても記載されています。これは、大規模なチェックポイントをテストしたり、ベンチマーク全体を再現したりする際に役立ちます。
WeMM-Embeddingが適する場面
WeMM-Embeddingは、複数のメディア形式に対して単一の検索インターフェースが必要なシステムで特に有用です。商品カタログではテキスト説明文と商品画像を相互に検索でき、ナレッジベースでは文章と一緒にスクリーンショットやスキャン文書を検索でき、動画アーカイブでは自然言語クエリをサンプリングされたクリップに対応付けられます。
主なエンジニアリング上の選択肢は、モデルサイズ、埋め込み次元数、サービングバックエンドです。小さなチェックポイントとMatryoshka次元数はインフラコストを削減する一方、9Bモデルはリポジトリで報告されている最高のベンチマークスコアを示しています。モデルを本番環境に導入する前に、動画の前処理、GPUメモリ、ベクトルインデックスの要件、音声非対応についても考慮する必要があります。
リポジトリにはコミットが14件しかなく、公開リリースやパッケージも存在しないため、バージョンを固定し、正確な前処理スタックを検証することが特に重要です。サードパーティ製コンポーネントには、それぞれのライセンスと著作権表示が適用されるため、導入前に確認してください。
引用
研究または本番環境での実験にこのプロジェクトを使用する場合、著者は次の引用を求めています。
@article{wemm-embedding,
title={WeMM-Embedding: WeChat Multi-Modal Embedding Technical Report},
author={Junjie Zhou and Ke Mei and Lei Li and Tianyi Wang and Fengyun Rao and Jing Lyu},
year={2026},
eprint={2608.24053},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2608.24053}
}