% s" [7 ?4 R/ i5 M; I
/ E. Z1 S8 F- s! X* q; I* x文本相似度计算-度量方法6 l* x8 s$ Q2 W; R
2. 文本相似度计算-距离的度量完整机器学习实现代码GitHub" @9 M+ h& V0 w$ j( X6 `$ J
欢迎转载,转载请注明出处https://www.cnblogs.com/huangyc/p/9786731.html
! P' L3 k% b# x" {' X2 g! b e欢迎沟通交流: 339408769@qq.com
) ^5 M& {; j2 D' c; P; ], r0. 目录- 1. 前言
- 2. 相似度计算方式
- 2.1 余弦相似度
- 2.2 欧式距离
- 2.3 曼哈顿距离
- 2.4 闵可夫斯基距离
- 2.5 皮尔森相关系数(pearson)
- 2.6 Jaccard相似性系数4 K4 S& A% K2 J2 \: h3 E
- 3. 总结
1 n( l2 {1 ~, ?* R; D; \* d8 A
9 Q- n) O/ t8 Q# ~& n
1. 文本相似度计算-文本向量化 2. 文本相似度计算-距离的度量 3. 文本相似度计算-DSSM算法 4. 文本相似度计算-CNN-DSSM算法 回到顶部 1. 前言上文介绍了文本的向量化处理,本文是在上文的向量化处理后的数据进行距离的计算。距离度量的方式有多种多样,但是一种相似度计算方式并不适用与所有的情况,需要根据不同的情况和数据类型进行选择。 回到顶部 2. 相似度计算方式相似度就是比较两个事物的相似性。一般通过计算事物的特征之间的距离,如果距离小,那么相似度大;如果距离大,那么相似度小。 简化问题:假设有两个对象XX、YY,都包括NN维特征,X=(x1,x2,x3,..,xn),Y=(y1,y2,y3,..,yn)X=(x1,x2,x3,..,xn),Y=(y1,y2,y3,..,yn),计算XX和YY的相似性。常用的方法如下: 9 ]7 {( [+ h y: A' ?2 ]5 Q8 k
2.1 余弦相似度余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。适合word2vec模型向量化的数据。
" Z* f0 l( E9 Xcosθ=∑ni=1xi∗yi∑ni=1x2i∑ni=1y2i−−−−−−−−−−−−−√cosθ=∑i=1nxi∗yi∑i=1nxi2∑i=1nyi2
5 z$ h/ h5 O O, G g) K2.2 欧式距离欧氏距离是最常用的距离计算公式,衡量的是多维空间中各个点之间的绝对距离,当数据很稠密并且连续时,这是一种很好的计算方式。 因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,如在KNN中需要对特征进行归一化。 / v9 l4 {+ [, X1 J9 h/ ^
d=∑i=1n(xi−yi)2−−−−−−−−−−√d=∑i=1n(xi−yi)2 . p6 X d: f m
2.3 曼哈顿距离曼哈顿距离简单来说就是统计相同坐标轴上的距离的和。 * M* r$ r$ L; |0 W: Z/ c! q
d=∑i=1n|xi−yi|d=∑i=1n|xi−yi|
0 X. k% Y: l5 _& m. {, ^ v- |2.4 闵可夫斯基距离大家有没发现欧式距离和曼哈顿距离在形式上比较相近。是的,其实它们是闵可夫斯基距离的特殊化。适合TF-IDF向量化后的数据或者提炼出来的主题模型数据。
+ k' g9 v5 o `6 i* W1 bd=(∑i=1n(xi−yi)p)1pd=(∑i=1n(xi−yi)p)1p
3 Q, A" G+ r$ v! A2.5 皮尔森相关系数(pearson)皮尔森相关系数是衡量线性关联性的程度。 两个连续变量(X,Y)(X,Y)的pearson相关性系数PX,YPX,Y等于它们之间的协方差cov(X,Y)cov(X,Y)除以它们各自标准差的乘积σXσX,σYσY。系数的取值总是在-1.0到1.0之间,接近0的变量被成为无相关性,接近1或者-1被称为具有强相关性。
9 v; B- b( e" z/ q% {PX,Y=cov(X,Y)σXσYPX,Y=cov(X,Y)σXσY
2 z6 J2 A5 @# Z" X9 j! I E) |0 u2.6 Jaccard相似性系数Jaccard(杰卡德)相似性系数主要用于计算符号度量或布尔值度量的样本间的相似度。若样本间的特征属性由符号和布尔值标识,无法衡量差异具体值的大小,只能获得“是否相同”这样一种结果,而Jaccard系数关心的是样本间共同具有的特征。适合词集模型向量化的数据。 4 q2 I! z, |% _1 T
J(X,Y)=|X⋂Y||X⋃Y|J(X,Y)=|X⋂Y||X⋃Y| 回到顶部 3. 总结本文介绍的相似度计算方式,总的来说还是比较简单、易于理解。相似度计算方式的不同对最终结果的影响没有向量化方式不同影响大,但是相似度计算方式不同对计算时间影响比较大。下文将从深度学习的角度介绍文本相似度计算。 3 f/ Z) L/ D! @
3. 文本相似度计算-DSSM算法完整机器学习实现代码GitHub
/ C5 w8 u8 i, ^: ]欢迎转载,转载请注明出处https://www.cnblogs.com/huangyc/p/9794652.html
5 U, M x/ h- L, \2 T/ n欢迎沟通交流: 339408769@qq.com
# t' \$ O1 b* }1 C0. 目录- 1. 前言
- 2. DSSM原理
- 2.1 DSSM架构
- 2.2 DSSM优缺点
w1 ?& ^8 f. {6 f1 t5 S 5 A- h/ s# ~! H: e0 V
) Q3 y& S, R6 L& f* ^7 t
1. 文本相似度计算-文本向量化 2. 文本相似度计算-距离的度量 3. 文本相似度计算-DSSM算法 4. 文本相似度计算-CNN-DSSM算法 回到顶部 1. 前言最近在学习文本相似度的计算,前面两篇文章分别介绍了文本的向量化和文本的距离度量,这两篇文章的思路主要在机器学习的框架下面,本文准备换一个思路,从深度学习的角度来处理文本相似度的问题。 本文介绍DSSM(Deep Structured Semantic Models)深度学习架构。 回到顶部 2. DSSM原理DSSM的原理很简单,通过搜索引擎里Query和Doc的海量的点击曝光日志,用DNN把Query和Doc转化为低纬语义向量,并通过cosine距离来计算两个语义向量的距离,并且根据用户的点击选择Doc当做标签值进行有监督学习,最终训练出语义相似度模型。该模型既可以用来预测两个句子的语义相似度,又可以获得某句子的低纬语义向量表达。 这里的一个重要的概念是低纬语义向量,它的意思是把一句文本通过一定的方式转换到一个固定维度的空间上,这样就可以对不同句子间计算相似度了。然后我们的任务就是需要去找各种方法在尽量保存文本本身信息的情况下,获得一个低维语义向量。AutoEncoder算法也是一种获得低纬语义向量的方法。
5 u' ^/ u$ v* `2.1 DSSM架构DSSM的架构图如下所示:
t- z: }2 W& c9 J$ s! [5 P) ^4 {我们从下到上的看数据流动的过程。 输入数据:QQ代表用户的输入,DiDi代表比对的第ii个文档。 - Term Vector层可以理解为输入层,我们简单的理解成把文本做one-hot处理后的词向量。这一层的矩阵维度在50W左右,矩阵太大,并且太稀疏,不容易训练。
- Word Hashing层可以理解为数据预处理层,这一层主要是通过n-gram的方式降低矩阵维度。举个例子,假设用letter-trigams来切分单词(3个字母为一组,#表示开始和结束符),boy这个单词会被切为#-b-o,b-o-y,o-y-#。这样做的好处有两个:首先是压缩空间,50万w个词的one-hot向量空间可以通过letter-trigram压缩为一个3w维的向量空间。其次是增强范化能力,三个字母的表达往往能代表英文中的前缀和后缀,而前缀后缀往往具有通用的语义,在通过BOW对文本向量化。
6 H: W! v! b+ V" D3 a
这里之所以用 3 个字母的切分粒度,是综合考虑了向量空间和单词冲突: . D% S( L5 F6 S) N, w, b m+ ]
以50w个单词的词库为例,Bigram的切分粒度的单词冲突为1192(冲突的定义:至少有两个单词的letter-bigram向量完全相同),而TriGram的单词冲突降为22效果很好,且转化后的向量空间3w维不是很大,综合考虑选择TriGram的切分粒度。
' h F" _9 c! a- ~# XP(D|Q)=exp(γR(Q,D))∑di∈Dexp(γR(Q,D))P(D|Q)=exp(γR(Q,D))∑di∈Dexp(γR(Q,D)) - softmax层把计算出的概率进行归一化输出。
1 n0 v% z' l) g& |0 _# p$ E
最终的loss是 B1 J" y* Y9 \4 h- _8 @ E( e
L(Λ)=−log∏(Q,D+)P(D+|Q)L(Λ)=−log∏(Q,D+)P(D+|Q) + c/ t- z% ?$ \
2.2 DSSM优缺点从整体上看,DSSM还是对传统的机器学习和深度学习的方法进行了组合,先用n-gram进行矩阵压缩,再通过DNN网络进一步压缩,再通过cosine计算相似度,softmax输出归一化的相似度概率。 - 优点:
1 e' M6 v R4 D6 I% E, Y
- DSSM 用字向量作为输入既可以减少切词的依赖,又可以提高模型的范化能力,因为每个汉字所能表达的语义是可以复用的。
- 传统的输入层是用Embedding的方式(如Word2Vec的词向量)或者主题模型的方式(如LDA的主题向量)来直接做词的映射,再把各个词的向量累加或者拼接起来,由于Word2Vec和LDA都是无监督的训练,这样会给整个模型引入误差,DSSM采用统一的有监督训练,不需要在中间过程做无监督模型的映射,因此精准度会比较高。
& z8 L8 t3 A4 v. n7 \1 X$ V* q' r
- 上文提到 DSSM 采用词袋模型(BOW),因此丧失了语序信息和上下文信息。
- DSSM采用的是端到端的模型,预测结果不可控。
- DSSM是弱监督模型,因为引擎的点击曝光日志里Query和Doc的语义信息比较弱。首先搜索引擎有自己的排序算法,排序算法决定了那些Doc显示在第一页。因为第一页的被点击率大大大于后面的Doc的点击率。所以用户点击第一页的概率的置信度不是太高。
! s7 p( m+ T# ]( o3 c. g& @ 3 P2 K; P& Q" x0 D& y" R
0 S1 C3 G! d$ w8 o1 |" _: h+ d) i |