🚀 SimCSE(sup)
SimCSE(sup) 是一个用于句子相似度任务的模型,可将句子编码为嵌入向量,并计算句子间的余弦相似度。本项目使用了多种中文数据集进行评估,并提供了模型使用示例。
🚀 快速开始
本项目可用于句子相似度相关任务,你可以使用提供的模型将句子编码为嵌入向量,也可以计算两个句子之间的余弦相似度。
✨ 主要特性
- 支持将句子编码为嵌入向量。
- 可以计算两个句子之间的余弦相似度。
- 使用多种中文数据集进行评估,评估结果采用加权平均法。
📦 安装指南
文档未提供安装步骤,可参考 transformers
库的安装方式:
pip install transformers
💻 使用示例
基础用法
import torch
from transformers import BertTokenizer
from transformers import BertModel
from sklearn.metrics.pairwise import cosine_similarity
simcse_sup_path = "hellonlp/simcse-roberta-large-zh"
tokenizer = BertTokenizer.from_pretrained(simcse_sup_path)
MODEL = BertModel.from_pretrained(simcse_sup_path)
def get_vector_simcse(sentence):
"""
预测simcse的语义向量。
"""
input_ids = torch.tensor(tokenizer.encode(sentence)).unsqueeze(0)
output = MODEL(input_ids)
return output.last_hidden_state[:, 0].squeeze(0)
embeddings = get_vector_simcse("武汉是一个美丽的城市。")
print(embeddings.shape)
高级用法
def get_similarity_two(sentence1, sentence2):
vec1 = get_vector_simcse(sentence1).tolist()
vec2 = get_vector_simcse(sentence2).tolist()
similarity_list = cosine_similarity([vec1], [vec2]).tolist()[0][0]
return similarity_list
sentence1 = '你好吗'
sentence2 = '你还好吗'
result = get_similarity_two(sentence1,sentence2)
print(result)
📚 详细文档
数据集列表
以下数据集均为中文数据集:
数据集 |
训练集规模 |
验证集规模 |
测试集规模 |
ATEC |
62477 |
20000 |
20000 |
BQ |
100000 |
10000 |
10000 |
LCQMC |
238766 |
8802 |
12500 |
PAWSX |
49401 |
2000 |
2000 |
STS-B |
5231 |
1458 |
1361 |
SNLI |
146828 |
2699 |
2618 |
MNLI |
122547 |
2932 |
2397 |
模型列表
评估数据集为中文,我们在不同方法上使用了相同的语言模型 RoBERTa base。此外,考虑到部分数据集的测试集较小,可能导致评估准确率偏差较大,这里的评估数据同时使用了训练集、验证集和测试集,最终评估结果采用 加权平均 (w-avg) 方法。
📄 许可证
本项目采用 MIT 许可证。