导航:首页 > 计算方法 > 词语相似度计算方法

词语相似度计算方法

发布时间:2022-12-13 02:26:34

① 文本相似度 之余弦夹角 度量算法

相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越大说明个体差异越大。

对于多个不同的文本或者短文本对话消息要来计算他们之间的相似度如何,一个好的做法就是将这些文本中词语,映射到向量空间,形成文本中文字和向量数据的映射关系,通过计算几个或者多个不同的向量的差异的大小,来计算文本的相似度。下面介绍一个详细成熟的向量空间余弦相似度方法计算相似度

上图两个向量a,b的夹角很小可以说a向量和b向量有很高的的相似性,极端情况下,a和b向量完全重合。如下图:

上图中:可以认为a和b向量是相等的,也即a,b向量代表的文本是完全相似的,或者说是相等的。如果a和b向量夹角较大,或者反方向。

如上图三: 两个向量a,b的夹角很大可以说a向量和b向量有很底的的相似性,或者说a和b向量代表的文本基本不相似。那么是否可以用两个向量的夹角大小的函数值来计算个体的相似度呢?

向量空间余弦相似度理论就是基于上述来计算个体相似度的一种方法。下面做详细的推理过程分析。

想到余弦公式,最基本计算方法就是初中的最简单的计算公式,计算夹角的余弦定值公式为:

但是这个是只适用于直角三角形的,而在非直角三角形中,余弦定理的公式是
三角形中边a和b的夹角 的余弦计算公式为:

在向量表示的三角形中,假设a向量是(x1, y1),b向量是(x2, y2),那么可以将余弦定理改写成下面的形式:

扩展,如果向量a和b不是二维而是n维,上述余弦的计算法仍然正确。假定a和b是两个n维向量,a是 ,b是 ,则a与b的夹角 的余弦等于:

下面举一个例子,来说明余弦计算文本相似度

举一个例子来说明,用上述理论计算文本的相似性。为了简单起见,先从句子着手。

句子A

句子B

怎样计算上面两句话的相似程度?

基本思路是:如果这两句话的用词越相似,它们的内容就应该越相似。因此,可以从词频入手,计算它们的相似程度。

句子A

句子B

这只,皮靴,号码,大了。那只,合适,不,小,很

句子A

句子B

句子A

句子B

到这里,问题就变成了如何计算这两个向量的相似程度。我们可以把它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向。两条线段之间形成一个夹角,如果夹角为0度,意味着方向相同、线段重合,这是表示两个向量代表的文本完全相等;如果夹角为90度,意味着形成直角,方向完全不相似;如果夹角为180度,意味着方向正好相反。因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。

使用上面的多维向量余弦计算公式

计算两个句子向量

句子A

和句子B

的向量余弦值来确定两个句子的相似度。

计算过程如下:

计算结果中夹角的余弦值为0.81非常接近于1,所以,上面的句子A和句子B是基本相似的

由此,我们就得到了文本相似度计算的处理流程是:

② 文本挖掘: 词语关联挖掘之平行关系发现

那么, 怎么如果有条件概率了, 我们怎么算联合概率呢? 可以倒腾一下条件概率公式, 得到 P(a, b) = P(b) · P(a|b), 也就是说两个事件ab共同发生的概率 = a发生的概率 x 已知a发生条件下b发生的概率;
于是, 我们得到了

信息熵 = 不确定性

note: 此处p(x)是x发生的概率.

注意观察这个定义函数, 就可以发现, 因为p(x)<1, 所以如果p(x)值越小且x数目越多的话, 这个H(X)将增大.

因此, 很容易知道, 汉语的信息熵是比英语大不少的, 因为汉语文字数目大于英语文字数目, 且汉语长尾词语非常多, 他们相对来说概率都比较小, 很容易拉高H的值.

联合熵: H(X, Y) = - Σp(x, y) log(p(x, y)), 其实就是把p(x)替换成了p(x,y)代表联合概率.

条件熵: 在一个随机变量已知的时候, 另外一个变量的不确定性
H(Y|X) = - Σp(x, y) log(p(y|x))
链式规则: H(X, Y) = H(X) + H(Y|X)

互信息: I(X; Y) = Σp(x, y) log p(x, y)/p(x)p(y)
互信息的性质: I(X; Y) = H(X) - H(X|Y)
I指标其实就是表现的两个实体之间的相关程度. 如果X和Y完全独立, 那么I(X; Y) = H(X)- H(X) = 0
举例子: I(计算机软件, 软件) > I(计算机, 汽车)

