最后更新于
最后更新于
提出了SIF sentence embedding方法, 作者提供的代码在.
作为一种无监督计算句子之间相似度的方法, sif sentence embedding使用预训练好的词向量, 使用加权平均的方法, 对句子中所有词对应的词向量进行计算, 得到整个句子的embedding向量. 再使用句子向量进行相似度的计算.
在这篇论文之前, 也有与这篇文章思路非常相近的思路, 即都是使用词向量, 通过平均的方法得到句子向量, 只是在加权时权重计算方法上有区别. 具体来说有:
对句子中所有单词直接求平均, 每个单词的权重相同, 得到sentence embedding
使用每个词的TF-IDF值为权重, 加权平均, 得到sentence embedding
这篇论文使用smooth inverse frequency, sif作为每个单词的权重, 代替TF-IDF值, 获得了更好的效果. 除了使用新的词权重计算方法, 还在加权平均后, 减掉了principal component, 最终得到句子的embedding.
另外论文中还提到了这种方法的鲁棒性:
使用不同语料(多种领域)训练得到的不同的word embedding, 均取得了很好的效果, 说明了对各种语料的友好.
使用不同语料得到的词频, 作为计算词权重的因素, 对最终的结果影响很小.
对于方法中的超参数, 在很大范围内, 获得的结果都是区域一直的, 即超参数的选择没有太大的影响.
首先从潜变量生成模型(latent variable generative model)说起. 这个模型假设: 语料的生成是一个动态过程(dynamic process), 即第个单词是在第步生成的.
每个单词对应着一个维的向量. 而这个动态过程是由discourse vector的随机游走驱动的. discourse vector代表着这个句子what is being talked about, 作为潜变量, 代表着句子一个状态, 由于是动态的, 这个状态是随时间变化的, 因此记为.
通过这种办法生成的单词向量, 与word2vec(CBOW)和Glove生成的向量是相似的.
这篇论文对这种模型进行了改进, 加入了两项平滑项, 出于如下的考虑:
有些单词在规定的上下文范围之外出现, 也可能对discourse vector产生影响
有限单词的出现(如常见的停止词)与discourse vector没有关系
取对数, 单个单词记为
最大化上式, 具体的推到在论文中有详述的说明, 最终目标为:
可以得到:
因此可以得到:
最优解为句子中所有单词向量的加权平均
整个算法步骤总结如下图:
单词的向量与当前时间的discourse vector的内积, 表示着这个单词与整个句子之间的关系. 并且我们假设时刻观测到单词的概率为这个内积的对数线性(log linear)关系:
由于是较小幅度的随机游走得到的, 与之间只会差一个较小的随机差向量, 因此相邻的单词是由近似的discourse vector生成得到的. 另外计算表明这种模型的随机游走允许偶尔有较大的jump, 这对共生概率的影响是很小的.
借助上面的模型, 我们希望如下获得一个句子的我sentence embedding: 对discourse vector做最大似然估计. 为了简化, 注意到在整个句子生成单词的过程中, 变化很小, 因此我们将所有步的discourse vector假设为一个固定的向量. 可证明: 对的最大似然估计就是对所有单词embedding向量的平均.
出于这两点考虑, 引入了两种平滑项, 首先是对数线性模型中的一个累加项(additive term),其中是单词在整个语料中出现的概率(词频角度), 是一个超参数. 这样, 即使和的内积很小, 这个单词也有概率出现.
然后, 引入一个纠正项, common discourse vector, 其意义是句子的最频繁的意义, 可以认为是句子中最重要的成分, 常常可以与语法联系起来. 文章中认为对于某个单词, 其沿着方向的成分较大(即向量投影更长), 这个纠正项就会提升这个单词出现的概率.
校正后, 对于给定的discourse vector, 单词在句子中出现的概率为:
其中, , 和都是超参数, 是归一化常数. 从公式中可以看出, 一个与没有关系的单词, 也可以在句子中出现, 原因有:
来自项的数值
与common discourse vector 的相关性
句子向量就是上述模型中的, 使用最大似然法估计向量. 首先假设所有单词的向量是大致均匀分布在整个向量空间上的, 因此这里的归一化项对于不同的句子值都是大致相同的, 即对于任意的, 值是相同的. 在此前提下, 得到似然函数:
对于词频更高的单词, 权值更小, 因此这种方法也等同于下采样频繁单词
最后, 为了得到最终的句子向量, 我们需要估计. 通过计算向量的first principal component(PCA中的主成分), 将其作为. 最终的句子向量即为减去主成份向量.