• 精选
  • 会员

NLP梯子的一级半

2019年3月9日  来源:THU数据派 作者: 提供人:diliang24......

梯子的一级半

除了在 word 级别的 embedding 方法上有大量模型和算法的涌现,同样地,在 char 级别、句子级别和段落级别同样有大量模型提出。

word2vec 开源随后的第一年,也就是在 2014 年,还是 Mikolov,在他和另一位作者合作的一篇论文Distributed Representations of Sentences and Documents?中,提出了可以借鉴 word2vec 思想的两种结构:PV-DM 和 PV-DBOW,分别对应 word2vec 中的 CBOW 和 Skip-gram。

1. PV-DM 和 PV-DBOW

PV-DM 的全称是 Distributed Memory Model of Paragraph Vectors,和 CBOW 类似,也是通过上下文预测下一个词,不过在输入层的时候,同时也维护了一个文档 ID 映射到一个向量的 look-up table,模型的目的便是将当前文档的向量以及上下文向量联合输入模型,并让模型预测下一个词。

训练结束后,对于现有的文档,便可以直接通过查表的方式快速得到该文档的向量,而对于新的一篇文档,那么则需要将已有的 look-up table 添加相应的列,然后重新走一遍训练流程,只不过此时固定好其他的参数,只调整 look-up table,收敛后便可以得到新文档对应的向量了。

PV-DBOW 的全称则是 Distributed Bag of Words version of Paragraph Vector,和 Skip-gram 类似,通过文档来预测文档内的词,训练的时候,随机采样一些文本片段,然后再从这个片段中采样一个词,让 PV-DBOW 模型来预测这个词。

以此分类任务作为训练方法,说白了,本质上和 Skip-gram 是一样的。这个方法有个致命的弱点,就是为了获取新文档的向量,还得继续走一遍训练流程,并且由于模型主要是针对文档向量预测词向量的过程进行建模,其实很难去表征词语之间的更丰富的语义结构,所以这两种获取文档向量的方法都未能大规模应用开来。

深度长文:详细归纳NLP领域中的巨人肩膀

2. Skip-thoughts

2015 年,多伦多大学的 Kiros 等人提出了一个很有意思的方法叫 Skip-thoughts。同样也是借鉴了 Skip-gram 的思想,但是和 PV-DBOW 中利用文档来预测词的做法不一样的是,Skip-thoughts 直接在句子间进行预测,也就是将 Skip-gram 中以词为基本单位,替换成了以句子为基本单位,具体做法就是选定一个窗口,遍历其中的句子,然后分别利用当前句子去预测和输出它的上一句和下一句。

对于句子的建模利用的 RNN 的 sequence 结构,预测上一个和下一个句子时候,也是利用的一个 sequence 的 RNN 来生成句子中的每一个词,所以这个结构本质上就是一个 Encoder-Decoder 框架,只不过和普通框架不一样的是,Skip-thoughts 有两个 Decoder。

在今天看来,这个框架还有很多不完善或者可以改进的地方(作者也在论文中分别提到了这些 future works),比如输入的 Encoder 可以引入 attention 机制,从而让 Decoder 的输入不再只是依赖 Encoder 最后一个时刻的输出;Encoder 和 Decoder 可以利用更深层的结构;Decoder 也可以继续扩大,可以预测上下文中更多的句子;RNN 也不是唯一的选择,诸如 CNN 以及 2017 年谷歌提出的 Transformer 结构也可以利用进来,后来果不其然谷歌的 BERT 便借鉴了这一思路,当然这是后话了,留下暂且不表。深度长文:详细归纳NLP领域中的巨人肩膀

3. Quick-thoughts

2018 年的时候,在 Skip-thoughts 的基础上,Google Brain 的 Logeswaran 等人将这一思想做了进一步改进,他们认为 Skip-thoughts 的 Decoder 效率太低,且无法在大规模语料上很好的训练(这是 RNN 结构的通病)。

所以他们把 Skip-thoughts 的生成任务改进成为了一个分类任务,具体说来就是把同一个上下文窗口中的句子对标记为正例,把不是出现在同一个上下文窗口中的句子对标记为负例,并将这些句子对输入模型,让模型判断这些句子对是否是同一个上下文窗口中,很明显,这是一个分类任务。可以说,仅仅几个月之后的 BERT 正是利用的这种思路。而这些方法都和 Skip-thoughts 一脉相承。

