ONNX 模型库
返回模型

说明文档

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(SNLIMultiNLI 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

sentence-similarity sentence-transformers
↓ 28.3M ♥ 1.3K

创建时间: 2022-03-02 23:29:05+00:00

更新时间: 2025-08-19 10:14:25+00:00

在 Hugging Face 上查看

文件 (28)

.gitattributes
1_Pooling/config.json
README.md
config.json
config_sentence_transformers.json
data_config.json
model.safetensors
modules.json
onnx/model.onnx ONNX
onnx/model_O1.onnx ONNX
onnx/model_O2.onnx ONNX
onnx/model_O3.onnx ONNX
onnx/model_O4.onnx ONNX
onnx/model_qint8_arm64.onnx ONNX
onnx/model_qint8_avx512.onnx ONNX
onnx/model_qint8_avx512_vnni.onnx ONNX
onnx/model_quint8_avx2.onnx ONNX
openvino/openvino_model.bin
openvino/openvino_model.xml
openvino/openvino_model_qint8_quantized.bin
openvino/openvino_model_qint8_quantized.xml
pytorch_model.bin
sentence_bert_config.json
special_tokens_map.json
tokenizer.json
tokenizer_config.json
train_script.py
vocab.txt