神经翻译笔记3扩展e第4部分. 文档的简单分布式表示
词的嵌入表示可以看作是深度学习时代自然语言处理的基石,但是自然语言处理的核心任务还是要处理更高级的语言结构,例如句子和文档。在获得了词的分布式表示以后,人们很自然地会思考如何对句子和文档也获得类似的表示结果。本文将介绍一些不涉及到更复杂网络结构(例如RNN)的句子/文档表示方法,其它更高级的方法将在介绍RNN之后引入
本文各节所引图片如未经说明均来自于该节所介绍方法的原始论文
基于词向量的简单池化
[shen2018]认为基于CNN或RNN的模型表示能力更强,但是计算量更大,而简单的基于词向量的模型(Simple Word-Embedding-based Model, SWEM)则正好相反。文章通过实验发现,对于某些任务,SWEM方法已经足够,甚至表现更好
假设文本序列(可以是句子或文档)为 X = ( w 1 , w 2 , … , w L ) X = (w_1, w_2, \ldots, w_L) X=(w1,w2,…,wL),其中 w i w_i wi为第 i i i个位置上的单词。令 v 1 , v 2 , … , v L \boldsymbol{v}_1, \boldsymbol{v}_2, \ldots, \boldsymbol{v}_L v1,v2,…,vL为对应的词向量, v l ∈ R K \boldsymbol{v}_l \in \mathbb{R}^K vl∈RK,得到的句子/文档的定长向量表示记为 z \boldsymbol{z} z,则本文提出的SWEM方法包括
- 平均池化SWEM-aver,即 z = 1 L ∑ i = 1 L v i \boldsymbol{z} = \frac{1}{L}\sum_{i=1}^L \boldsymbol{v}_i z=L1∑i=1Lvi。对于该方法,每个词的词向量都对最后的模型有贡献
- 最大池化SWEM-max,即 z = M a x - p o o l i n g ( v 1 , v 2 , … , v L ) \boldsymbol{z} = {\rm Max{\text -}pooling}(\boldsymbol{v}_1, \boldsymbol{v}_2 ,\ldots, \boldsymbol{v}_L) z=Max-pooling(v1,v2,…,vL)。其中 z i = max { v 1 i , v 2 i , … , v L i } z_i = \max\{v_{1i}, v_{2i}, \ldots, v_{Li}\} zi=max{v1i,v2i,…,vLi}。此时,对给定任务不重要或不相关的单词会在编码过程被忽略掉
- 池化连接SWEM-concat,即将平均池化和最大池化得到的两个向量连接起来,组成一个新的向量
- 分层池化SWEM-hier。前两种方法都没有考虑词序信息/空间信息,而词序信息对NLP问题是非常关键的。因此本文提出了一种分层池化方法。令 v i : i + n − 1 v_{i:i+n-1} vi:i+n−1是从 v i v_i vi开始的连续 n n n个单词,则首先对该窗口的词向量做平均池化,然后对得到的所有窗口的平均向量做一个全局的最大池操作,就可以保留原始文本序列的空间信息了。此时每个窗口可以看做是一个N元语法中的N元组
文章在如下问题上做了若干实验,并与CNN和LSTM模型作比较
- 文档分类,包括三类问题:主题分类、情感分析和知识(本体)分类。结果表明,在预测文档主题时,SWEM方法效果优异,基于词向量连接的方法甚至超过了一个有29层的CNN模型。对知识分类也是如此。此外,更值得注意的是,SWEM的参数数量是LSTM模型的三十分之一,是CNN模型的九分之一;速度是CNN模型的3倍,是LSTM模型的10倍。但是在做情感分析时,SWEM的效果比较差,原因推测是因为情感分析需要捕捉词序信息
文章注意到SWEM-max模型会得到比较稀疏的词向量,即该模型可能只依赖于若干个关键字。将得到的词向量按各个维度选出该维度值最大的五个词,可以大致看出每个维度能对应上一个主题,这也印证了作者的猜测 - 文本序列建模,包括三类问题:自然语言推理、答句选择和复述判别。除了问答任务,SWEM方法都能达到与SOTA(State-of-the-art)媲美的效果,而且SWEM-max的表现尤其出色。这从侧面说明词序信息在预测句子间关系时起的作用可能更小
为了验证这一猜测,文章将训练集中每句的词序打乱,来移除训练集中的词序特征。实验结果表明,用打乱词序的数据集训练的LSTM在主题抽取和文字蕴含任务上效果变化不大,仅在情感分析上有明显下跌。这进一步证明对情感分析来说词序是非常重要的。另外,使用此方法得到的LSTM效果与SWEM类似,这说明LSTM和SWEM的主要区别就是前者能把握词序信息。作者在情感分析使用的Yelp数据集上训练了SWEM-hier模型,得到了与LSTM和深层CNN类似的效果,也说明这种方法可以捕捉词序信息 - 短句处理,包括三类问题:情感分类、主题分类和问题分类。SWEM在情感分类上效果明显不好,但是在其它两个问题上还是能和LSTM或CNN一战。此外,SWEM在序列标注任务上效果也差一些。这意味着SWEM从短句抽取信息的能力有限,可能是因为对于短句词序更重要。同时,由于在小数据集上更容易过拟合,因此如何使用一种合适的正则化手段也是值得关注的问题
此外,文章在一些中文语料上也做了测试,发现SWEM-hier效果拔群。这意味着中文的词序比英文更重要
Doc2vec
在提出word2vec以后,Mikolov团队在次年(2014年)使用类似的方法提出了将文档/句子向量化表示的方法doc2vec [le2014],并将该方法得到的文档向量称为“段向量”(paragraph vector,尽管实际上这个“段”可以是一个句子,若干个句子甚至一整篇文章)。训练段向量需要一个随机初始化的文档矩阵 D ∈ R N × p \boldsymbol{D} \in \mathbb{R}^{N \times p} D∈RN×p,其中 N N N是经过去重的文档数, p p p是段向量维度;以及一个随机初始化的单词矩阵 W ∈ R M × q \boldsymbol{W} \in \mathbb{R}^{M \times q} W∈RM×q,其中 M M M是经过去重的单词数, q q q是词向量维度。具体的训练方法有两种:
-
分布式内存的段向量(paragraph vector with distributed memory, PV-DM)先设置一个窗口 k k k,然后对每个窗口,聚合各文档对应的向量 d \boldsymbol{d} d和窗口内前 k − 1 k-1 k−1个单词的词向量 w 1 , … , w k − 1 \boldsymbol{w}_1, \ldots, \boldsymbol{w}_{k-1} w1,…,wk−1,预测接下来出现的单词 w k w_k wk。具体的聚合方法可以随意选择,常见的是求均值或者将其直接连接。反向传播会更新 d \boldsymbol{d} d和 w 1 , … , w k − 1 \boldsymbol{w}_1, \ldots, \boldsymbol{w}_{k-1} w1,…,wk−1。不同的文档共享相同的词向量,但是不同的文档对应的文档向量也不同
例如,对于两个文档(这里是句子)“I have a pen”和“I have an apple”,两者各自有一个独特的标识符(假设分别为58和76)。对于具体单词,两句中的I、have标识符都一样。假设ID化以后为:文档58包含单词4 10 5 96,文档76包含单词4 10 101 80。假设窗口为3,那么模型的预测任务就是
d 58 , w 4 , w 10 → w 5 d 58 , w 10 , w 5 → w 96 d 76 , w 4 , w 10 → w 101 d 76 , w 10 , w 101 → w 80 \begin{aligned} d_{58}, w_4, w_{10} &\rightarrow w_5 \\ d_{58}, w_{10}, w_5 &\rightarrow w_{96} \\ d_{76}, w_4, w_{10} &\rightarrow w_{101} \\ d_{76}, w_{10}, w_{101} &\rightarrow w_{80} \end{aligned} d58,w4,w10d58,w10,w5d76,w4,w10d76,w10,w101→w5→w96→w101→w80
具体实现时,可能不会对每个文档的每个窗口都设置成一条训练数据 -
分布式词袋的段向量(paragraph vector with distributed bag of words, PV-DBOW)也会设置一个窗口 k k k,而训练任务是直接使用段向量来预测窗口中的词,即此时词向量不参与输入。类似地,具体实现时,可能不会对窗口中的每个词都设置成一条训练数据
获取段向量以后,常见的应用是将其用到下游任务,作为一个特征使用。但有时模型也需要做一些推断操作,例如对一个新的,未见过的文档,判断其与训练集中哪个句子最相似。此时要获得新文档的向量表示也是使用反向传播,学习出该文档的向量。具体做法是先随机初始化一个文档向量,然后用PV-DM或PV-DBOW的方法训练,不过此时词向量矩阵和隐藏层权重都保持不变(因此训练时单词词向量也不变)
文章同时观察到了以下现象:
- PV-DM的表现始终比PV-DBOW要好,将两者组合则更好
- PV-DM训练时将向量连接起来更好,比对向量求和要好
- 窗口大小设为5-12为佳
参考文献
[lai2016] Lai, S., Liu, K., He, S., & Zhao, J. (2016). How to generate a good word embedding. IEEE Intelligent Systems, 31(6), 5-14.
[shen2018] Shen, D., Wang, G., et al. (2018). Baseline Needs More Love: On Simple Word-Embedding-Based Models and Associated Pooling Mechanisms. In Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), ACL 2018 (Vol. 1, pp. 440-450).
[le2014] Le, Q., & Mikolov, T. (2014, January). Distributed representations of sentences and documents. In International conference on machine learning, ICML 2014 (pp. 1188-1196).
[kusner2015] Kusner, M., Sun, Y., Kolkin, N., & Weinberger, K. (2015, June). From word embeddings to document distances. In International Conference on Machine Learning, ICML 2015 (pp. 957-966).