NLP的发展

  • NLP中监督任务的基本套路都可以用三个积木来进行归纳:
    文本数据搜集和预处理
    将文本进行编码和表征
    设计模型解决具体任务

1.1 语言模型

  • 对于语言序列,计算该序列出现的概率。
  • 马尔科夫假设:一个词出现的概率只与它前面出现的一个或几个词有关。(n-gram模型)
  • 存在的问题:
    参数空间过大。条件概率P的可能性太多。
    数据稀疏严重。很多词的组合语料库中没有出现,概率为0.

1.2 NNLM(Neural Net Language Model, 神经网络语言模型)

  • 利用前N-1个词去预测第N个词。
  • 可以将NNLM的网络结构拆分为三个部分: 第一部分,从词到词向量的映射,通过C矩阵完成映射,参数个数为 |V| * m; 第二部分,从x到隐藏层的映射,通过矩阵H,这里的参数个数为 |H| * m * (n-1); 第三部分,从隐藏层到输出层的映射,通过矩阵U,参数个数为|V| * |H| 第四部分,从x到输出层的映射,通过矩阵W,参数个数为|V| * m * (n-1);
  • NNLM的最主要贡献是非常有创见性的将模型的第一层特征映射矩阵当做词的分布式表示,从而可以将一个词表征为一个向量形式,这直接启发了后来的word2vec的工作。
  • 存在的问题:NNLM只用了左边的n-1个词,没有利用更多的上下文信息。输出层计算量太大。

2.1 CBOW和Skip-gram

  • word2vec并不是一个模型或算法,只是一个工具,它只有两层全连接,背后的模型是CBOW或者Skip-gram,并且使用了Hierarchical Softmax或者Negative Sampling这些训练的优化方法。
  • 优化:模型的简化和训练技巧的优化。
  • CBOW是让目标词的输出向量e’(w)拟合语境的向量x;而Skip-gram则是让语境中每个词的输出向量尽量拟合当前输入词的向量e(w)。
  • 利用预训练好的词向量来初始化网络结构的第一层几乎已经成了标配,尤其是在只有少量监督数据的情况下,如果不拿预训练的embedding初始化第一层,几乎可以被认为是在蛮干。

2.2 GloVe

  • 它的训练主要是两个步骤:统计共现矩阵和训练获取词向量。它整个的算法框架都是基于矩阵分解的做法来获取词向量的,本质上和诸如LSA这种基于SVD的矩阵分解方法没有什么不同。
  • 相比word2vec,GloVe却更加充分的利用了词的共现信息。

2.3 fastText

  • word2vec和GloVe都不需要人工标记的监督数据,只需要语言内部存在的监督信号即可以完成训练。而与此相对应的,fastText则是利用带有监督标记的文本分类数据完成训练.
  • 模型框架是CBOW,不过与普通的CBOW有两点不一样,分别是输入数据和预测目标的不同。在输入数据上,CBOW输入的是一段区间中除去目标词之外的所有其他词的向量加和或平均,而fastText为了利用更多的语序信息,将bag-of-words变成了bag-of-features;第二个不同在于,CBOW预测目标是语境中的一个词,而fastText预测目标是当前这段输入文本的类别,正因为需要这个文本类别,因此才说fastText是一个监督模型。而相同点在于,fastText的网络结构和CBOW基本一致,同时在输出层的分类上也使用了Hierachical Softmax技巧来加速训练。
  • fastText最大的特点在于快

3.1 PV-DM和PV-DBOW

  • PV-DM的全称是Distributed Memory Model of Paragraph Vectors,是通过上下文预测下一个词,不过在输入层的时候,同时也维护了一个文档ID映射到一个向量的look-up table.
  • DBOW的全称则是Distributed Bag of Words version of Paragraph Vector,和Skip-gram类似,通过文档来预测文档内的词,训练的时候,随机采样一些文本片段,然后再从这个片段中采样一个词,让PV-DBOW模型来预测这个词,以此分类任务作为训练方法。

