计算两个句子的相似度是自然语言处理中的常见任务,可以通过多种技术实现,主要包括基于词频的余弦相似度、TF-IDF、Word2Vec、BERT嵌入等方法。
本文通过 SentenceTransformer
计算句子的相似,其中内容已经帮我们封装了很多工作,节省精力。
SentenceTransformer
是一个流行的Python库,它利用预训练的Transformer模型(如BERT、DistilBERT等)来生成句子的语义向量。这些向量能够捕获句子的深层语义信息,进而用于计算句子间的相似度。以下是使用SentenceTransformer
计算句子相似度的基本步骤:
首先,你需要安装sentence_transformers
库。
pip install sentence_transformers
选择一个预训练的模型,比如 all-MiniLM-L6-v2
,用于将文本转换为向量。如果无法联网,可以在 官网下载。
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
使用模型对句子进行编码,得到句子的向量表示。
sentence1 = "我希望能实现理想"
sentence2 = "我希望挣大钱"
embedding1 = model.encode(sentence1)
embedding2 = model.encode(sentence2)
计算两个句子向量之间的余弦相似度。可以直接使用sentence_transformers
库中的工具函数,或者手动计算。
util
模块计算相似度from sentence_transformers.util import cos_sim
similarity = cos_sim(embedding1, embedding2)
print(f"相似度: {similarity.item()}")
如果你不使用util.cos_sim
,也可以手动计算两个向量的余弦相似度,如下所示:
import numpy as np
def cosine_similarity(v1, v2):
return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
similarity_manual = cosine_similarity(embedding1, embedding2)
print(f"手动计算的相似度: {similarity_manual}")
值越接近1表示两个句子在语义上越相似,值越接近0则表示不太相似。
欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;
欢迎关注知乎/CSDN:SmallerFL;
也欢迎关注我的wx公众号(精选高质量文章):一个比特定乾坤