what:
两种关系,
聚合关系/平行关系: paradigmatic
组合关系/共同关系: syntagmatic

上下文中A能被B替换, 那这是聚合关系. //平行关系, 比如cat , dog
A和B能放在一起做搭配, 那么这是组合关系 //共同关系, 互补 比如cat, eat

why?
应用: 信息检索中的search suggestion, 主题图谱entity map.

How?
词语关联, 对于平行关系词语来说,他们往往有十分相似的context.

my cat eats fish on Saturday.
my dog eats meat on Monday.
平行关系: 按照常识, 上下文context相似度高的词是平行关系.
组合关系: 组合关系是一种词语的搭配关系. 按照常识, 这两个词会一起搭配使用. 如果共同出现的概率高, 而独自出现的概率低, 那么就是组合关系.

所以我们由此得出的初步结论:
对于平行关系的, 我们获取每个词语的context, 然后计算词语间context的相似度, 相似度高的就是平行关系.
对于组合关系的, 同时出现在某个语段context(比如一句话或者一段话)中的概率高, 而两个词语独自出现的概率比较低, 那么这两者就是组合关系.

有意思的是, 如果两个词语是平行关系的话, 那么他们往往有着相同的组合关系词语来搭配使用. 比如dog eats meat. cat eats meat.

那么接下去, 我们首先注意到一个问题, 如何获取每个词语的context?

我们可以把context转化为一个我们熟悉的概念 -- document, 这样我们就可以利用以前学过的文档相似度计算的很多方法了.
这里, 我们约定Context = pseudo doc = bag of words词袋
这里词袋的大小选择起来有很多种方法
比如下面这个公式
Sim("cat","dog") = Sim(Left1("cat"),Left1("dog")) + Sim(Right1("cat"), Right1("dog")) + ... + Sim(Win8("cat"), Win8("dog"))
其中, Window8("cat") = {"my","his","big", "eats", "fish"}

我们将使用Vector Space Model. 非常常见, 往往用在文本分类, 情感分类上.
当我们定好了词袋, 也就是我们的doc以后, 我们将会把它转化为多维度空间中的一个向量.
这个空间有n个维度, 这个维度大小取决于文本库corpus的总体独特单词数, 因此维度数目非常地大.
假设表示一个doc("cat") = {"eats": 5, "ate":3, "is":10 , ...}

doc("cat")可能被表示为如下:

表示成向量后, 我们的下一个问题是: 怎么计算相似度?

求相似度往往使用余弦定理: cos(a, b) = a · b / |a||b| ,

但是, 在我们真正开始算之前, 我们得先进行标准化(正规化), 否则各个维度上的向量长度不一, 会出现大数吃小数的现象. 要深刻理解余弦定理是为了求解向量之间夹角的大小, 或者说a向量在b向量单位化后方向上投影的长度(值是0~1)
因此,
d1 = (x1, x2, ... xn), 其中xi = c(wi, d1)/|d1|, c = count, 换句话说, xi是x在d1中出现的概率

Sim(d1, d2) = d1 · d2 = x1y1 + ... + xnyn = Σ(1~n) xiyi 求解向量内积
如果Sim = cos = 1, 夹角为0°, 那么就是完全的平行关系, 即同义词

这个模型还存在的问题:
某些频繁出现的词仍然存在压制其他词影响力的可能.
存在大量的废词, 比如and, or, the 等等...
对空间的浪费, 这个维度数过高了(n如果在这里可能>=10k, 毕竟英语还是汉语的词语都是非常多的)

为了解决上述简单模型条件下存在的问题, 我们引入TF-IDF term weighting.

我们首先重新定义怎么计算TermFrequency. 过去是出现一次我就+1, 所以在词袋中出现10次, TF=10
现在, 我们决定压制那些出现次数过多的词, 因此考虑引入两种朴素办法, 0/1 bit法, 或者对数函数法.

此处, 请务必记得我们约定y: 处理后的TF变形值, x : C(wi, d1) 词语出现频次

TF transformation method:

第二种对数函数的方法已经比较好用了, 但是我们追求完美! 于是乎我们又整出了第三种更牛逼一点的TF计算方法, 它是BM25算法的中对于TF部分的计算方法.

