语义相似度度量

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

  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张图片

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

  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可以定义多个,这里可以理解成定义了多个相乘关系。

实验结果:


语义相似度度量_第2张图片

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

你可能感兴趣的:(语义相似度度量)