深度长文:详细归纳NLP领域中的巨人肩膀

3. InferSent

除了 Skip-thoughts 和 Quick-thoughts 这两种不需要人工标记数据的模型之外,还有一些从监督数据中学习句子表示的方法。

比如 2017 年 Facebook 的研究人员 Conneau 等人提出的 InferSent 框架,它的思想特别简单,先设计一个模型在斯坦福的 SNLI(Stanford Natural Language Inference)数据集上训练,而后将训练好的模型当做特征提取器,以此来获得一个句子的向量表示,再将这个句子的表示应用在新的分类任务上,来评估句子向量的优劣。框架结构如下图所示:

深度长文:详细归纳NLP领域中的巨人肩膀

这个框架最底层是一个 Encoder,也就是最终要获取的句子向量提取器,然后将得到的句子向量通过一些向量操作后得到句子对的混合语义特征,最后接上全连接层并做 SNLI 上的三分类任务。

做过句子匹配任务的一定知道,这个框架是一个最基本(甚至也是最简陋)的句子匹配框架。对于底层的 Encoder 来说,论文作者分别尝试了 7 种模型,然后分别以这些模型作为底层的 Encoder 结构在 SNLI 上进行监督训练。

训练完成后,在新的分类任务上进行评估,最后发现当 Encoder 使用 BiLSTM with max pooling 结构时,对于句子的表征性能最好。对具体细节感兴趣的可以参考他们的论文Supervised Learning of Universal Sentence Representations from Natural Language Inference Data。

4. General Purpose Sentence Representation

此外,除了 InferSent 这种单个任务的监督学习外,最新的工作逐渐将多任务的联合学习应用到获取句子的表征中。

例如 Subramanian 等人发表在 ICLR 2018 上的 Learning General Purpose Distributed Sentence Representations via Large Scale Multi-task Learning,就提出了利用四种不同的监督任务来联合学习句子的表征,这四种任务分别是:Natural Language Inference,Skip-thougts,Neural Machine Translation 以及 Constituency Parsing 等。

作者的出发点也特别简单,通用的句子表征应该通过侧重点不同的任务来联合学习到,而不是只有一个特定任务来学习句子表征,后来作者在论文中的实验也确实证明了这点。

实验的具体做法是,先用联合学习的方法在上述四个任务上进行训练,训练结束后,将模型的输出作为句子的表征(或者把这个联合学习的模型作为特征提取器),然后直接在这个表征上接上非常简单的全连接层做分类器,并且同时保证最底层的特征提取器中参数不动(也就是只把它当做特征提取器),再在新的分类任务上做训练(只训练最后接上的全连接层分类器),最后根据训练出来的简单分类器在各自分类任务的测试集上做评估。

最后作者惊喜的发现很多任务上他们的简单分类器都要超过当时的最好结果,并且他们还发现联合训练中不同的任务对于句子表征中的不同方面有不同的贡献。

5. Universal Sentence Encoder

同样在 2018 年,谷歌的 Daniel Cer 等人在论文 Universal Sentence Encoder 中提出的思路基本和 General Purpose Sentence Representation 的工作一样,只不过作者提出了利用 Transformer 和 DAN(上文提到过的和 CBOW 与 fastText 都神似的 Deep Unordered Composition Rivals Syntactic Methods for Text Classification)两种框架作为句子的 Encoder。

Transformer 结构更为复杂,参数更多,训练也相对比较耗时,但是一般来说效果会更好一些。对应的,DAN 结构简单,只有两个隐藏层(甚至可以减小为只需要一个隐藏层),参数比较少,训练相对比较省时省资源,但是一般来说效果会差一些(并不是绝对,论文中也发现某些场景下 DAN 的效果甚至更好)。然后作者既在无标记数据上训练,也在监督数据上训练,最后在十个分类任务上进行迁移学习的评估。此外,作者还放出了他们预训练好的 Encoder,可以供迁移学习的句子特征提取器使用。

预训练 Encoder:https://tfhub.dev/google/universal-sentence-encoder/2
深度长文:详细归纳NLP领域中的巨人肩膀

深度长文:详细归纳NLP领域中的巨人肩膀

— 完 —

NLP / 机器学习 / word2vec

如涉及版权,请著作权人与本网站联系,删除或支付费用事宜。

0000