WeChat released Family of Embedding Models (GitHub Repo)
Tencent's WeChat team has open-sourced WeMM-Embedding, a family of multimodal models that map heterogeneous inputs like video, images, and text into a shared space.
Deep dive
- Provides unified representations for text, images, video, and visual documents.
- Supports dynamic dimensionality via Matryoshka Representation Learning (MRL).
- Compatible with vLLM 0.27.0 and SGLang 0.5.9.
- Outperforms previous models like VLM2Vec and E5-Omni on the MMEB-v2/v3 benchmarks.
- 2B model retains 98.7% performance at 256 dimensions.
- Inference requires L2 normalization of output embeddings.
Decoder
- Matryoshka Representation Learning (MRL): A technique where a model learns embeddings such that the initial prefixes of the vector contain useful information, allowing developers to trade off accuracy for storage/speed by using smaller vector sizes.
- Multimodal Embedding: A mathematical representation that maps different types of data (like images and text) into the same coordinate space so that related items are mathematically close to one another.
Original article
WeMM-Embedding: WeChat Multi-Modal Embedding
WeMM-Embedding is a family of universal multimodal embedding models developed by the WeChat Vision team. It provides unified representations for text, images, videos, visual documents, and interleaved multimodal inputs, achieving state-of-the-art performance across multiple benchmarks covering diverse tasks and domains.
Model Zoo
| Model | Matryoshka dimensions | Hugging Face |
|---|---|---|
| WeMM-Embedding-2B | 64, 128, 256, 512, 1024, 2048 |
🤗 Link |
| WeMM-Embedding-4B | 64, 128, 256, 512, 1024, 2560 |
🤗 Link |
| WeMM-Embedding-9B | 64, 128, 256, 512, 1024, 2048, 4096 |
🤗 Link |
All models support text, images, videos, visual documents, and interleaved multimodal inputs. Embeddings are obtained from the last-layer hidden state at the dedicated <embedding> token position, followed by L2 normalization. Audio input is not currently supported.
Installation
pip install -r requirements.txt
Transformers
We recommend using transformers==5.2.0 for inference and reproducibility, as newer versions may differ in preprocessing behavior.
python examples/transformers_inference.py \
--model /path/to/WeMM-Embedding-2B \
--image /path/to/image.jpg \
--video /path/to/video.mp4 \
--dimension 2048
The example produces independent text, image, and video embeddings. Omit --dimension for the full embedding dimension.
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 loads the model directly, so a Hugging Face model id such as tencent/WeMM-Embedding-2B also works in place of a local path. Text, image, and video inputs go through SentenceTransformer.encode(), and MRL is selected with --dimension.
Serving
Tested versions: vLLM 0.27.0 and 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
Equivalent one-command wrappers are available in scripts/serve_vllm.sh and scripts/serve_sglang.sh.
Matryoshka Embeddings
For a supported dimension d, truncate the full embedding and normalize it again:
embedding = torch.nn.functional.normalize(embedding[..., :d], dim=-1)
On MMEB-v2, the 2B model at 256 dimensions retains 98.7% of its full-dimensional image and video performance.
Evaluation
MMEB-v2
Results on 78 datasets. Image and video tasks use Hit@1, while visual-document tasks use NDCG@5. Higher is better.
| Model | Size | AVG | Image | Video | VisDoc |
|---|---|---|---|---|---|
| WeMM-Embedding | 2B | 77.9 | 79.6 | 70.8 | 80.7 |
| WeMM-Embedding | 4B | 79.2 | 80.8 | 72.1 | 82.0 |
| WeMM-Embedding | 9B | 80.6 | 81.9 | 74.3 | 83.3 |
MMEB-v3
Results on 190 tasks. V3-All includes the 78 MMEB-v2 tasks, 53 text tasks, 47 agent tasks, 11 audio tasks, and MCMR.
| Model | Size | V3-All | Text | Agent | MCMR | Audio |
|---|---|---|---|---|---|---|
| WeMM-Embedding | 2B | 56.0 | 45.3 | 45.1 | 42.5 | 0.0 |
| WeMM-Embedding | 4B | 58.2 | 47.9 | 49.0 | 41.9 | 0.0 |
| WeMM-Embedding | 9B | 59.5 | 48.8 | 51.0 | 49.3 | 0.0 |
Text results use NDCG@5; agent, MCMR, and audio results use Hit@1.
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
Citation
@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},
}
License
Unless otherwise noted, Tencent-authored code in this repository is released under the Apache License 2.0.
Fresh dev news, AI-digested daily. Never miss a trend at devoured.fyi