🚀 gte-base-en-v1.5
我们推出了 gte-v1.5
系列,这是升级版的 gte
嵌入模型,支持最长达 8192 的上下文长度,同时进一步提升了模型性能。该模型基于 transformer++
编码器 骨干网络(BERT + RoPE + GLU)构建。
gte-v1.5
系列在 MTEB 基准测试中,于相同模型大小类别里取得了最先进的分数,并且在 LoCo 长上下文检索测试中表现出色(请参考评估)。
我们还推出了 gte-Qwen1.5-7B-instruct
,这是一个最先进的指令调优多语言嵌入模型,在 MTEB 中排名第二,在 C - MTEB 中排名第一。
模型列表
🚀 快速开始
使用 Python 和 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?",
"Beijing",
"sorting algorithms"
]
model_path = 'Alibaba-NLP/gte-base-en-v1.5'
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True)
batch_dict = tokenizer(input_texts, max_length=8192, 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())
⚠️ 重要提示
建议安装 xformers
并启用无填充(unpadding)以加速推理,详情请参考 enable - unpadding - and - xformers。
使用 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('Alibaba-NLP/gte-base-en-v1.5', trust_remote_code=True)
embeddings = model.encode(sentences)
print(cos_sim(embeddings[0], embeddings[1]))
使用 transformers.js
库
import { pipeline, dot } from '@xenova/transformers';
const extractor = await pipeline('feature-extraction', 'Alibaba-NLP/gte-base-en-v1.5', {
quantized: false,
});
const sentences = [
"what is the capital of China?",
"how to implement quick sort in python?",
"Beijing",
"sorting algorithms"
]
const output = await extractor(sentences, { normalize: true, pooling: 'cls' });
const [source_embeddings, ...document_embeddings ] = output.tolist();
const similarities = document_embeddings.map(x => 100 * dot(source_embeddings, x));
console.log(similarities);
使用 Infinity
Infinity 是一个遵循 MIT 许可的 OpenAI 兼容部署服务器。
docker run --gpus all -v $PWD/data:/app/.cache -p "7997":"7997" \
michaelf34/infinity:0.0.68 \
v2 --model-id Alibaba-NLP/gte-base-en-v1.5 --revision "4c742dc2b781e4ab062a4a77f4f7cbad4bdee970" --dtype bfloat16 --batch-size 32 --device cuda --engine torch --port 7997
📚 详细文档
训练数据
- 掩码语言模型(MLM):
c4-en
- 弱监督对比预训练(CPT):GTE 预训练数据
- 监督对比微调:GTE 微调数据
训练过程
为了使骨干模型支持 8192 的上下文长度,我们采用了多阶段训练策略。模型首先在较短长度上进行初步的 MLM 预训练,然后重新采样数据,减少短文本的比例,并继续进行 MLM 预训练。
整个训练过程如下:
- MLM - 2048:学习率 5e - 4,掩码概率 0.3,批次大小 4096,步数 70000,RoPE 基数 10000
- MLM - 8192:学习率 5e - 5,掩码概率 0.3,批次大小 1024,步数 20000,RoPE 基数 500000
- CPT:最大长度 512,学习率 2e - 4,批次大小 32768,步数 100000
- 微调:待完成
🔧 技术细节
MTEB 评估
其他模型的结果从 MTEB 排行榜 获取。
gte
评估设置:mteb==1.2.0
,FP16 自动混合精度,max_length = 8192
,并将 NTK 缩放因子设置为 2(相当于 RoPE 基数 * 2)。
LoCo 评估
模型名称 |
维度 |
序列长度 |
平均值(5) |
Qsmsum 检索 |
SummScreen 检索 |
Qasper 摘要检索 |
Qasper 标题检索 |
GovReport 检索 |
gte-qwen1.5-7b |
4096 |
32768 |
87.57 |
49.37 |
93.10 |
99.67 |
97.54 |
98.21 |
gte-large-v1.5 |
1024 |
8192 |
86.71 |
44.55 |
92.61 |
99.82 |
97.81 |
98.74 |
gte-base-v1.5 |
768 |
8192 |
87.44 |
49.91 |
91.78 |
99.82 |
97.13 |
98.58 |
📄 许可证
本项目遵循 Apache - 2.0 许可证。
📚 引用
如果您发现我们的论文或模型有帮助,请考虑以下引用:
@misc{zhang2024mgte,
title={mGTE: Generalized Long-Context Text Representation and Reranking Models for Multilingual Text Retrieval},
author={Xin Zhang and Yanzhao Zhang and Dingkun Long and Wen Xie and Ziqi Dai and Jialong Tang and Huan Lin and Baosong Yang and Pengjun Xie and Fei Huang and Meishan Zhang and Wenjie Li and Min Zhang},
year={2024},
eprint={2407.19669},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2407.19669},
}
@misc{li2023gte,
title={Towards General Text Embeddings with Multi-stage Contrastive Learning},
author={Zehan Li and Xin Zhang and Yanzhao Zhang and Dingkun Long and Pengjun Xie and Meishan Zhang},
year={2023},
eprint={2308.03281},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2308.03281},
}