2. 文本相似度计算-距离的度量

完整机器学习实现代码GitHub
欢迎转载,转载请注明出处https://www.cnblogs.com/huangyc/p/9786731.html
欢迎沟通交流: 339408769@qq.com


0. 目录

  • 1. 前言
  • 2. 相似度计算方式
    • 2.1 余弦相似度
    • 2.2 欧式距离
    • 2.3 曼哈顿距离
    • 2.4 闵可夫斯基距离
    • 2.5 皮尔森相关系数(pearson)
    • 2.6 Jaccard相似性系数
  • 3. 总结

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的相似性。常用的方法如下:

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. 前言
  • 2. DSSM原理
    • 2.1 DSSM架构
    • 2.2 DSSM优缺点

1. 文本相似度计算-文本向量化

2. 文本相似度计算-距离的度量

3. 文本相似度计算-DSSM算法

4. 文本相似度计算-CNN-DSSM算法

回到顶部

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输出归一化的相似度概率。

  • 优点:
  1. DSSM 用字向量作为输入既可以减少切词的依赖,又可以提高模型的范化能力,因为每个汉字所能表达的语义是可以复用的。
  2. 传统的输入层是用Embedding的方式(如Word2Vec的词向量)或者主题模型的方式(如LDA的主题向量)来直接做词的映射,再把各个词的向量累加或者拼接起来,由于Word2Vec和LDA都是无监督的训练,这样会给整个模型引入误差,DSSM采用统一的有监督训练,不需要在中间过程做无监督模型的映射,因此精准度会比较高。
  • 缺点:
  1. 上文提到 DSSM 采用词袋模型(BOW),因此丧失了语序信息和上下文信息。
  2. DSSM采用的是端到端的模型,预测结果不可控。
  3. DSSM是弱监督模型,因为引擎的点击曝光日志里Query和Doc的语义信息比较弱。首先搜索引擎有自己的排序算法,排序算法决定了那些Doc显示在第一页。因为第一页的被点击率大大大于后面的Doc的点击率。所以用户点击第一页的概率的置信度不是太高。

4. 文本相似度计算-CNN-DSSM算法

完整机器学习实现代码GitHub
欢迎转载,转载请注明出处https://www.cnblogs.com/huangyc/p/9839091.html
欢迎沟通交流: 339408769@qq.com


0. 目录

  • 1. 前言
  • 2. CNN-DSSM
    • 2.1 CNN-DSSM架构
    • 2.2 优缺点
  • 3. 总结

1. 文本相似度计算-文本向量化

2. 文本相似度计算-距离的度量

3. 文本相似度计算-DSSM算法

4. 文本相似度计算-CNN-DSSM算法

回到顶部

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后面会载讲解。

文本相似度计算-度量方法相关推荐

  1. 文本相似度计算基本方法小结

    在计算文本相似项发现方面,有以下一些可参考的方法.这些概念和方法会帮助我们开拓思路. 相似度计算方面 Jaccard相似度:集合之间的Jaccard相似度等于交集大小与并集大小的比例.适合的应用包括文 ...

  2. 最准的中文文本相似度计算工具

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx text2vec, chinese text to vetor.(文本向量化表示工具,包括词向 ...

  3. Google开源word2vec,文本相似度计算工具

    Google开源word2vec,文本相似度计算工具 谷歌已经使用Deep Learning技术开发了许多新方法来解析语言,目前,谷歌开源了一款基于Deep Learning的学习工具--word2v ...

  4. 词向量 文本相似度计算

     一.abstract 为把人们所理解的自然语言让计算机也能够认识并且操作,需要将人的语言(即文字)转换成计算机的语言(即数字) 二 .词的两种表示方法 1.1离散表示(one-hot represe ...

  5. 【相似度计算】详解文本相似度计算(介绍、公式)

    本文收录于<深入浅出讲解自然语言处理>专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅! ​个人主页:有梦想的程序星空 ​个人介绍:小编是人工智能领域硕士,全栈工 ...

  6. nlp中文本相似度计算问题

    文章的目的:文本相似度计算一直是nlp中常见的问题,本文的目标是总结并对比文本相似度计算方法.当然文本的相似度计算会有进一步的应用,比如文本的分类.聚类等. 文章结构:本文先介绍最直接的字面距离相似度 ...

  7. 文本相似度计算python lda_如何识别“答非所问”?使用gensim进行文本相似度计算...

    在文本处理中,比如商品评论挖掘,有时需要了解每个评论分别和商品的描述之间的相似度,以此衡量评论的客观性. 评论和商品描述的相似度越高,说明评论的用语比较官方,不带太多感情色彩,比较注重描述商品的属性和 ...

  8. 如何识别“答非所问”?使用gensim进行文本相似度计算

    在文本处理中,比如商品评论挖掘,有时需要了解每个评论分别和商品的描述之间的相似度,以此衡量评论的客观性. 评论和商品描述的相似度越高,说明评论的用语比较官方,不带太多感情色彩,比较注重描述商品的属性和 ...

  9. 文本相似度计算——Simhash算法(python实现)

    互联网网页存在着大量重复内容,必须有一套高效的去重算法,否则爬虫将做非常多的无用功,工作时效性无法得到保证,更重要的是用户体验也不好.业界关于文本指纹去重的算法众多,如 k-shingle 算法.go ...

  10. 使用BERT做中文文本相似度计算与文本分类

    转载请注明出处,原文地址: https://terrifyzhao.github.io/2018/11/29/使用BERT做中文文本相似度计算.html 简介 最近Google推出了NLP大杀器BER ...

最新文章

  1. 用于文本识别的合成数据生成器
  2. 利用 Chef 在 Red Hat Enterprise Linux 上自动化部署 Mariadb Galera Cluster
  3. python(matplotlib2)——legend图例,Annotation图片注解
  4. Spring手动回滚事务
  5. 预处理命令[#define]说明
  6. $.ajax所犯的错误。success后面不执行
  7. 手机解开加密excel表格xlsx,忘记excel表格xlsx密码如何找回?
  8. Mac 安装Gradle教程
  9. 微信里打开公众号关注页面
  10. 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs
  11. 简单的Java视频播放器
  12. Python入门学习之个人税务计算练习(if)
  13. 财务数据中台架构及建设方案(ppt)
  14. 1.2.2 网络抓包工具之:Fiddler
  15. 提高编程效率的5大VS Code插件
  16. drf 获取域名+端口_如何注册域名(+简单提示可免费获取)
  17. idea创建maven web项目,pom.xml文件一直显示红色
  18. 亚马逊AWS与凯捷、富通云腾、神州泰岳达成战略合作
  19. 360急救箱删除mongodb服务后的修复过程(重建mongodb服务)
  20. 龙芯LS1B处理器使用EJTAG烧录程序步骤,烧录u-boot.bin作为测试(linux系统)

热门文章

  1. java网上销售外文文献_基于java网上购物论文英文的参考文献欣赏
  2. Dnf资源分析与提取工具(附代码)
  3. camtasia studio2022新版本高清录屏编辑无水印
  4. 分布式系统必读中文版-分布式系统模式-分享
  5. 2021 年 五一数学建模比赛 C 题
  6. RS232和RS485的协议原理及应用
  7. 打印机服务器启用后自动关闭,打印机print spooler服务启动后总是自动停止的解决方法(没测试)...
  8. 关于震旦AD248B双面打印
  9. LoRa无线网络技术概述
  10. docker-compose+postsql多容器部署django-vue项目