pipeline_tag: 句子相似度
license: apache-2.0
tags:
- 文本向量化
- 特征提取
- 句子相似度
- transformers
datasets:
- shibing624/nli-zh-all
language:
- 中文
metrics:
- 斯皮尔曼相关系数
library_name: sentence-transformers
shibing624/text2vec-base-chinese-paraphrase
这是基于CoSENT(余弦句子)模型的shibing624/text2vec-base-chinese-paraphrase。
它将句子映射到768维的密集向量空间,可用于句子嵌入、文本匹配或语义搜索等任务。
- 训练数据集:https://huggingface.co/datasets/shibing624/nli-zh-all/tree/main/text2vec-base-chinese-paraphrase-dataset
- 基础模型:nghuyong/ernie-3.0-base-zh
- 最大序列长度:256
- 最佳训练轮次:5
- 句子嵌入维度:768
评估
关于该模型的自动化评估,请参见评估基准:text2vec
发布模型
说明:
使用方法 (text2vec)
安装text2vec后即可轻松使用该模型:
pip install -U text2vec
然后可以这样使用模型:
from text2vec import SentenceModel
sentences = ['如何更换花呗绑定银行卡', '花呗更改绑定银行卡']
model = SentenceModel('shibing624/text2vec-base-chinese-paraphrase')
embeddings = model.encode(sentences)
print(embeddings)
使用方法 (HuggingFace Transformers)
如果不使用text2vec,可以这样使用模型:
首先,将输入通过transformer模型传递,然后需要在上下文词嵌入之上应用正确的池化操作。
安装transformers:
pip install transformers
然后加载模型并进行预测:
from transformers import BertTokenizer, BertModel
import torch
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0]
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)
tokenizer = BertTokenizer.from_pretrained('shibing624/text2vec-base-chinese-paraphrase')
model = BertModel.from_pretrained('shibing624/text2vec-base-chinese-paraphrase')
sentences = ['如何更换花呗绑定银行卡', '花呗更改绑定银行卡']
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)
使用方法 (sentence-transformers)
sentence-transformers是一个流行的用于计算句子密集向量表示的库。
安装sentence-transformers:
pip install -U sentence-transformers
然后加载模型并进行预测:
from sentence_transformers import SentenceTransformer
m = SentenceTransformer("shibing624/text2vec-base-chinese-paraphrase")
sentences = ['如何更换花呗绑定银行卡', '花呗更改绑定银行卡']
sentence_embeddings = m.encode(sentences)
print("句子嵌入:")
print(sentence_embeddings)
完整模型架构
CoSENT(
(0): Transformer({'max_seq_length': 256, 'do_lower_case': False}) with Transformer model: ErnieModel
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_mean_tokens': True})
)
预期用途
我们的模型旨在用作句子和短段落编码器。给定输入文本,它会输出一个捕获语义信息的向量。句子向量可用于信息检索、聚类或句子相似度任务。
默认情况下,超过256个词片的输入文本会被截断。
训练过程
预训练
我们使用了预训练的nghuyong/ernie-3.0-base-zh
模型。
关于预训练过程的更多详细信息,请参阅模型卡片。
微调
我们使用对比目标进行微调。形式上,我们计算批次中每个可能的句子对的余弦相似度。
然后通过比较真实对和虚假对应用排名损失。
引用与作者
该模型由text2vec训练。
如果您觉得该模型有帮助,欢迎引用:
@software{text2vec,
author = {徐明},
title = {text2vec: 文本到向量的工具},
year = {2023},
url = {https://github.com/shibing624/text2vec},
}