y = BM25(x) = (k+1)·x / (x+k), k是认为调整的参数, k是容忍参数. k越大, 对freq words越没有任何调整. 求导后, 可以看到当k->∞, y->x.
k=0, 其实就是bit hot.
所以, BM25的TF计算完美实现了可以自由设定对高频词语维度容忍参数k.

IDF: IDF(word) = log[(M+1)/m] ,
其中m = total number of docs containing word, 是一个变量, 可以看到, m越大, IDF会相应变得越小.
M: total number of docs in collection, 是一个常数

造成效果是: 文档出现频率m越高的词语word, 会相应有一个较低的IDF weight. 当一个词语几乎每篇文档都出现的时候, 那么 IDFweight会很接近 log(1) = 0. 而一个词语出现得非常罕见, 比如unicorn, 那么它的IDFweight会被对数函数限制增长速度, 而不至于变得过大.

我们约定word[i] = wi, document[1] = d1, i指的是第i个元素.
那么, 现在我们整篇文章的对于平行关系发现的论述就归于如下两步:

第一步:

第二步:

再次强调, 现在 xi, yi来自BM25(wi, d1) / ΣBM25(wj, d1) , 即BM25's TF of wi / BM25's TF sum of all, 是∈[0, 1]的标准化量.

相似度的计算例子

End.

③ 自然语言处理方面的词语相似度计算问题

语音相似,但是某各自的差异,换一个符号,都是会变另外一个意思的,所以说话谨慎。

④ 跪求~高手~~怎样用c++计算词语相似度~~C++的计算词语相似度都有哪些方法

可以这样来设计:
把有相似度的词语都放在一个数组里面作为数组的元素,如设a[n]={"电脑","微机",“计算机”……},检索的时候通过循环比较,若发现有和检索词相同的词,就输出数组其他的元素。

⑤ 余弦相似度计算

余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度将向量根据坐标值,绘制到向量空间中,如最常见的二维空间。
余弦相似度的计算用的很广泛,在NLP计算中,常用来计算词语的相似度,因为词,或者文本表示成分布式向量之后,可以很方便的计算他们的余弦相似度来评估他们的语义相似性。

⑥ 请问下面相似度计算公式代表什么意思,他是如何计算的,这个公式的具体解释是什么

这好像是机器学习的范畴。。比如两个文本Ma,Mi所对应的特征项所组成的向量为V(Ma),V(Mi)。
这里的特征项指的是,文本中有意义的短语,词语之类的。
上面这个公式就是计算两个向量的夹角的余弦。。如果余弦值为1, 代表夹角为0,两者相似度最高。若余弦值为-1,代表两者相似度最低。

具体解释见这里。
http://..com/question/408123084.html

⑦ 如何进行相似度的计算,主要用什么方式

如何计算句子的语义相似度,很容易想到的是向量空间模型(VSM)和编辑距离的方法,比如A:“我爸是李刚”,B:“我儿子是李刚”,利用VSM方法A(我,爸,是,李刚)B(我,儿子,是,李刚),计算两个向量的夹角余弦值,不赘述;编辑距离就更好说了将“爸”,“儿子”分别替换掉,D(A,B)= replace_cost;
这是两种相当呆的方法,属于baseline中的baseline,换两个例子看一下就知道A:“楼房如何建造?”,B:“高尔夫球怎么打?”,C:“房子怎么盖?”,如果用VSM算很明显由于B,C中有共同的词“怎么”,所以BC相似度高于AC;编辑距离同理;
解决这种问题方法也不难,只要通过同义词词典对所有句子进行扩展,“如何”、“怎么”,“楼房”、“房子”都是同义词或者近义词,扩展后再算vsm或者edit distance对这一问题即可正解.这种方法一定程度上解决了召回率低的问题,但是扩展后引入噪声在所难免,尤其若原句中含有多义词时.例如:“打酱油”、“打毛衣”.在汉字中有些单字词表达了相当多的意义,在董振东先生的知网(hownet)中对这种类型汉字有很好的语义关系解释,通过hownet中词语到义元的树状结构可以对对词语粒度的形似度进行度量.
问题到这里似乎得到了不错的解答,但实际中远远不够.VSM的方法把句子中的词语看做相互独立的特征,忽略了句子序列关系、位置关系对句子语义的影响;Edit Distance考虑了句子中词语顺序关系,但是这种关系是机械的置换、移动、删除、添加,实际中每个词语表达了不同的信息量,同样的词语在不同词语组合中包含的信息量或者说表达的语义信息大不相同.What about 句法分析,计算句法树的相似度?这个比前两种方法更靠谱些,因为句法树很好的描述了词语在句子中的地位.实际效果要待实验证实.
对了,还有一种方法translation model,IBM在机器翻译领域的一大创举,需要有大量的语料库进行训练才能得到理想的翻译结果.当然包括中间词语对齐结果,如果能够利用web资源建立一个高质量的语料库对两两相似句对通过EM迭代词语对齐,由词语对齐生成句子相似度,这个.想想还是不错的方法!

