🚀 gte-large-zh
General Text Embeddings (GTE) 是一种通用文本嵌入模型。论文 Towards General Text Embeddings with Multi-stage Contrastive Learning 对其进行了详细阐述。该模型由阿里巴巴达摩院训练,主要基于 BERT 框架,目前提供了不同规模的中英文模型。GTE 模型在大规模相关文本对语料库上进行训练,覆盖了广泛的领域和场景,使其能够应用于多种文本嵌入下游任务,如信息检索、语义文本相似度和文本重排序等。
🚀 快速开始
模型列表
评估指标
我们在 MTEB(中文为 CMTEB)基准测试中,将 GTE 模型与其他流行的文本嵌入模型进行了性能比较。更多详细的比较结果,请参考 MTEB 排行榜。
CMTEB 评估结果
模型 |
模型大小 (GB) |
嵌入维度 |
序列长度 |
平均得分 (35 个数据集) |
分类任务 (9 个数据集) |
聚类任务 (4 个数据集) |
成对分类任务 (2 个数据集) |
重排序任务 (4 个数据集) |
检索任务 (8 个数据集) |
语义文本相似度任务 (8 个数据集) |
gte-large-zh |
0.65 |
1024 |
512 |
66.72 |
71.34 |
53.07 |
81.14 |
67.42 |
72.49 |
57.82 |
gte-base-zh |
0.20 |
768 |
512 |
65.92 |
71.26 |
53.86 |
80.44 |
67.00 |
71.71 |
55.96 |
stella-large-zh-v2 |
0.65 |
1024 |
1024 |
65.13 |
69.05 |
49.16 |
82.68 |
66.41 |
70.14 |
58.66 |
stella-large-zh |
0.65 |
1024 |
1024 |
64.54 |
67.62 |
48.65 |
78.72 |
65.98 |
71.02 |
58.3 |
bge-large-zh-v1.5 |
1.3 |
1024 |
512 |
64.53 |
69.13 |
48.99 |
81.6 |
65.84 |
70.46 |
56.25 |
stella-base-zh-v2 |
0.21 |
768 |
1024 |
64.36 |
68.29 |
49.4 |
79.96 |
66.1 |
70.08 |
56.92 |
stella-base-zh |
0.21 |
768 |
1024 |
64.16 |
67.77 |
48.7 |
76.09 |
66.95 |
71.07 |
56.54 |
piccolo-large-zh |
0.65 |
1024 |
512 |
64.11 |
67.03 |
47.04 |
78.38 |
65.98 |
70.93 |
58.02 |
piccolo-base-zh |
0.2 |
768 |
512 |
63.66 |
66.98 |
47.12 |
76.61 |
66.68 |
71.2 |
55.9 |
gte-small-zh |
0.1 |
512 |
512 |
60.04 |
64.35 |
48.95 |
69.99 |
66.21 |
65.50 |
49.72 |
bge-small-zh-v1.5 |
0.1 |
512 |
512 |
57.82 |
63.96 |
44.18 |
70.4 |
60.92 |
61.77 |
49.1 |
m3e-base |
0.41 |
768 |
512 |
57.79 |
67.52 |
47.68 |
63.99 |
59.54 |
56.91 |
50.47 |
text-embedding-ada-002(openai) |
- |
1536 |
8192 |
53.02 |
64.31 |
45.68 |
69.56 |
54.28 |
52.0 |
43.35 |
💻 使用示例
基础用法
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoTokenizer, AutoModel
input_texts = [
"中国的首都是哪里",
"你喜欢去哪里旅游",
"北京",
"今天中午吃什么"
]
tokenizer = AutoTokenizer.from_pretrained("thenlper/gte-large-zh")
model = AutoModel.from_pretrained("thenlper/gte-large-zh")
batch_dict = tokenizer(input_texts, max_length=512, padding=True, truncation=True, return_tensors='pt')
outputs = model(**batch_dict)
embeddings = outputs.last_hidden_state[:, 0]
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
from sentence_transformers.util import cos_sim
sentences = ['That is a happy person', 'That is a very happy person']
model = SentenceTransformer('thenlper/gte-large-zh')
embeddings = model.encode(sentences)
print(cos_sim(embeddings[0], embeddings[1]))
局限性
本模型仅适用于中文文本,并且任何长文本将被截断为最多 512 个标记。
引用
如果您认为我们的论文或模型有帮助,请考虑按以下方式引用:
@article{li2023towards,
title={Towards general text embeddings with multi-stage contrastive learning},
author={Li, Zehan and Zhang, Xin and Zhang, Yanzhao and Long, Dingkun and Xie, Pengjun and Zhang, Meishan},
journal={arXiv preprint arXiv:2308.03281},
year={2023}
}
📄 许可证
本项目采用 MIT 许可证。