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

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

一、概要

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

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

二、主要思想

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

  1. 算法伪代码
    文本相似度相关工作调研(二)_第1张图片
    算 法 解 释 : 输 入 : 句 子 对 集 合 , ( s 1 , s 2 ) 代 表 句 子 1 和 句 子 2 输 入 : 标 签 集 合 , l i 代 表 第 i 个 句 子 对 的 相 关 程 度 ( 可 以 是 离 散 的 ) 输 入 : w o r d e m b e d d i n g s 集 合 : W E i 可 以 表 示 为 一 种 词 向 量 , 例 如 通 过 w o r d 2 v e c 在 w i k i p i d e a 数 据 上 得 到 的 向 量 输 入 : 特 征 提 取 器 , f e i 可 以 理 解 为 一 个 函 数 , 这 个 函 数 的 输 入 是 句 子 对 及 相 应 的 词 向 量 , 输 出 提 取 的 特 征 1 − 10 行 , 对 于 每 一 种 词 向 量 ( 第 四 行 ) , 用 所 有 的 特 征 提 取 器 提 取 特 征 ( 第 五 行 ) , 将 得 到 的 结 果 连 接 在 一 起 。 因 此 我 们 假 设 如 果 有 m 种 词 向 量 , n 个 特 征 提 取 器 , 那 么 每 个 句 子 对 就 会 提 取 出 m ∗ n 个 特 征 , 然 后 连 接 在 一 起 , 放 在 F 矩 阵 中 。 最 后 一 行 代 表 一 个 分 类 器 , 可 以 选 择 S V M 等 。 \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} :s1,s212liiwordembeddingsWEiword2vecwikipideafei110mnmnFSVM

  2. 伪代码中的词向量

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

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

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

    1. Saliency-weighted semantic network

      文章首先提到有的论文将词向量的均值代表整个句子,既是 S v e c t o r = 1 n ∑ w o r d ∈ S w o r d e m b e d d i n g S_{vector}=\frac{1}{n}\sum_{word\in S}word_{embedding} Svector=n1wordSwordembedding,并且取得了不错的效果。但是这个方法显然并一定是符合真实情况的,以下图为例:
      文本相似度相关工作调研(二)_第2张图片
      黑色圈代表一个句子的三个词向量,白色圈代表另一个句子的三个词向量。两个句子中,有一对词语的差别较大(最左边的白圈和最右边的黑圈)。但是两个句子的均值却非常相近,也就是说均值的作用忽略了句子中个别词向量的极大差异。因此文章提出了一种考虑词语分布的计算方法:在这种方法中,常见词的贡献较少,稀有词的贡献较多(和tfidf方法类似)。具体的计算公式如下:
      f s t s = ∑ w ∈ s l I D F ( w ) s e m ( w , s s ) ( k 1 + 1 ) s e m ( w , s s ) + k 1 ( 1 − b + b ∣ s s ∣ a v g s l ) s e m ( w , s ) = max ⁡ w ′ ∈ s f s e m ( w , w ′ ) 符 号 介 绍 f s t s : 句 子 对 的 相 似 度 , 也 就 是 提 取 到 的 特 征 w : 词 语 s l : 句 子 对 中 比 较 长 的 句 子 s s : 句 子 对 中 比 较 短 的 句 子 I D F ( w ) : w 的 文 档 频 率 的 倒 数 ( 参 考 t f i d f 的 计 算 方 法 ) s e m ( w , s s ) : w 词 语 和 s s 句 子 的 相 似 度 , 采 用 的 计 算 公 式 是 取 w 和 s s 中 各 个 词 语 相 似 度 的 最 大 值 , 至 于 词 语 和 词 语 之 间 的 相 似 度 , 可 以 利 用 c o s 相 似 度 计 算 ( 既 是 f s e m ) k 1 , 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} fsts=wslIDF(w)sem(w,ss)+k1(1b+bavgslss)sem(w,ss)(k1+1)sem(w,s)=wsmaxfsem(w,w)fsts:w:sl:ss:IDF(w):wtfidfsem(w,ss):wss,wsscosfsemk1,b:
      这个参考自BM25公式,可以类比一下。关于公式的解释

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

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

      • 和BM25的不同

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

      可以看出,最后的结果是各个值的和。但实际应用的时候,我们并不是选择和值,而是选择向量形式如下:
      f s t s [ i ] = I D F ( w i ) s e m ( w i , s s ) ( k 1 + 1 ) s e m ( w i , s s ) + k 1 ( 1 − b + b ∣ s s ∣ a v g s l ) 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})} fsts[i]=IDF(wi)sem(wi,ss)+k1(1b+bavgslss)sem(wi,ss)(k1+1)
      假设长句子有n个单词,那么 f s t s f_{sts} fsts就是一个长度为n的向量。得到这个向量之后,我们再进行bin操作。所谓bin操作,就是划分一个区间,比如[a,b,c],然后统计 f s t s f_{sts} fsts中位于负无穷到a、a到b、b到c、c到正无穷的数量。例如
      f s t s = [ 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 ] \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} fsts=[2,3,1,4,6,3],[2,4]222122443343461.[2,3,1]
      这样起到了减少特征数目的作用,区间是超参数,需要事先指定。

    2. Unweighted semantic network

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

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

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

三、实验结果

文本相似度相关工作调研(二)_第3张图片
数 据 集 : M S R O o B : 指 的 是 o u t − o f − t h e − b o x − s e t , 也 就 是 训 练 好 的 两 个 w o r d 2 v e c 和 两 个 G l o v e 向 量 。 \begin{aligned}&数据集:MSR\\&OoB:指的是out-of-the-box-set ,也就是训练好的两个word2vec和两个Glove向量。\\\end{aligned} MSROoB:outoftheboxset,word2vecGlove

你可能感兴趣的:(NLP)