模型库 / sentence-transformers/all-mpnet-base-v2

all-mpnet-base-v2

sentence-transformers sentence-similarity sentence-transformers en
sentence-transformers/all-mpnet-base-v2
36,263,119
下载量
1509
收藏数
32
浏览量
apache-2.0
许可

简介

all-mpnet-base-v2 这是一个句子变换器模型:它将句子和段落映射到768维的稠密向量空间,可用于聚类或语义搜索等任务。

模型卡片

许可协议 apache-2.0
语言
en
框架 sentence-transformers
任务 sentence-similarity
数据集
s2orc stackexchange_xml ms_marco gooaq yahoo_answers_topics code_search_net search_qa eli5 snli multi_nli +11 更多
sentence-transformers feature-extraction sentence-similarity transformers text-embeddings-inference

模型配置

模型类型 mpnet
架构 MPNetForMaskedLM

模型详情

已翻译

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 模型,然后需要对上下文相关的 word embeddings 应用正确的池化操作。

from transformers import AutoTokenizer, AutoModel
import torch
import torch.nn.functional as F

#Mean Pooling - Take attention mask into account for correct averaging
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 we want sentence embeddings for
sentences = ['This is an example sentence', 'Each sentence is converted']

# Load model from HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-mpnet-base-v2')
model = AutoModel.from_pretrained('sentence-transformers/all-mpnet-base-v2')

# Tokenize sentences
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')

# Compute token embeddings
with torch.no_grad():
    model_output = model(**encoded_input)

# Perform pooling
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])

# Normalize embeddings
sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)

print("Sentence embeddings:")
print(sentence_embeddings)

使用方法(Text Embeddings Inference (TEI))

Text Embeddings Inference (TEI) 是一个用于文本 embedding 模型的极速推理解决方案。

  • 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 生成 embeddings:

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 规范


背景

该项目旨在使用自监督对比学习目标,在超大规模的句子级数据集上训练句子 embedding 模型。我们使用了预训练的 microsoft/mpnet-base 模型,并在 10 亿句子对数据集上进行了微调。我们采用对比学习目标:给定句子对中的一个句子,模型需要预测在一组随机采样的其他句子中,哪一个才是与其实际配对的句子。

该模型是在 Hugging Face 组织的 Community week using JAX/Flax for NLP & CV 期间开发的。我们作为 Train the Best Sentence Embedding Model Ever with 1B Training Pairs 项目的一部分开发了该模型。我们受益于高效的硬件基础设施来运行该项目:7 个 TPU v3-8,以及 Google Flax、JAX 和 Cloud 团队成员在高效深度学习框架方面的支持。

预期用途

我们的模型旨在用作句子和短段落的编码器。给定输入文本,它会输出一个捕获语义信息的向量。该句子向量可用于信息检索、聚类或句子相似度任务。

默认情况下,超过 384 个 word pieces 的输入文本会被截断。

训练过程

预训练

我们使用了预训练的 microsoft/mpnet-base 模型。有关预训练过程的更详细信息,请参阅模型卡片。

微调

我们使用对比目标对模型进行微调。形式上,我们计算批次中所有可能的句子对之间的余弦相似度。然后通过与真实句子对进行比较,应用交叉熵损失。

超参数

我们在 TPU v3-8 上训练模型。我们以 1024 的批次大小(每个 TPU 核心 128 个)训练模型 10 万步。我们使用 500 步的学习率预热。序列长度限制为 128 个 token。我们使用 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(标题,摘要) [论文](ht

标签

onnx openvino mpnet fill-mask feature-extraction text-embeddings-inference en dataset:s2orc

操作


详细信息

厂商
sentence-transformers
任务
sentence-similarity
框架
sentence-transformers
模型类型
mpnet
许可(HF)
apache-2.0
语言
en