WeMM-Embedding : la recherche multimodale universelle de Tencent
Les modèles WeMM-Embedding de Tencent unifient le texte, les images, les vidéos et les documents visuels dans un même espace d’embeddings, avec d’excellents résultats aux benchmarks et des dimensions flexibles.
WeMM-Embedding : les modèles d’embeddings multimodaux universels de Tencent
Les systèmes de recherche multimodale deviennent souvent complexes, car chaque type de données nécessite son propre encodeur, son pipeline de prétraitement et sa stratégie de similarité. L’équipe WeChat Vision de Tencent adopte une approche différente avec WeMM-Embedding, une famille de modèles d’embeddings conçus pour représenter le texte, les images, les vidéos, les documents visuels et les entrées multimodales entrelacées dans un espace vectoriel unifié.
Ces modèles sont ainsi utiles pour des applications telles que la recherche d’images et de texte, la recherche vidéo, la découverte de documents visuels, la recommandation multimodale et la génération augmentée par récupération sur des médias mixtes. Le projet est open source sous licence Apache 2.0 pour le code écrit par Tencent et inclut des exemples d’inférence, des scripts de déploiement et le pipeline d’évaluation utilisé pour les résultats publiés.
Famille de modèles et entrées prises en charge
Le dépôt fournit trois tailles de modèles :
| Modèle | Dimensions Matryoshka prises en charge |
|---|---|
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 |
Les trois modèles prennent en charge le texte, les images, les vidéos, les documents visuels et les entrées multimodales entrelacées. L’audio n’est actuellement pas pris en charge. Cette limitation est importante pour interpréter les résultats des benchmarks multimodaux généraux : les tâches audio reçoivent un score nul dans l’évaluation agrégée MMEB-v3.
Les embeddings sont extraits de l’état caché de la dernière couche à la position du token dédié <embedding> du modèle. Le vecteur obtenu est ensuite normalisé selon la norme L2, ce qui permet d’utiliser facilement la similarité cosinus ou la recherche par produit scalaire dans les bases de données vectorielles et les pipelines de recherche.
Installation et inférence
Clonez le dépôt et installez ses dépendances :
pip install -r requirements.txt
Le projet recommande transformers==5.2.0 pour l’inférence et la reproductibilité. Les versions plus récentes peuvent modifier le comportement du prétraitement ; il est donc judicieux d’épingler la version lors de la reproduction des exemples ou des chiffres des benchmarks du dépôt.
Inférence avec Transformers
L’exemple Transformers accepte séparément des entrées textuelles, des images et des vidéos :
python examples/transformers_inference.py \\
--model /path/to/WeMM-Embedding-2B \\
--image /path/to/image.jpg \\
--video /path/to/video.mp4 \\
--dimension 2048
La commande produit des embeddings distincts pour les entrées de texte, d’image et de vidéo fournies. Si --dimension est omis, le modèle émet sa dimension d’embedding complète. Pour le modèle 2B, cette taille complète est de 2048 dimensions ; le modèle 4B utilise 2560 dimensions et le modèle 9B, 4096.
Sentence Transformers
Le projet fournit également une intégration avec 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
Contrairement à l’exemple utilisant un chemin local ci-dessus, SentenceTransformer peut charger directement un identifiant de modèle Hugging Face. Par exemple :
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("tencent/WeMM-Embedding-2B")
Les entrées textuelles, les images et les vidéos sont transmises à SentenceTransformer.encode(). L’option --dimension sélectionne la représentation Matryoshka souhaitée, ce qui permet aux applications de faire un compromis entre la taille des vecteurs et le coût de recherche, d’une part, et la qualité de récupération, d’autre part.
Embeddings Matryoshka : des vecteurs plus petits sans réentraînement
WeMM-Embedding prend en charge le Matryoshka Representation Learning, ou MRL. Un même modèle peut produire des embeddings utiles dans plusieurs dimensions, au lieu de nécessiter un modèle distinct pour chaque taille de vecteur.
Pour créer une représentation de dimension inférieure, tronquez le vecteur complet puis normalisez à nouveau le résultat :
import torch
embedding = torch.nn.functional.normalize(
embedding[..., :d],
dim=-1,
)
La seconde étape de normalisation est importante. La troncature modifie la norme du vecteur ; le renormaliser garantit donc la cohérence des calculs de similarité.
Le dépôt indique que, sur MMEB-v2, le modèle 2B en 256 dimensions conserve 98,7 % de ses performances sur les images et les vidéos par rapport à sa dimension complète. Cela peut réduire considérablement les coûts de stockage, de bande passante mémoire et d’indexation des recherches des plus proches voisins approximatifs. Un déploiement pratique peut utiliser des vecteurs de 256 dimensions pour une recherche initiale, tout en conservant la possibilité d’utiliser une dimension supérieure lorsqu’un meilleur rappel est nécessaire.
Déploiement avec vLLM ou SGLang
Les modèles peuvent être exposés sous forme de points de terminaison de pooling via vLLM ou SGLang. Le dépôt a testé vLLM 0.27.0 et SGLang 0.5.9.
Avec vLLM :
MODEL_PATH=/path/to/WeMM-Embedding-2B
vllm serve "$MODEL_PATH" \\
--runner pooling \\
--chat-template "$MODEL_PATH/embedding_chat_template.jinja"
Avec SGLang, appliquez d’abord le correctif de traitement vidéo du projet, puis lancez le serveur d’embeddings :
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
Des wrappers équivalents sont inclus dans scripts/serve_vllm.sh et scripts/serve_sglang.sh. Le correctif vidéo explicite et l’option d’interpolation précise sont particulièrement pertinents pour les charges vidéo, où l’échantillonnage des images et le prétraitement temporel peuvent affecter à la fois la latence et la qualité de recherche.
Performances aux benchmarks
Sur MMEB-v2, qui couvre 78 jeux de données, les tâches d’image et de vidéo sont mesurées avec Hit@1 et les tâches portant sur les documents visuels avec NDCG@5. Le modèle WeMM-Embedding 2B obtient un score moyen de 77,9, avec des scores de 79,6 pour les images, 70,8 pour les vidéos et 80,7 pour les documents visuels. Le modèle 4B atteint une moyenne de 79,2, tandis que le modèle 9B atteint 80,6, avec des scores respectifs de 81,9, 74,3 et 83,3 pour les images, les vidéos et les documents visuels.
À titre de contexte, Qwen3-VL-Embedding affiche des moyennes MMEB-v2 de 73,2 en 2B et de 77,8 en 8B. Le dépôt répertorie également DME-Small à 74,8 et DME-Medium à 78,4 ; ces résultats sont indiqués comme des soumissions de classement à code source fermé, sans poids publiés ni point de terminaison d’inférence public.
Dans l’évaluation plus large MMEB-v3, qui contient 190 tâches couvrant les 78 tâches de MMEB-v2, 53 tâches textuelles, 47 tâches d’agents, 11 tâches audio et MCMR, WeMM-Embedding rapporte les résultats suivants :
- 2B : V3-All 56,0, Texte 45,3, Agent 45,1, MCMR 42,5, Audio 0,0
- 4B : V3-All 58,2, Texte 47,9, Agent 49,0, MCMR 41,9, Audio 0,0
- 9B : V3-All 59,5, Texte 48,8, Agent 51,0, MCMR 49,3, Audio 0,0
Les résultats textuels utilisent NDCG@5, tandis que les résultats pour les agents, MCMR et l’audio utilisent Hit@1. Le score audio du modèle 9B est nul parce que les entrées audio ne sont pas prises en charge, et non parce que le modèle a été évalué comme encodeur audio.
Reproduire l’évaluation
Le répertoire mmeb_v3_eval/ contient le code d’évaluation utilisé pour les chiffres publiés. Il repose sur le pipeline officiel TIGER-AI-Lab/VLM2Vec, avec des modifications pour l’inférence multi-nœuds et multi-GPU, un backbone spécifique à WeMM, un prétraitement par lots, des instructions de jeux de données alignées et un échantillonnage vidéo à 64 images.
Une configuration d’évaluation typique est la suivante :
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
Les outils d’évaluation documentent également l’exécution sur un seul nœud et sur plusieurs nœuds avec torchrun --nnodes=N, ce qui est utile pour tester des checkpoints plus volumineux ou reproduire l’intégralité du benchmark.
Quand WeMM-Embedding est adapté
WeMM-Embedding est particulièrement intéressant lorsqu’un système a besoin d’une interface de recherche unique couvrant plusieurs types de médias. Un catalogue de produits pourrait rechercher des descriptions textuelles parmi des images de produits, une base de connaissances pourrait récupérer des captures d’écran et des documents numérisés aux côtés de textes, et une archive vidéo pourrait faire correspondre des requêtes en langage naturel à des extraits échantillonnés.
Les principaux choix techniques concernent la taille du modèle, la dimension des embeddings et le backend de déploiement. Les checkpoints plus petits et les dimensions Matryoshka réduisent les coûts d’infrastructure, tandis que le modèle 9B offre les meilleurs scores de benchmark rapportés dans le dépôt. Les équipes doivent également tenir compte du prétraitement vidéo, de la mémoire GPU, des exigences de l’index vectoriel et de l’absence de prise en charge audio avant de sélectionner le modèle pour la production.
Le dépôt ne comprend que 14 commits et aucune release ni aucun package publié ; il est donc particulièrement important d’épingler les versions et de valider précisément la pile de prétraitement utilisée. Les composants tiers conservent leurs propres licences et mentions de droits d’auteur, qui doivent être examinées avant le déploiement.
Citation
Si vous utilisez le projet dans le cadre de recherches ou d’expériences en production, les auteurs demandent de le citer :
@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}
}