bert-base-nli-stsb-mean-tokens 项目介绍
项目背景
bert-base-nli-stsb-mean-tokens 是一个基于 sentence-transformers 库的模型。它能够将句子或段落映射到一个768维的密集向量空间中,并可以用于如聚类和语义搜索等任务。然而,这个模型已被弃用,因为其产生的句子嵌入质量较低。建议用户使用更优质的句子嵌入模型,可以在 SBERT.net - 预训练模型 上找到推荐模型。
使用方法
使用 Sentence-Transformers 库
首先,用户需要安装 sentence-transformers 库:
pip install -U sentence-transformers
安装后,可以按以下方式使用该模型:
from sentence_transformers import SentenceTransformer
sentences = ["这是一个示例句子", "每个句子都被转换"]
model = SentenceTransformer('sentence-transformers/bert-base-nli-stsb-mean-tokens')
embeddings = model.encode(sentences)
print(embeddings)
使用 HuggingFace Transformers 库
即使没有安装 sentence-transformers 库,也可以通过 HuggingFace 的 Transformers 库使用该模型。首先,需通过 transformer 模型处理输入,然后在得到的上下文化词嵌入上应用适当的池化操作。
from transformers import AutoTokenizer, AutoModel
import torch
# 平均池化 - 考虑注意力掩码以进行正确的平均计算
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] # model_output的第一个元素包含了所有的词嵌入
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 = ['这是一个示例句子', '每个句子都被转换']
# 从 HuggingFace Hub 加载模型
tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/bert-base-nli-stsb-mean-tokens')
model = AutoModel.from_pretrained('sentence-transformers/bert-base-nli-stsb-mean-tokens')
# 对句子进行标记
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'])
print("句子嵌入:")
print(sentence_embeddings)
评价结果
对于该模型的自动化评估,用户可以参考 句子嵌入基准:https://seb.sbert.net。
完整模型架构
该模型的架构如下:
SentenceTransformer(
(0): Transformer({'max_seq_length': 128, 'do_lower_case': False}) with Transformer model: BertModel
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False})
)
引用与作者
该模型是由 sentence-transformers 训练的。如果您认为该模型对您的研究有帮助,欢迎引用他们的论文 Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks。
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "http://arxiv.org/abs/1908.10084",
}
这一项目的介绍涵盖了其基本背景、使用说明、评价结果以及影响力等方面,旨在帮助读者更好地理解和使用 bert-base-nli-stsb-mean-tokens 模型。