文本相似度相关工作调研(二)

《Short Text Similarity With Word Embeddings》论文解释

一、概要

​ 本文主要介绍基于词嵌入的短文本相似度计算方法。相比较于其他方法,这种方法的特点在于:

  • 几乎不需要任何外部知识(例如不需要语法分析等)
  • 不需要手工构造特征
  • 此方法计算的是语义相似度,并不是语法或者词型相似度(另一篇文章中提高到LCS、编辑距离等)
  • 能够利用多种方式、多种语料获得的词向量(多种方式:word2vec, GLOVE. 多种语料:Wiki等)

二、主要思想

​ 本文的主要思想是利用获得的词向量提取特征,输入到支持向量机中进行分类。因此,文章的重点也集中在如何根据已有的词向量来获取句子的特征。

  1. 算法伪代码
    文本相似度相关工作调研(二)
    :s1,s212liiwordembeddingsWEiword2vecwikipideafei110mnmnFSVM \begin{aligned} &算法解释:\\ &输入:句子对集合,(s_1,s_2)代表句子1和句子2\\ &输入:标签集合,l_i代表第i个句子对的相关程度(可以是离散的)\\ &输入:word embeddings集合:WE_i可以表示为一种词向量,例如通过word2vec在wikipidea数据上得到的向量\\ &输入:特征提取器,f_{ei}可以理解为一个函数,这个函数的输入是句子对及相应的词向量,输出提取的特征\\ &\quad\quad1-10行,对于每一种词向量(第四行),用所有的特征提取器提取特征(第五行),将得到的结果连接在一起。\\ &因此我们假设如果有m种词向量,n个特征提取器,那么每个句子对就会提取出m*n个特征,然后连接在一起,\\ &放在F矩阵中。\\ &\quad\quad最后一行代表一个分类器,可以选择SVM等。 \end{aligned}

  2. 伪代码中的词向量

    论文中提到可以选择word2vec、GLOVE等已经训练好的词向量,也可以选择这些方法在自己的数据上重新训练。

  3. 伪代码中的特征提取器

    从代码中可以看出,整个算法的难点在于特征提取器(feif_{ei})的构造之上。文章给出了三种特征提取器的构造方法,下面分别介绍。我们应该明确的一点是,特征提取器的目的是从句子对和词向量中提取出句子对的特征,然后用于后续的分类模型之中。

    1. Saliency-weighted semantic network

      文章首先提到有的论文将词向量的均值代表整个句子,既是Svector=1nwordSwordembeddingS_{vector}=\frac{1}{n}\sum_{word\in S}word_{embedding},并且取得了不错的效果。但是这个方法显然并一定是符合真实情况的,以下图为例:
      文本相似度相关工作调研(二)
      黑色圈代表一个句子的三个词向量,白色圈代表另一个句子的三个词向量。两个句子中,有一对词语的差别较大(最左边的白圈和最右边的黑圈)。但是两个句子的均值却非常相近,也就是说均值的作用忽略了句子中个别词向量的极大差异。因此文章提出了一种考虑词语分布的计算方法:在这种方法中,常见词的贡献较少,稀有词的贡献较多(和tfidf方法类似)。具体的计算公式如下:
      fsts=wslIDF(w)sem(w,ss)(k1+1)sem(w,ss)+k1(1b+bssavgsl)sem(w,s)=maxwsfsem(w,w)fsts:w:sl:ss:IDF(w):wtfidfsem(w,ss):wss,wsscosfsemk1,b: \begin{aligned} &f_{sts}=\sum_{w\in s_l}IDF(w)\frac{sem(w,s_s)(k_1+1)}{sem(w,s_s)+k_1(1-b+b\frac{|s_s|}{avgsl})}\\ &sem(w,s)=\max_{w^{'}\in s}f_{sem}(w,w^{'})\\ &符号介绍\\ &f_{sts}:句子对的相似度,也就是提取到的特征\\ &w: 词语\\ &s_l:句子对中比较长的句子\\ &s_s:句子对中比较短的句子\\ &IDF(w):w的文档频率的倒数(参考tfidf的计算方法)\\ &sem(w,s_s):w词语和s_s句子的相似度,采用的计算公式\\&是取w和s_s中各个词语相似度的最大值,至于词语和词语之间的\\&相似度,可以利用cos相似度计算(既是f_{sem})\\ &k_1,b:超参数 \end{aligned}
      这个参考自BM25公式,可以类比一下。关于公式的解释

      • 为什么遍历长句子,而不是短句子

        主要是出于下面考虑。(1)为了保证计算的对称性。计算的对称性,是指句子对中无论第一个是长句子还是短句子,我们都选择以长句子为基准进行遍历,这样(s1,s2)(s_1,s_2)(s2,s1)(s_2,s_1)计算得到的特征就会是相同的。(2)不想有的单词被忽略。以短句为基准进行遍历,有些词语可能不会被遍历到。

      • 和BM25的不同

        BM25的tfidf矩阵主要考虑的是query中词语和document中词语的匹配,而我们则考虑的是语义之间的匹配。sem(w,s)sem(w,s)采用的是w和s的最大相似度,而不仅仅是词语的匹配。

      可以看出,最后的结果是各个值的和。但实际应用的时候,我们并不是选择和值,而是选择向量形式如下:
      fsts[i]=IDF(wi)sem(wi,ss)(k1+1)sem(wi,ss)+k1(1b+bssavgsl) f_{sts}\left[i\right]=IDF(w_i)\frac{sem(w_i,s_s)(k_1+1)}{sem(w_i,s_s)+k_1(1-b+b\frac{|s_s|}{avgsl})}
      假设长句子有n个单词,那么fstsf_{sts}就是一个长度为n的向量。得到这个向量之后,我们再进行bin操作。所谓bin操作,就是划分一个区间,比如[a,b,c],然后统计fstsf_{sts}中位于负无穷到a、a到b、b到c、c到正无穷的数量。例如
      fsts=[2,3,1,4,6,3],[2,4]222122443343461.[2,3,1] \begin{aligned} &f_{sts}=[2,3,1,4,6,3],区间为[2,4]。\\ &则位于负无穷到2(包括2)之间的数有2,1,总共有2个。\\ &位于2到4之间(包括4)的数有3,3,4,总共有3个\\ &位于4到正无穷之间的数有6,总共有1个.\\ &因此最后返回[2,3,1] \end{aligned}
      这样起到了减少特征数目的作用,区间是超参数,需要事先指定。

    2. Unweighted semantic network

      这是第二种提取特征的方法,对于句子对(s1,s2)(s_1,s_2),我们计算句子对中每个词语之间的cos相似度,这样就会得到一个nmn*m的矩阵(其中n=s1,m=s2n=|s_1|,m=|s_2|)。得到这个矩阵之后,我们又构造出两种方法:

      • 考虑所有的nmn*m个元素,然后bin操作,操作方法同上,区间不同而已
      • 矩阵的每一行取最大值,然后得到的最大值进行bin操作

    以上就是算法的全部内容,难点在于特征提取器的构造上。得到特征之后,输入SVM进行分类训练就可以了。

三、实验结果

文本相似度相关工作调研(二)
MSROoB:outoftheboxset,word2vecGlove \begin{aligned}&数据集:MSR\\&OoB:指的是out-of-the-box-set ,也就是训练好的两个word2vec和两个Glove向量。\\\end{aligned}