论文笔记-sentence embedding

句子的向量表示方法主要分为两类。 一类是通过无监督的方法得到 universal sentence embedding, 另一类是基于特定的任务,有标签的情况下,通过有监督学习得到 sentence embedding.

supervised learning

a structured self-attentive sentence embedding

paper: A Structured Self-attentive Sentence Embedding, ICLR 2017

传统的基于 RNN/LSTM 得到 sentence 的向量表示的方法通常是利用隐藏状态的最后一个状态,或者是所有时间步的隐藏状态,然后采用 sum/average/max pooling 的的方式得到 sentence embedding.

本文使用的方法就是在 LSTM 上加上一层 attention,通过注意力机制自动选择 sentence 中的某些方面,也就是赋予 sentence 中的每一个词一个权重,然后加权求和得到一个 vector. 本文另一个创新点在于,不仅仅得到一个 vector,而是一个 matrix,用来表示一个 sentence 中的不同方面。

Model Architecture:

模型也很简单,输入 sentence n tokens.

word embedding: \(S\in R^{n\times d}\), d 表示词向量维度
\[S=(w_1,w_2,...,w_n)\]

bidirection-LSTM: \(H\in R^{n\times 2u}\), u 表示隐藏状态维度 \[H=(h_1,h_2,...,h_n)\]

single self-attention: \(a\in R^n\), 表示 sentence 中对应位置的权重。与 encoder 之后的 sentence 加权求和得到 attention vector \(m\in R^{2u}\). \[a=softmax(w_{s2}tanh(W_{s1}H^T))\]

r-dim self-attention:有 r 个上述的 attention vector,并转换成矩阵形式,\(A\in R^{n\times r}\) 与 encode 之后的句子表示 H 加权求和得到 embedding matrix \(M\in R^{r\times 2u}\) \[A=softmax(W_{s2}tanh(W_{s1}H^T))\] \[M=AH\]

penalization term

上面模型中使用 r 个 attention,很可能会出现冗余的情况,也就是得到的 r 个 attention vector( 论文中说的是 summation weight vectors) 可能得到的是同一个东西,所以需要 diversity.

The best way to evaluate the diversity is definitely the Kullback Leibler divergence between any 2 of the summation weight vectors. However, we found that not very stable in our case. We conjecture it is because we are maximizing a set of KL divergence (instead of minimizing only one, which is the usual case), we are optimizing the annotation matrix A to have a lot of sufficiently small or even zero values at different softmax output units, and these vast amount of zeros is making the training unstable. There is another feature that KL doesn’t provide but we want, which is, we want each individual row to focus on a single aspect of semantics, so we want the probability mass in the annotation softmax output to be more focused. but with KL penalty we cant encourage that. 一个最直观的方法是 Kullback Leibler divergence,也就是相对熵。因为得到的 attention vector 是一个概率分布 (distribution ), 任意两个分布差异越大,对应的相对熵越大。但是作者实验发现这种方法不稳定,原因作者推测是这里需要最大化的是多个 KL 散度的集合,并且在优化 annotation matrix A 时,在不同的softmax输出单元上有很多足够小甚至零值,而这些大量的零点使得训练不稳定. 另一方面,KL 散度不能 focus on 语义中的单个方面。

针对上面这两点,作者提出了一个新的正则项: \[P=||(AA^T-I)||^2_{F}\] \(AA^T\) 是协方差矩阵,对角线元素是同一向量的内积,非对角线元素不同向量的内积。将其作为惩罚项加到 original loss 上,期望得到的是不同 vector 内积越小越好(内积越小,差异越大),并且向量的模长越大越好(概率分布更集中于某一两个词)。

最终得到矩阵级别的句子向量表示。

training

3 different datasets:
- the Age dataset
- the Yelp dataset
- the Stanford Natural Language Inference (SNLI) Corpus

根据不同的任务有监督的训练。

unsupervised learning

sent2vec

paper: Unsupervised Learning of Sentence Embeddings using Compositional n-Gram Features