⑧ 文本相似度计算(一):距离方法

距离方法
1、文本的表示
1.1、VSM表示
1.2、词向量表示
1.3、迁移方法
2、距离计算方法
2.1、欧氏距离 (L 2 范数)、曼哈顿距离 (L 1 范数)、 明氏距离
2.2、汉明距离
2.3、Jaccard相似系数、 Jaccard距离( 1-Jaccard相似系数)
2.4、余弦距离
2.5、皮尔森相关系数
2.5、编辑距离

场景举例:
1)计算 Query 和文档的相关度、2)问答系统中计算问题和答案的相似度、3)广告系统中计算 Query 和广告词的匹配程度、4)推荐系统中 要给某个用户推荐某件物品,计算这件物品和这个用户兴趣的相似度
更多地,判断两个query表达的意思是否相同也可以看作属于文本相似度的范畴。
相似度一定是指两个东西(姑且分别用 P 和 Q 表示)的相似程度,而这两个东西可以是任何形式的,例如文本、图片、声音等等。最终要计算相似度,那必须把这些东西抽象成数学形式,说白了 ,就是怎么用数字把 这些 东西表示出来, 一 般会表示成向量或者矩阵。那如果表示成了向量, 计算相似度就可以使用大家在数学课上学的知识了。
这里希望可以比较清晰全面地介绍一下文本相似度的计算方法,目前来说,大致分为距离、hash、深度学习三种方法。

这些所谓的距离其实都是一些 固定 的公式而己,关键在于如何应用。实际应用中可以使用tf-idf、word2vec、LDA等方法实现相似度的距离计算。

很多相似度的第一步其实都是文本的表示问题,即把文本用数字的形式表示出来,这一步目前主要有 VSM(vector space model) ,和 词向量表示 两种方式。

这种方法其实灵活性较大,可以基于分词,对于中文基于字符或n-grams的表示也有一定效果。
1) tf-idf/bow表示 :在给定文档集合C和词典D的条件下,将某篇文档通过词袋模型表示成一个个的词,而后根据 TF-IDF 为每个词计算出一个实数值;
由于词典D的大小为M,因此 将这篇文档转化成一个M维向量 ,如果词典中某个词未出现在文档中,则这个词的在向量中对应的元素为0,若某个词出现在文档中,则这个词在向量中 对应的元素值为这个词的tf-idf值 。这样,就把文档表示成向量了,而这就是 向量空间模型(vector space model) 。从这里也可看出:向量空间模型并没有catch住词(term)与词(term)之间的关系,它假设各个term之间是相互独立的。
而有了文档向量,就可以计算文档之间的相似度了。
这种表示方法与词典大小相关,往往会使文本的表示比较稀疏且高维,可以通过PCA缓解这一问题。
2) 主题模型表示 :实际上VSM可以作为一种文本表示的思想:把对文本内容的处理简化为向量空间中的向量运算,并且它以空间上的相似度表达语义的相似度。
在这个角度,使用LDA,LSA等主题模型同样可以完成文本的VSM表示:将文本表示为topic的向量空间。
这种方法维度可自定义(topic数),且不稀疏,但是可能存在文本对之间距离相似度分布空间密集的情况导致效果不佳。

这种方法一般直接将文本分词后 将词向量相加除以句子长度就可得到 。也可以使用如 smooth inverse frequency的加权方法 将词向量加权:每个词嵌入都由a/(a + p(w))进行加权,其中a的值经常被设置为0.01,而p(w)是词语在语料中预计出现的频率。
一般来说word2vec的词向量方法 强于glove方法 ,而对于word2vec,cbow方法强于skip-gram(具体原因并不复杂,感兴趣可以从训练方法角度思考一下~)

