语义相似度度量

在比较两个文本语义是否相同的时候,通常的做法是

  1. 使用传统方法:one-hot word vector -> tf-idf/BM25 加权 -> 使用欧式距离或者cosine相似系数
  2. 使用深度学习方法:
    a. 得到词的embedding,对词的embedding做(加权)平均得到句子向量,再用度量方法;
    b. 借助深度模型得到句子的embedding,在句子语义层面上使用度量方法。

下面主要讨论深度学习中欧式距离和cosine相似系数的一些度量方法
主要参考自: Wang S, Jiang J. A compare-aggregate model for matching text sequences[J]. arXiv preprint arXiv:1611.01747, 2016.


这篇论文解决的问题是句子匹配任务, 作者搭建了一个模型,并且重点比较了几种相似度度量方法
先大致说一下这个模型,感兴趣的可以看原文和相关分析,分为四个步骤:

  1. Preprocess, 对原始的问题和答案进行预处理,使每个词获得句子的上下文信息,使用的是只保留了输入门的lstm;
  2. Attention, 传统的attention机制,用问题对答案加attention
  3. Comparison,整合,用于比较相似度
  4. Aggregation,结合CNN,构建输出网络

下面主要说一下两个vector的整合方式:

  1. NN: 就是将两个向量拼接起来,然后过一层神经网络;


  2. Euc+Cos: 计算两个向量的欧式距离以及它们的余弦相似度,再把两者的结果拼接起来。


  3. Sub/Mult : 两个向量按位减后乘或者直接相乘


  4. Sub/Mult + NN:在3的基础上将二者拼起来,接一个NN


  5. NTN: neural tensor network,张量网络,能比较好的获得词向量间交叉乘积的能力,不过还是element-wise,具体原理可以参考Quora上的回答论文原文


得到的是一个L维的向量,类似于CNN的filter可以定义多个,这里可以理解成定义了多个相乘关系。

实验结果:


可以看到这篇文章的模型在三个数据集上取得了非常好的结果,其中element-wise multiplication相关的方式是比较好的comparison function,比我们之前常用的余弦相似度,欧氏距离等要高出不少。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 关注和概要用神经注意的共同学习 摘要 询问相关排序和句子显著排序是两个主要的任务在提取询问专注概要。 之前的监督概...
    __子不语__阅读 4,533评论 0 0
  • 前面的文章主要从理论的角度介绍了自然语言人机对话系统所可能涉及到的多个领域的经典模型和基础知识。这篇文章,甚至之后...
    我偏笑_NSNirvana阅读 14,803评论 2 64
  • 每天进步一点点 坚持带来大改变 当你坐在办公室正专心致志用手机完成工作时,突然老板走进办公室看到你拿...
    Cicily_阅读 1,688评论 0 1
  • 由于之前年少无知,在代码正式运行的环境中,犯过很多的严重错误。所庆幸的是,这些严重的错误并没有给之前服务的公司带来...
    ankerjian阅读 4,077评论 0 2
  • 挖石油,挖出东西来。石油,远古之血。 环保 魔力海,海水有毒, 归来,多玩玩, 博物馆, 游记 昆仑山,大河灵秀峰
    plantAtree_dAp阅读 1,319评论 4 0

友情链接更多精彩内容