当前位置:   article > 正文

NLP:如何计算两个句子的相似度

计算两个句子的相似度


1. 前言

计算两个句子的相似度是自然语言处理中的常见任务,可以通过多种技术实现,主要包括基于词频的余弦相似度、TF-IDF、Word2Vec、BERT嵌入等方法。

本文通过 SentenceTransformer 计算句子的相似,其中内容已经帮我们封装了很多工作,节省精力。

SentenceTransformer 是一个流行的Python库,它利用预训练的Transformer模型(如BERT、DistilBERT等)来生成句子的语义向量。这些向量能够捕获句子的深层语义信息,进而用于计算句子间的相似度。以下是使用SentenceTransformer计算句子相似度的基本步骤:

2. 步骤

2.1 安装

首先,你需要安装sentence_transformers库。

pip install sentence_transformers
  • 1

2.2 加载预训练模型

选择一个预训练的模型,比如 all-MiniLM-L6-v2,用于将文本转换为向量。如果无法联网,可以在 官网下载

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
  • 1
  • 2

2.3 编码句子

使用模型对句子进行编码,得到句子的向量表示。

sentence1 = "我希望能实现理想"
sentence2 = "我希望挣大钱"

embedding1 = model.encode(sentence1)
embedding2 = model.encode(sentence2)
  • 1
  • 2
  • 3
  • 4
  • 5

2.4 计算相似度

计算两个句子向量之间的余弦相似度。可以直接使用sentence_transformers库中的工具函数,或者手动计算。

1.使用util模块计算相似度

from sentence_transformers.util import cos_sim

similarity = cos_sim(embedding1, embedding2)
print(f"相似度: {similarity.item()}")
  • 1
  • 2
  • 3
  • 4

2. 手动计算余弦相似度

如果你不使用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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

值越接近1表示两个句子在语义上越相似,值越接近0则表示不太相似。


欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;

欢迎关注知乎/CSDN:SmallerFL;

也欢迎关注我的wx公众号(精选高质量文章):一个比特定乾坤

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/941415
推荐阅读
相关标签
  

闽ICP备14008679号