Multilingual Embedding (small, 141M) - bge-m3 compatible
0
5 commits
1 linked in READMEs
updated Oct 2, 2026
A multilingual sentence and passage embedding model distilled from BAAI/bge-m3 into mmBERT-small. It outputs 1024-dimensional vectors in bge-m3's dense vector space, so you can:
A larger, more accurate version is available as Horizon-Labs/multilingual-embedding-base. Apache-2.0. ONNX files for CPU and the browser (transformers.js) are included.
onnx/model_quantized.onnx (int8 embeddings, 269 MB; cosine >= 0.99997 to the fp32 model on test sentences) outputs the final normalised embedding as sentence_embedding.from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Horizon-Labs/multilingual-embedding-small")
q = model.encode(["How tall is the Eiffel Tower?"])
p = model.encode(["La tour Eiffel mesure 330 mètres.", "The Statue of Liberty is 93 metres tall."])
print(q @ p.T) # higher = more similar
# Querying an existing bge-m3 index: passages embedded earlier with BAAI/bge-m3 (dense, normalised)
# scores = model.encode(queries) @ bge_m3_passage_vectors.T
transformers.js:
import { AutoTokenizer, AutoModel } from "@huggingface/transformers";
const tok = await AutoTokenizer.from_pretrained("Horizon-Labs/multilingual-embedding-small");
const model = await AutoModel.from_pretrained("Horizon-Labs/multilingual-embedding-small", { dtype: "q8" });
const { sentence_embedding } = await model(await tok(["Wie hoch ist der Eiffelturm?"], { padding: true, truncation: true }));
nDCG@10 for ranking each query's candidates by cosine similarity, on public reranking benchmarks (MTEB versions; used
only for evaluation). MIRACL: 60 queries per language with 100 candidates each. Wikipedia: 60 queries per language with 9
candidates each. "Other" = ESCI (es, jp, us), RuBQ, T2Reranking, mMARCO-ja and AskUbuntu. Same script for every model
(code/); multilingual-e5 is run with its "query: "/"passage: " prefixes.
| model | MIRACL (18 languages) | Wikipedia (16 languages) | other (6 sets) | mean | note |
|---|---|---|---|---|---|
| this model (141M) | 0.750 | 0.935 | 0.768 | 0.818 | queries and passages embedded by this model |
| this model → bge-m3 index (141M) | 0.750 | 0.932 | 0.769 | 0.817 | queries by this model, passages by bge-m3 |
| Horizon-Labs/multilingual-embedding-base (308M) | 0.753 | 0.934 | 0.777 | 0.821 | |
| BAAI/bge-m3 (568M) | 0.797 | 0.927 | 0.788 | 0.837 | the teacher |
| intfloat/multilingual-e5-small (118M) | 0.721 | 0.915 | 0.776 | 0.804 | |
| intfloat/multilingual-e5-base (278M) | 0.736 | 0.918 | 0.775 | 0.810 | |
| sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (118M) | 0.387 | 0.837 | 0.687 | 0.637 | |
| sentence-transformers/all-MiniLM-L6-v2 (23M) | 0.172 | 0.720 | 0.621 | 0.504 | English |
code/ in this repository.Multilingual Embedding (small, 141M) - bge-m3 compatible
0
5 commits
1 linked in READMEs
updated Oct 2, 2026
A multilingual sentence and passage embedding model distilled from BAAI/bge-m3 into mmBERT-small. It outputs 1024-dimensional vectors in bge-m3's dense vector space, so you can:
A larger, more accurate version is available as Horizon-Labs/multilingual-embedding-base. Apache-2.0. ONNX files for CPU and the browser (transformers.js) are included.
onnx/model_quantized.onnx (int8 embeddings, 269 MB; cosine >= 0.99997 to the fp32 model on test sentences) outputs the final normalised embedding as sentence_embedding.from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Horizon-Labs/multilingual-embedding-small")
q = model.encode(["How tall is the Eiffel Tower?"])
p = model.encode(["La tour Eiffel mesure 330 mètres.", "The Statue of Liberty is 93 metres tall."])
print(q @ p.T) # higher = more similar
# Querying an existing bge-m3 index: passages embedded earlier with BAAI/bge-m3 (dense, normalised)
# scores = model.encode(queries) @ bge_m3_passage_vectors.T
transformers.js:
import { AutoTokenizer, AutoModel } from "@huggingface/transformers";
const tok = await AutoTokenizer.from_pretrained("Horizon-Labs/multilingual-embedding-small");
const model = await AutoModel.from_pretrained("Horizon-Labs/multilingual-embedding-small", { dtype: "q8" });
const { sentence_embedding } = await model(await tok(["Wie hoch ist der Eiffelturm?"], { padding: true, truncation: true }));
nDCG@10 for ranking each query's candidates by cosine similarity, on public reranking benchmarks (MTEB versions; used
only for evaluation). MIRACL: 60 queries per language with 100 candidates each. Wikipedia: 60 queries per language with 9
candidates each. "Other" = ESCI (es, jp, us), RuBQ, T2Reranking, mMARCO-ja and AskUbuntu. Same script for every model
(code/); multilingual-e5 is run with its "query: "/"passage: " prefixes.
| model | MIRACL (18 languages) | Wikipedia (16 languages) | other (6 sets) | mean | note |
|---|---|---|---|---|---|
| this model (141M) | 0.750 | 0.935 | 0.768 | 0.818 | queries and passages embedded by this model |
| this model → bge-m3 index (141M) | 0.750 | 0.932 | 0.769 | 0.817 | queries by this model, passages by bge-m3 |
| Horizon-Labs/multilingual-embedding-base (308M) | 0.753 | 0.934 | 0.777 | 0.821 | |
| BAAI/bge-m3 (568M) | 0.797 | 0.927 | 0.788 | 0.837 | the teacher |
| intfloat/multilingual-e5-small (118M) | 0.721 | 0.915 | 0.776 | 0.804 | |
| intfloat/multilingual-e5-base (278M) | 0.736 | 0.918 | 0.775 | 0.810 | |
| sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (118M) | 0.387 | 0.837 | 0.687 | 0.637 | |
| sentence-transformers/all-MiniLM-L6-v2 (23M) | 0.172 | 0.720 | 0.621 | 0.504 | English |
code/ in this repository.