利用python 对比相似度_ChatterBot代码解读-文本相似度的计算

本文详细介绍了利用Python进行文本相似度计算的三种方法:LevenshteinDistance通过编辑距离计算相似度,SpacySimilarity基于语义的余弦相似度,以及JaccardSimilarity通过集合交并比值衡量相似度。这些方法广泛应用于NLP任务,如拼写检查、论文查重等。
摘要由CSDN通过智能技术生成

432a19d6c0dec45a80951300a9a4a7bd.png

在上一篇中,讲到相似度的算法,系统实现了:LevenshteinDistance,SpacySimilarity,JaccardSimilarity。这里详细讲解具体的算法。

水中的鱼:ChatterBot代码解读-获取对话​zhuanlan.zhihu.com
c5652e3df844c9deeb49d8146a0bedc2.png

一.LevenshteinDistance算法

Levenshtein distance是表征或度量两段字符串的差异度的概念,以单词kitten和sitting为例,定义:替换(substitution)、插入(insert)和删除(delete)三种标准编辑手段来消除这两个词之间的差异,每经过1次标准编辑手段,Levenshtein distance增计一次,则kitten需经过2次替换、1次插入新字符,来得到sitting这个单词,因此所谓的Levenshtein distance应为3。按照其定义,该距离和字符串差异度呈正比关系。

代码是对比的两个statement对象的文本,用python的标准库函数SequenceMatcher,然后用编辑距离做分子,字符串A的长度做分母,算出一个0到1之间的相似度。

算法的详细过程参考:

https://blog.csdn.net/weixin_42694380/article/details/81044544​blog.csdn.net

编辑距离是NLP基本的度量文本相似度的算法,可以作为文本相似任务的重要特征之一,其可应用于诸如拼写检查、论文查重、基因序列分析等多个方面。但是其缺点也很明显,算法基于文本自身的结构去计算,并没有办法获取到语义层面的信息。

二.SpacySimilarity算法

代码实现比较简单

3e1ebd3f048ca62d9d48ead036700ef4.png

SpacySimilarity属于语义相似度的计算方法。那么spacy计算句子的相似度是采用什么方式呢?

参考:

Doc · spaCy API Documentation​spacy.io
17143aaf1b005bed5354bd6bbfff09d7.png

先将句子的词向量求平均,获取句子的语义表示,然后计算两个句子的语义表示的余弦相似度。

三.JaccardSimilarity算法

给定两个集合A,B,Jaccard 系数定义为A与B交集的大小与A与B并集的大小的比值,定义如下:

773ba881c781419ca80780fd48d8b082.png

当集合A,B都为空时,J(A,B)定义为1。

与Jaccard 系数相关的指标叫做Jaccard 距离,用于描述集合之间的不相似度。Jaccard 距离越大,样本相似度越低。公式定义如下:

f8148f0b286918d1b304fc69f95a01b8.png

具体实现:

9a3b7c98936f30f79fb352f053751c4e.png

先对两个句子的文本进行分词,去掉停用词,然后按照定义的算法进行计算。算法比较简单。

上述几种方法中,语义相似度问题,是自然语言处理的热点和难点。有百花齐放的研究和处理方式,常见的如下:

基于词向量的几种计算文本相似度方法 :

1)使用词向量求平均计算相似度

2)词向量tfidf加权求平均计算相似度

3)词向量加权-PCA计算相似度

还有基于深度学习的方式,计算句子的语义相似度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值