2. 文本相似度计算-距离的度量
完整机器学习实现代码GitHub
欢迎转载,转载请注明出处https://www.cnblogs.com/huangyc/p/9786731.html
欢迎沟通交流: 339408769@qq.com
0. 目录
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的相似性。常用的方法如下:
2.1 余弦相似度
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。适合word2vec模型向量化的数据。
cosθ=∑ni=1xi∗yi∑ni=1x2i∑ni=1y2i−−−−−−−−−−−−−√cosθ=∑i=1nxi∗yi∑i=1nxi2∑i=1nyi2
2.2 欧式距离
欧氏距离是最常用的距离计算公式,衡量的是多维空间中各个点之间的绝对距离,当数据很稠密并且连续时,这是一种很好的计算方式。
因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,如在KNN中需要对特征进行归一化。
d=∑i=1n(xi−yi)2−−−−−−−−−−√d=∑i=1n(xi−yi)2
2.3 曼哈顿距离
曼哈顿距离简单来说就是统计相同坐标轴上的距离的和。
d=∑i=1n|xi−yi|d=∑i=1n|xi−yi|
2.4 闵可夫斯基距离
大家有没发现欧式距离和曼哈顿距离在形式上比较相近。是的,其实它们是闵可夫斯基距离的特殊化。适合TF-IDF向量化后的数据或者提炼出来的主题模型数据。
d=(∑i=1n(xi−yi)p)1pd=(∑i=1n(xi−yi)p)1p
2.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被称为具有强相关性。
PX,Y=cov(X,Y)σXσYPX,Y=cov(X,Y)σXσY
2.6 Jaccard相似性系数
Jaccard(杰卡德)相似性系数主要用于计算符号度量或布尔值度量的样本间的相似度。若样本间的特征属性由符号和布尔值标识,无法衡量差异具体值的大小,只能获得“是否相同”这样一种结果,而Jaccard系数关心的是样本间共同具有的特征。适合词集模型向量化的数据。
J(X,Y)=|X⋂Y||X⋃Y|J(X,Y)=|X⋂Y||X⋃Y|
3. 总结
本文介绍的相似度计算方式,总的来说还是比较简单、易于理解。相似度计算方式的不同对最终结果的影响没有向量化方式不同影响大,但是相似度计算方式不同对计算时间影响比较大。下文将从深度学习的角度介绍文本相似度计算。
3. 文本相似度计算-DSSM算法
完整机器学习实现代码GitHub
欢迎转载,转载请注明出处https://www.cnblogs.com/huangyc/p/9794652.html
欢迎沟通交流: 339408769@qq.com
0. 目录
1. 前言
最近在学习文本相似度的计算,前面两篇文章分别介绍了文本的向量化和文本的距离度量,这两篇文章的思路主要在机器学习的框架下面,本文准备换一个思路,从深度学习的角度来处理文本相似度的问题。
本文介绍DSSM(Deep Structured Semantic Models)深度学习架构。
2. DSSM原理
DSSM的原理很简单,通过搜索引擎里Query和Doc的海量的点击曝光日志,用DNN把Query和Doc转化为低纬语义向量,并通过cosine距离来计算两个语义向量的距离,并且根据用户的点击选择Doc当做标签值进行有监督学习,最终训练出语义相似度模型。该模型既可以用来预测两个句子的语义相似度,又可以获得某句子的低纬语义向量表达。
这里的一个重要的概念是低纬语义向量,它的意思是把一句文本通过一定的方式转换到一个固定维度的空间上,这样就可以对不同句子间计算相似度了。然后我们的任务就是需要去找各种方法在尽量保存文本本身信息的情况下,获得一个低维语义向量。AutoEncoder算法也是一种获得低纬语义向量的方法。
2.1 DSSM架构
DSSM的架构图如下所示:
我们从下到上的看数据流动的过程。
输入数据: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对文本向量化。
这里之所以用 3 个字母的切分粒度,是综合考虑了向量空间和单词冲突:
以50w个单词的词库为例,Bigram的切分粒度的单词冲突为1192(冲突的定义:至少有两个单词的letter-bigram向量完全相同),而TriGram的单词冲突降为22效果很好,且转化后的向量空间3w维不是很大,综合考虑选择TriGram的切分粒度。
- Multi-layer nonlinear projection这一层就是DNN的处理了。上面的架构图中画了3层DNN结构。做了一个降维操作,3w->300->300->128。
l1=W1xl1=W1x
li=f(Wili−1+bi)li=f(Wili−1+bi)
y=f(WNlN−1+bN)y=f(WNlN−1+bN)
- Relevance层是把Query的向量和Doc中的所有向量做一个cosine的相似度计算。
P(D|Q)=exp(γR(Q,D))∑di∈Dexp(γR(Q,D))P(D|Q)=exp(γR(Q,D))∑di∈Dexp(γR(Q,D))
- softmax层把计算出的概率进行归一化输出。
最终的loss是
L(Λ)=−log∏(Q,D+)P(D+|Q)L(Λ)=−log∏(Q,D+)P(D+|Q)
2.2 DSSM优缺点
从整体上看,DSSM还是对传统的机器学习和深度学习的方法进行了组合,先用n-gram进行矩阵压缩,再通过DNN网络进一步压缩,再通过cosine计算相似度,softmax输出归一化的相似度概率。
- 优点:
- DSSM 用字向量作为输入既可以减少切词的依赖,又可以提高模型的范化能力,因为每个汉字所能表达的语义是可以复用的。
- 传统的输入层是用Embedding的方式(如Word2Vec的词向量)或者主题模型的方式(如LDA的主题向量)来直接做词的映射,再把各个词的向量累加或者拼接起来,由于Word2Vec和LDA都是无监督的训练,这样会给整个模型引入误差,DSSM采用统一的有监督训练,不需要在中间过程做无监督模型的映射,因此精准度会比较高。
- 缺点:
- 上文提到 DSSM 采用词袋模型(BOW),因此丧失了语序信息和上下文信息。
- DSSM采用的是端到端的模型,预测结果不可控。
- DSSM是弱监督模型,因为引擎的点击曝光日志里Query和Doc的语义信息比较弱。首先搜索引擎有自己的排序算法,排序算法决定了那些Doc显示在第一页。因为第一页的被点击率大大大于后面的Doc的点击率。所以用户点击第一页的概率的置信度不是太高。
4. 文本相似度计算-CNN-DSSM算法
完整机器学习实现代码GitHub
欢迎转载,转载请注明出处https://www.cnblogs.com/huangyc/p/9839091.html
欢迎沟通交流: 339408769@qq.com
0. 目录
1. 前言
之前介绍了DSSM算法,它主要是用了DNN的结构来对数据进行降维度,本文用CNN的结构对数据进行降维。
2. CNN-DSSM
CNN-DSSM在DSSM的基础上改进了数据的预处理和深度
2.1 CNN-DSSM架构
CNN-DSSM的架构图如下:
输入:QueryQuery是代表用户输入,documentdocument是数据库中的文档。
- word-n-gram层:是对输入做了一个获取上下文信息的窗口,图中是word-trigram,取连续的3个单词。
- Letter-trigram:是把上层的三个单词通过3个字母的形式映射到3w维,然后把3个单词连接起来成9w维的空间。
- Convolutional layer:是通过Letter-trigram层乘上卷积矩阵获得,是普通的卷积操作。
- Max-pooling:是把卷积结果经过池化操作。
- Semantic layer:是语义层,是池化层经过全连接得到的。
获得128维的语义后就可以计算文本之间的相似度了,计算相似度的过程和DNN-DSSM的过程是一样的。可以发现CNN-DSSM和DNN-DSSM基本流程是差不多的,就是用卷积和池化的操作代替了DNN的操作。
2.2 优缺点
-
优点:CNN-DSSM 通过卷积层提取了滑动窗口下的上下文信息,又通过池化层提取了全局的上下文信息,上下文信息得到较为有效的保留。
-
缺点:CNN-DSSM 滑动窗口(卷积核)大小的限制,导致无法捕获该上下文信息,对于间隔较远的上下文信息,难以有效保留。
3. 总结
CNN-DSSM的结构可分为数据预处理(把文本向量化),在经过深度神经网络,压缩矩阵,最后拿压缩后的矩阵进行相似度计算。和DNN-DSSM相比主要的变化在深度神经网络这一层的处理方式,举一反三那肯定也还有通过RNN来处理数据的过程,RNN-DSSM后面会载讲解。