说明文档
all-mpnet-base-v2
这是一个 sentence-transformers 模型:它可以将句子和段落映射到 768 维的稠密向量空间,可用于聚类或语义搜索等任务。
使用方法 (Sentence-Transformers)
安装 sentence-transformers 后,使用此模型变得非常简单:
pip install -U sentence-transformers
然后你可以这样使用该模型:
from sentence-transformers import SentenceTransformer
sentences = ["This is an example sentence", "Each sentence is converted"]
model = SentenceTransformer('sentence-transformers/all-mpnet-base-v2')
embeddings = model.encode(sentences)
print(embeddings)
使用方法 (HuggingFace Transformers)
不使用 sentence-transformers,你也可以这样使用该模型:首先,将输入通过 transformer 模型,然后必须在上下文词嵌入之上应用正确的池化操作。
from transformers import AutoTokenizer, AutoModel
import torch
import torch.nn.functional as F
#平均池化 - 考虑注意力掩码进行正确平均
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] #First element of model_output contains all token embeddings
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
# 我们需要句子嵌入的句子
sentences = ['This is an example sentence', 'Each sentence is converted']
# 从 HuggingFace Hub 加载模型
tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-mpnet-base-v2')
model = AutoModel.from_pretrained('sentence-transformers/all-mpnet-base-v2')
# 对句子进行分词
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
# 计算词嵌入
with torch.no_grad():
model_output = model(**encoded_input)
# 执行池化操作
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
# 归一化嵌入
sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)
print("Sentence embeddings:")
print(sentence_embeddings)
使用方法 (Text Embeddings Inference (TEI))
Text Embeddings Inference (TEI) 是一个用于文本嵌入模型的极速推理解决方案。
- CPU:
docker run -p 8080:80 -v hf_cache:/data --pull always ghcr.io/huggingface/text-embeddings-inference:cpu-latest --model-id sentence-transformers/all-mpnet-base-v2 --pooling mean --dtype float16
- NVIDIA GPU:
docker run --gpus all -p 8080:80 -v hf_cache:/data --pull always ghcr.io/huggingface/text-embeddings-inference:cuda-latest --model-id sentence-transformers/all-mpnet-base-v2 --pooling mean --dtype float16
向 /v1/embeddings 发送请求,通过 OpenAI Embeddings API 生成嵌入:
curl http://localhost:8080/v1/embeddings \
-H 'Content-Type: application/json' \
-d '{
"model": "sentence-transformers/all-mpnet-base-v2",
"input": ["This is an example sentence", "Each sentence is converted"]
}'
或查看 Text Embeddings Inference API 规范。
背景
该项目旨在使用自监督对比学习目标,在非常大的句子级数据集上训练句子嵌入模型。我们使用预训练的 microsoft/mpnet-base 模型,并在一个包含 10 亿个句子对的数据集上进行了微调。我们使用对比学习目标:给定一个句子对中的一个句子,模型应该预测在我们的数据集中实际与它配对的句子是随机采样的其他句子集中的哪一个。
这个模型是我们参加由 Hugging Face 组织举办的 社区周 - 使用 JAX/Flax 进行 NLP 与 CV 期间开发的。 我们作为以下项目的一部分开发了这个模型: 使用 10 亿训练对训练史上最好的句子嵌入模型。我们受益于高效的硬件基础设施来运行项目:7 个 TPU v3-8,以及来自 Google Flax、JAX 和云团队成员关于高效深度学习框架的指导。
预期用途
我们的模型旨在用作句子和短段落编码器。给定输入文本,它输出一个捕获语义信息的向量。句子向量可用于信息检索、聚类或句子相似性任务。
默认情况下,超过 384 个词片的输入文本将被截断。
训练过程
预训练
我们使用预训练的 microsoft/mpnet-base 模型。有关预训练过程的详细信息,请参阅模型卡片。
微调
我们使用对比目标对模型进行微调。形式上,我们计算批次中每个可能的句子对的余弦相似度。 然后通过与真实配对进行比较来应用交叉熵损失。
超参数
我们在 TPU v3-8 上训练模型。训练 100k 步,批次大小为 1024(每个 TPU 核心 128 个)。
学习率预热为 500 步。序列长度限制为 128 个词元。我们使用 AdamW 优化器,
学习率为 2e-5。完整的训练脚本可在当前仓库中找到:train_script.py。
训练数据
我们使用多个数据集的拼接来微调模型。句子对的总数超过 10 亿。
我们根据加权概率对每个数据集进行采样,配置详情在 data_config.json 文件中。
| 数据集 | 论文 | 训练样本数量 |
|---|---|---|
| Reddit 评论 (2015-2018) | 论文 | 726,484,430 |
| S2ORC 引用对(摘要) | 论文 | 116,288,806 |
| WikiAnswers 重复问题对 | 论文 | 77,427,422 |
| PAQ(问题、答案)对 | 论文 | 64,371,441 |
| S2ORC 引用对(标题) | 论文 | 52,603,982 |
| S2ORC(标题、摘要) | 论文 | 41,769,185 |
| Stack Exchange(标题、正文)对 | - | 25,316,456 |
| Stack Exchange(标题+正文、答案)对 | - | 21,396,559 |
| Stack Exchange(标题、答案)对 | - | 21,396,559 |
| MS MARCO 三元组 | 论文 | 9,144,553 |
| GOOAQ: 多样化答案类型的开放问答 | 论文 | 3,012,496 |
| Yahoo Answers(标题、答案) | 论文 | 1,198,260 |
| 代码搜索 | - | 1,151,414 |
| COCO 图像标题 | 论文 | 828,395 |
| SPECTER 引用三元组 | 论文 | 684,100 |
| Yahoo Answers(问题、答案) | 论文 | 681,164 |
| Yahoo Answers(标题、问题) | 论文 | 659,896 |
| SearchQA | 论文 | 582,261 |
| Eli5 | 论文 | 325,475 |
| Flickr 30k | 论文 | 317,695 |
| Stack Exchange 重复问题(标题) | 304,525 | |
| AllNLI(SNLI 和 MultiNLI) | SNLI论文, MultiNLI论文 | 277,230 |
| Stack Exchange 重复问题(正文) | 250,519 | |
| Stack Exchange 重复问题(标题+正文) | 250,460 | |
| 句子压缩 | 论文 | 180,000 |
| Wikihow | 论文 | 128,542 |
| Altlex | 论文 | 112,696 |
| Quora 问题三元组 | - | 103,663 |
| 简单英文维基 | 论文 | 102,225 |
| 自然问题 (NQ) | 论文 | 100,231 |
| SQuAD2.0 | 论文 | 87,599 |
| TriviaQA | - | 73,346 |
| 总计 | 1,170,060,424 |
sentence-transformers/all-mpnet-base-v2
作者 sentence-transformers
创建时间: 2022-03-02 23:29:05+00:00
更新时间: 2025-08-19 10:14:25+00:00
在 Hugging Face 上查看