更多地,上述文本表示方法其实会损失或无法捕捉到语义信息,通过bert、elmo等预训练方法的表示更加靠谱,也可以用于无监督的文本相似度计算。

欧氏距离:

曼哈顿距离:

表示两个(相同长度)字对应位不同的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。

(1)雅各相似系数:
两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。

杰卡德相似系数是衡量两个集合的相似度一种指标。
实际使用中,可以用去重与不去重两种方式计算,更多地,可以转换为交集的tf-idf值之和除以并集的tf-idf值之和

(2) 杰卡德距离
  与杰卡德相似系数相反的概念是杰卡德距离(Jaccard distance)。
杰卡德距离可用如下公式表示:


杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。

夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。文本的相似度一般取绝对值。

皮尔森相关系数在推荐系统用的较多,它的公式如下 :

指两个字符串,由一个变成另一个所需的最少的编辑次数,这个编 就包括替换、插入、删除操作。

文本相似度的计算一般使用VSM/cbow+cos距离/欧式距离,或jaccard距离

Dice 系数可以计算两个字符串的相似度:Dice(s1,s2)=2*comm(s1,s2)/(leng(s1)+leng(s2))。

https://blog.csdn.net/weixin_43526820/article/details/89883640?spm=1001.2014.3001.5501

⑨ 语义相似度

一、语义相似度的简介

       在很多情况下,直接计算词语之间的相似度非常的困哪,一般情况下,先计算词语之间的距离,再转换为相似度。

        语义之间的距离,通常有两种计算方式,一种是通过大量的语料库进行统计,一种是根据某种本体或分类关系。

        利用大规模的语料库进行统计,这种基于统计的方法主要将上下文信息的概率分布作为词汇语义相似度的参照依据。基于统计的词语语义相似度计算方法是一种经验主义方法,它把词语相似度的研究建立在可观察的语言事实上。它是建立在两个词语语义相似当且仅当它们处于相似的上下文环境中的这一假设的基础上。它利用大规模语料库,将词语的上下文信息作为语义相似度计算的参照依据。基于统计的定量分析方法能够对词汇间的语义相似性进行比较精确和有效的度量,但是这种方法比较依赖于训练所用的语料库,计算量大,计算方法复杂,另外,受数据稀疏和数据噪声的干扰较大,有时会出现明显的错误。

    根据本体或分类关系计算词语语义距离的方法,一般是利用一部同义词词典。一般同义词词典都是将所有的词组织在一棵或几棵树状的层次结构中。在一棵树状图中,任何结点之间有且只有一条路径,于是这条路径的长度就可以作为这两个概念的语义距离的一种度量。有些研究者考虑的情况更复杂。除了节点件的路径长度外,还考虑到了其它一些因素。如:概念层次树的深度,概念层次树的区域密度等等。基于本体或分类关系的计算方法比较简单有效,无需用语料库进行训练,也比较直观,易于理解,但这种方法得到的结果受人的主观意识影响较大,有时并不能准确反映客观事实。

 二、基于WordNet语义相似度算法研究

      WordNet中的概念是由概念间关系连接在一起的,每个概念都通过关系和其他概念相连,而整个WordNet则是由概念和关系组成的巨大的网络。最上面图是WordNet中部分概念网络结构图。

       下图是以"car"和“bag”为主体的概念,得到is_a关系树状分类图

阅读全文

与词语相似度计算方法相关的资料

热点内容
小米5开关机时间设置在哪里设置方法 浏览:757
怎么让腿变快的方法 浏览:170
易企秀手机版使用方法怎么保存 浏览:692
戒烟自由的最佳方法 浏览:432
70迈停车监控线连接方法 浏览:902
常用螺纹联接防松方法及应用 浏览:744
课堂研究设计方法分析 浏览:813
面粉做豆沙包子的方法与步骤 浏览:194
东北酸菜怎么快速腌制方法 浏览:187
野钓的正确方法图片 浏览:728
做深蹲的正确呼吸方法是什么 浏览:841
烧鸭使用方法 浏览:137
调查对象的最佳方法 浏览:321
拾音器的安装方法 浏览:972
a型法兰承插式柔性连接方法 浏览:281
税后工资计算方法 浏览:386
韩国玫瑰面膜使用方法 浏览:906
有框地簧门安装方法图解 浏览:676
想要读公办学校有哪些方法 浏览:169
概率密度估计方法有哪些 浏览:82