本文是阅读 ICLR 会议论文 “A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SENTENCE EMBEDDINGS” 所作笔记。
论文 GitHub:https://github.com/PrincetonML/SIF
Abstract
本文提出了一种基于无监督学习的 Sentence Embedding
方法,其效果超过了目前(截止论文发表)主流的 Sentence Embedding
方法。流程如下:
- 计算
Word Embedding
,通过对无标签的语料库; - 用加权词向量来表征一个句子;
- 用 PCA/SVD 来改善它们
Introduction
Word Embedding
已经成为了自然语言处理和信息检索中的基石。最近的研究则主要是 Sentence Embedding
,之前已经有很多的研究方法,如词向量的简单组合、CNN、RNN……2016 年 Wieting et al 在 PPDB 上对标准的 Word Embedding
进行修改,训练一个 word averaging model
,但是若无修改的过程,直接对初始的词向量进行平均操作,效果并不好。
本文提出的算法 SIF (smooth inverse frequency)
- 计算词向量的加权平均值: w e i g h t ( w ) = a a + p ( w ) weight(w) = \frac{a}{a+p(w)} weight(w)=a+p(w)a
- common component removal: remove the projection of the average vectors on there first component
优势:
- 领域自适应 well-suited
- 加权方法的健壮性:使用不同语料库的词频并不影响性能
- 通过调整 a 是可以到达最优解的,且选择范围大
Related Work
Word Embeddings
是一种词汇的表示方法。将词汇表示为低维度的连续向量,具有其语义、词汇特征。计算方法:
- internal representations from neural network models of text
- low rank approximation of co-occurrence statistics
Our work:
在 Random Walk 模型中对潜在的变量进行近似推理。
Random Walk:在文章中生成缺失词的产生式模型
Phrase/Sentence/Paragraph embeddings
Our work:
通过 Word Embedding 计算 paraphrastic sentence embedding,并且根据 paraphrase 对 word embedding 更新,初始化和训练过程中均为有监督的。
A Simple Method for Sentence Embedding
潜在变量生成模型(latent variable generative model)假设:语料的生成是一个动态的过程,即第 t 个单词在第 t 步生成。每个单词对应一个 R d R^d Rd 空间里的向量。
单词 w w w 的向量 v w v^w vw与当前时间的 discourse vector c t c^t ct 的内积,,表示着这个单词与整个句子之间的关系。 并且我们假设t时刻观测到单词 w w w 的概率为这个内积的对数线性 (log linear) 关系:
P r [ w e m i t t e d a t t i m e t ∣ c t ] ∝ e x p ( < c t , v w > ) . Pr[w \ emitted \ at \ time \ t \ | c_t] \propto exp(<c_t,v_w>) . Pr[w emitted at time t ∣ct]∝exp(<ct,vw>).
因为 c t c_t ct 是由较小的随机漫步得到的( c t + 1 c_{t+1} ct+1 和 c t c_t ct 只相差一个较小的随机向量),所以相邻的词是由相似的 discourse vector 得到的。同时,偶尔 c t c_t ct 有大的 jump,对 co-occurrence probabilities 影响不大。
通过这种办法生成的单词向量与 Glove 和 word2vec 很像。
Our improved Random Walk model
我们希望定义 sentence embedding
为:对 discourse vector 的最大后验估计(MAP)。因为整个句子中 c t c_t ct 变化很小,为了化简,用 c s c_s cs 代表一个句子中的所有 c t c_t