🚀 gte-multilingual-base
gte-multilingual-base 模型是 GTE(通用文本嵌入)系列模型中的最新成员,具有以下关键特性:
- 高性能:在多语言检索任务和多任务表示模型评估中,与同规模的模型相比,达到了当前最优(SOTA)的效果。
- 训练架构:采用仅编码器的 Transformer 架构进行训练,模型规模更小。与之前基于仅解码器的大语言模型(LLM)架构的模型(如 gte-qwen2-1.5b-instruct)不同,该模型推理时对硬件的要求更低,推理速度提升了 10 倍。
- 长上下文支持:支持最长达 8192 个标记的文本。
- 多语言能力:支持超过 70 种语言。
- 弹性密集嵌入:在保持下游任务有效性的同时,支持弹性输出密集表示,显著降低了存储成本,提高了执行效率。
- 稀疏向量生成:除了密集表示外,还可以生成稀疏向量。
相关论文:mGTE: Generalized Long-Context Text Representation and Reranking Models for Multilingual Text Retrieval
🚀 快速开始
模型信息
属性 |
详情 |
模型规模 |
3.05 亿参数 |
嵌入维度 |
768 |
最大输入标记数 |
8192 |
使用说明
代码示例
💻 使用 Transformers 获取密集嵌入
import torch.nn.functional as F
from transformers import AutoModel, AutoTokenizer
input_texts = [
"what is the capital of China?",
"how to implement quick sort in python?",
"北京",
"快排算法介绍"
]
model_name_or_path = 'Alibaba-NLP/gte-multilingual-base'
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
model = AutoModel.from_pretrained(model_name_or_path, trust_remote_code=True)
batch_dict = tokenizer(input_texts, max_length=8192, padding=True, truncation=True, return_tensors='pt')
outputs = model(**batch_dict)
dimension=768
embeddings = outputs.last_hidden_state[:, 0][:dimension]
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:1] @ embeddings[1:].T) * 100
print(scores.tolist())
使用 sentence-transformers
from sentence_transformers import SentenceTransformer
input_texts = [
"what is the capital of China?",
"how to implement quick sort in python?",
"北京",
"快排算法介绍"
]
model_name_or_path="Alibaba-NLP/gte-multilingual-base"
model = SentenceTransformer(model_name_or_path, trust_remote_code=True)
embeddings = model.encode(input_texts, normalize_embeddings=True)
scores = model.similarity(embeddings[:1], embeddings[1:])
print(scores.tolist())
使用 infinity
通过 Docker 和 infinity 使用,该项目采用 MIT 许可证。
docker run --gpus all -v $PWD/data:/app/.cache -p "7997":"7997" \
michaelf34/infinity:0.0.69 \
v2 --model-id Alibaba-NLP/gte-multilingual-base --revision "main" --dtype float16 --batch-size 32 --device cuda --engine torch --port 7997
使用自定义代码获取密集嵌入和稀疏标记权重
from gte_embedding import GTEEmbeddidng
model_name_or_path = 'Alibaba-NLP/gte-multilingual-base'
model = GTEEmbeddidng(model_name_or_path)
query = "中国的首都在哪儿"
docs = [
"what is the capital of China?",
"how to implement quick sort in python?",
"北京",
"快排算法介绍"
]
embs = model.encode(docs, return_dense=True,return_sparse=True)
print('dense_embeddings vecs', embs['dense_embeddings'])
print('token_weights', embs['token_weights'])
pairs = [(query, doc) for doc in docs]
dense_scores = model.compute_scores(pairs, dense_weight=1.0, sparse_weight=0.0)
sparse_scores = model.compute_scores(pairs, dense_weight=0.0, sparse_weight=1.0)
hybrid_scores = model.compute_scores(pairs, dense_weight=1.0, sparse_weight=0.3)
print('dense_scores', dense_scores)
print('sparse_scores', sparse_scores)
print('hybrid_scores', hybrid_scores)
📚 详细文档
评估
我们在多个下游任务中验证了 gte-multilingual-base 模型的性能,包括多语言检索、跨语言检索、长文本检索,以及在 MTEB 排行榜 上进行的通用文本表示评估等。
检索任务
在 MIRACL 和 MLDR(多语言)、MKQA(跨语言)、BEIR 和 LoCo(英语)上的检索结果。


MTEB 评估
在 MTEB 英语、中文、法语、波兰语任务上的结果。

更多详细的实验结果可在 论文 中查看。
云 API 服务
除了开源的 GTE 系列模型外,GTE 系列模型还在阿里云上提供商业 API 服务。
- 嵌入模型:提供三种版本的文本嵌入模型:text-embedding-v1/v2/v3,其中 v3 是最新的 API 服务。
- 重排序模型:提供 gte-rerank 模型服务。
请注意,商业 API 背后的模型与开源模型并不完全相同。
🔧 技术细节
引用
如果您觉得我们的论文或模型有帮助,请考虑引用:
@inproceedings{zhang2024mgte,
title={mGTE: Generalized Long-Context Text Representation and Reranking Models for Multilingual Text Retrieval},
author={Zhang, Xin and Zhang, Yanzhao and Long, Dingkun and Xie, Wen and Dai, Ziqi and Tang, Jialong and Lin, Huan and Yang, Baosong and Xie, Pengjun and Huang, Fei and others},
booktitle={Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing: Industry Track},
pages={1393--1412},
year={2024}
}