3.2 Skip-thoughts

  • Skip-thoughts直接在句子间进行预测,也就是将Skip-gram中以词为基本单位,替换成了以句子为基本单位,具体做法就是选定一个窗口,遍历其中的句子,然后分别利用当前句子去预测和输出它的上一句和下一句。对于句子的建模利用的RNN的sequence结构,预测上一个和下一个句子时候,也是利用的一个sequence的RNN来生成句子中的每一个词,所以这个结构本质上就是一个Encoder-Decoder框架,只不过和普通框架不一样的是,Skip-thoughts有两个Decoder.

3.3 Quick-thoughts

  • 把同一个上下文窗口中的句子对标记为正例,把不是出现在同一个上下文窗口中的句子对标记为负例,并将这些句子对输入模型,让模型判断这些句子对是否是同一个上下文窗口中,很明显,这是一个分类任务。

3.4 InferSent

  • 先设计一个模型在斯坦福的SNLI(Stanford Natural Language Inference)数据集上训练,尔后将训练好的模型当做特征提取器,以此来获得一个句子的向量表示,再将这个句子的表示应用在新的分类任务上,来评估句子向量的优劣。

3.5 General Purpose Sentence Representation

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

3.6 Universal Sentence Encoder

  • Transformer结构更为复杂,参数更多,训练也相对比较耗时,但是一般来说效果会更好一些;对应的,DAN结构简单,只有两个隐藏层,参数比较少,训练相对比较省时省资源,但是一般来说效果会差一些(论文中也发现某些场景下DAN的效果甚至更好)。然后作者既在无标记数据上训练,也在监督数据上训练,最后在十个分类任务上进行迁移学习的评估。

4.3 ELMo Embeddings from Language Models

  • 是双向语言模型:一般用两个单向的循环神经网络最后的hidden layer向量拼接去预测下一个词。
  • 基本框架是一个双层的Bi-LSTM,不过在第一层和第二层之间加入了一个残差结构.
  • 在原论文中,把这种先经过CNN得到词向量,然后再计算Softmax的方法叫做CNN Softmax,而利用CNN解决有三点优势值得注意,第一是,CNN能够减少普通做Softmax时全连接层中的必须要有的|V|h的参数规模,只需要保持CNN内部的参数大小即可,而一般来说,CNN中的参数规模都要比|V|h的参数规模小得多;另一方面,CNN可以解决OOV (Out-of-Vocabulary)问题,这个在翻译问题中尤其头疼;最后一方面,在预测阶段,CNN对于每一个词向量的计算可以预先做好,更能够减轻inference阶段的计算压力。

4.4 ULMFit

  • ULMFit的预训练和finetune过程主要可以分为三个阶段,分别是在大规模语料集上(比如Wikitext 103,有103million个词)先预训练,然后再将预训练好的模型在具体任务的数据上重新利用语言模型来finetune一下(这是第一次finetune,叫做LM finetune),尔后再根据具体任务设计的一个模型上,将预训练好的模型当做这个任务模型的多层,再一次finetune(这是第二次finetune,如果是分类问题的话可以叫做Classifier finetune)
  • 所使用的模型来自于2017年salesforce发表的一篇论文《Regularizing and Optimizing LSTM Language Models》
  • 调的方法设计的非常精妙。作者提出了几种微调的技巧,它们是:discriminative fine-tuning, slanted triangular learning rates, 以及gradual unfreezing

4.5 GPT

  • GPT本质上就是用了语言模型的目标函数来优化和训练Transformer-Decoder,这个和上文提到过的语言模型保持一致。利用语言模型的目标函数预训练完成后,进阶这便可以在具体的任务上进行finetune,和ULMFiT中的finetune分为两个阶段的方法不一样的是,GPT直接把这两个过程糅合到一个目标函数中。

4.6 Bidirectional Encoder Representations from Transformers(BERT)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值