语言模型论文笔记(一)语言模型 自回归

语言模型 自回归

https://github.com/DengBoCong/nlp-paper

https://github.com/infinitylogesh/mutate

==Sarzynska-Wawer, Justyna, et al. “Detecting formal thought disorder by deep contextualized word representations.” Psychiatry Research 304 (2021): 114135.== citations:10182

知乎:Deep contextualized word representations [文献阅读笔记]

https://sh-tsang.medium.com/review-elmo-deep-contextualized-word-representations-8eb1e58cd25c

思路

  • 提出一种新的深度上下文词表示(word embedding),能够建模

    1. 复杂的语意和语法信息。(比如 句法和语义) ;
    2. 同样的词在不同的语境中含义差距比较大, 所谓一词多义的情况。
  • 提出 ELMo (Embeddings from Language Models) 表示,它并不是学习上下文词向量的方法,而是学习一个网络(biLM)函数,使用bidirectional LSTM 使用包含上下文的整个句子作为语句进行训练和建模;

  • 其高level隐层节点捕捉上下文相关的词义(可以用在语义消歧任务,直接用这部分特征),低level隐层节点捕捉语法的各个方面进行建模(可以用在词性标记);

    我的理解是低level特征更容易捕捉输入的很小范围之间的不同之处,高level特征更容易捕捉上下文,较大范围之间的不同之处(小范围内的不敏感了)

  • 模型特点:(1)深度很深(2)每一层学到的信息可以进行线性组合来适用于不同的下游任务。

  • 效果:下游任务为nlp的六个任务,都是SOTA;

  • ELMo 中 biLM 不同层输出可根据不同的下游任务进行组合。 比如说对于输入序列中的一个词,使用L层的biLM模型映射后就得到一组2L+1种的映射组合:

    $\begin{aligned} R_k &=\left{\mathbf{x}k^{L M}, \overrightarrow{\mathbf{h}}{k, j}^{L M}, \overleftarrow{\mathbf{h}} \frac{L M}{k, j} \mid j=1, \ldots, L\right} \ &=\left{\mathbf{h}_{k, j}^{L M} \mid j=0, \ldots, L\right} \end{aligned}$

  • 表达式为:其中j是不同layer,k是不同token position,s是softmax-normalized weights ,$\gamma$是缩放参数;每层后接layer norm;

    $\mathbf{E} \mathbf{L M} \mathbf{o}k^{\text {task }}=E\left(R_k ; \Theta^{\text {task }}\right)=\gamma^{\text {task }} \sum{j=0}^L s_j^{\text {task }} \mathbf{h}_{k, j}^{L M}$

  • ELMo 的预训练模型结构基本就是一个两层的biLSTM, 每一层包含4096个unit, 每个词会被映射为512维的向量。 特殊的点是在一层和二层之间增加了残差连接。 一旦预训练模型训练好后就可以直接计算词向量用于下游任务,或者进行 fine-tuned用于下游任务。

  • 训练ELMo就也可以当语言模型来训练,拿它的输出来用做语言模型也是可以的;

模型结构

  • 双向biLSTM,使用独立训练的从左到右和从右到左lm的浅级联
  • 目标函数:分别以$\large P(w_i|w_1,…,w_{i-1})$ 和 $\large P(w_i|w_{i+1},…,w_n)$ 作为目标函数,独立训练两个representation然后拼接

==Howard, Jeremy, and Sebastian Ruder. “Universal language model fine-tuning for text classification.” arXiv preprint arXiv:1801.06146 (2018).== citations:2702

开源预训练模型和代码:http://nlp.fast.ai/ulmfit

知乎:NLP之语言模型和迁移学习

思路

  • 提出一种通用的语言模型,微调语言模型来适应下游任务,称为 Universal Language Model Fine-tuning (ULMFiT) ,一种有效的迁移学习方法;

  • 提出保留以前的知识,避免在微调时遗忘原本知识的方法:称为 区分式微调、斜的三角学习率、逐渐冻结。。?discriminative fine-tuning,slanted triangular learning rates, and gradual unfreezing

  • 相关工作:

    • CV领域里的迁移学习:近几年finetune的一种方法是微调预训练模型的最后一/几层,前面层参数不变,来达到下游任务目的;
    • NLP领域里的迁移学习:预训练模型通过其他任务捕获额外上下文的embedding。然后,不同层次的embedding被用作特征,与单词embedding或中间层的输入连接,来达到下游任务目的;该方法称为 hypercolumns
    • Multi-task learning :语言模型作为目标函数之一,和主任务一起联合训练,多任务学习 ;但是MTL每次都要求从头开始训练任务,这使得它效率低下,并且经常需要仔细权衡任务特定的目标函数;
    • Fine-tuning :在语言模型上进行微调,但是如果微调训练数据少,容易过拟合,数据量大,又不容易有那么多数据;
  • ULMFiT:分为三个步骤:

    1. 预训练通用领域的LM;
    2. target task LM fine-tuning;(该步骤运用的trick:Discriminative fine-tuning、Slanted triangular learning rates)
    3. target task下游任务fine-tuning;只更新后接层的参数,前面层参数冻结;(该步骤运用的trick:Discriminative fine-tuning、Slanted triangular learning rates、gradual unfreezing)
image-20220615151145845
  • 文章提出了一些finetune种的训练方法(trick):

    • Discriminative fine-tuning:(不是鉴别性训练),因为不同层提取的特征不同,所以给不同层不同的学习率是比较合适的;经验:finetune时最后一层学习率$\gamma$,其他层学习率$\gamma/2.6$,(其他层学习率小一点,最后一层学习率大一点);

    • Slanted triangular learning rates :因为希望模型尽快收敛,所以修改不同迭代数时的学习率,先增后减;(这个和我之前的想法一样啊,我也觉得finetune需要先增加学习率,训练得比较好,再减小学习率)

      学习率的表示为:T为迭代数,经验:cut_frac = 0.1, ratio = 32 ,ηmax = 0.01;

      和 aggressive cosine annealing 的学习率策略 有点像

      image-20220615155537958 image-20220615155458044
    • Gradual unfreezing :应用于下游任务,因为怕遗忘之前LM的能力,因此从最后一层开始更新模型参数,逐渐往前面层更新,这是基于最后一层学到的知识最少的假设;逐渐解冻;这类似于chain-thaw (Felbo et al., 2017)

    • BPTT for Text Classification (BPT3C) :为了在large documents上进行模型精调,作者将文档分为固定长度为b的batches,并在每个batch训练时记录mean和max池化,梯度会被反向传播到对最终预测有贡献的batches。(Merity et al., 2017a);【??】

  • 本文的下游任务是文本分类任务,因此第三步是在第二步的LM后接一个分类linear层,因为输入给线性层是多个词,因此取最后一个输出特征,和maxpooling和meanpooling的输出特征,concat作为总的特征,再接一个linear输出:

    $\mathbf{h}_c=\left[\mathbf{h}_T, \operatorname{maxpool}(\mathbf{H})\right., \operatorname{meanpool} \left.(\mathbf{H})\right]$

实验

  • 用预训练语言模型AWD-LSTM (Merity et al.,2017a)

优缺点

优点

对比其他迁移学习方法(ELMo)更适合以下任务:

  • 非英语语言,有标签训练数据很少

  • 没有state-of-the-art模型的新NLP任务

  • 只有部分有标签数据的任务

缺点

  • 对于分类和序列标注任务比较容易迁移,对于复杂任务(问答等)需要新的精调方法。
  • 模型用的LSTM,对于长距离的输入捕捉不好;

==Radford, Alec, et al. “Improving language understanding by generative pre-training.” (2018).==citations:3533 OpenAI

背景

  • 无标注数据多,过去研究发现即使在有相当多的监督可用的情况下,以无监督的方式学习良好的表示也可以提供显著的性能提升(代表研究:词向量)。
  • 利用无标注文本有两个挑战:
    1. 目前还不清楚哪种优化目标,在学习对迁移有用的文本表示时,最有效;可能是语言模型,也可能是机器翻译等等(来自https://gluebenchmark.com/leaderboard
    2. 对于如何最有效地将这些学习到的表征迁移到目标任务上,目前还没有达成共识。(现有的方案有:对模型进行target任务的更改;使用复杂的学习方案;添加辅助学习目标)

思路

  • 提出Generative Pre-Training (GPT),通过对不同corpus上的无标注文本训练生成式预训练语言模型,该语言模型能提高下游任务模型能力;
  • 微调中使用task-aware input transformations ,实现对模型最小的改动下,得到最佳的迁移效果;
  • 探索了一种半监督语言理解任务的方法,使用无监督的预训练和有监督的微调相结合。
  • 目标是学习一种通用的表示法,这种表示法几乎不需要适应广泛的任务,就能迁移?
  • target task的corpus和预训练的unlabeled的corpus不在一个领域,也可以,比如英文的预训练模型,中文的LM任务;
  • Semi-supervised learning for NLP NLP中的半监督学习 :一般是用无标注文本学习word embedding;词级别
  • Unsupervised pre-training :其目标是找到一个好的初始化点,而不是修改监督学习目标,作为后续任务的初始模型;预训练作用类似正则化,使模型有更好的泛化性;
  • Auxiliary training objectives :添加辅助无监督训练目标是半监督学习的另一种形式;

框架方法

  • 采用了两个步骤:1. 用无标注文本训练一个预训练LM(Unsupervised pre-training );2. 用有监督数据将预训练模型迁移到下游任务中(Supervised fine-tuning);
  • 迁移过程,用task-specific input adaptations derived from traversal-style approaches ??
  • Unsupervised pre-training :语言模型loss function为路径概率,为在前k个token发生时当前token发生的概率的乘积;
image-20220615194546564
  • Supervised fine-tuning
image-20220615195255249

​ 将语言建模作为微调的辅助目标有助于(a)改进监督模型的泛化,(b)加快收敛速度。

模型结构

  • transformer
image-20220615195439608

优缺点

优点

  1. 循环神经网络所捕捉到的信息较少,而Transformer可以捕捉到更长范围的信息。
  2. 计算速度比循环神经网络更快,易于并行化
  3. 实验结果显示Transformer的效果比ELMo和LSTM网络更好

缺点

对于某些类型的任务需要对输入数据的结构作调整

适用任务

  • Natural Language Inference
  • Question Answering and commonsense reasoning
  • Classification
  • Semantic Similarity

==Radford, Alec, et al. “Language models are unsupervised multitask learners.” OpenAI blog 1.8 (2019): 9.==citations:3193

https://zhpmatrix.github.io/2019/02/16/transformer-multi-task/

思路

  • 提出GPT2.0

==Chronopoulou, Alexandra, Christos Baziotis, and Alexandros Potamianos. “An embarrassingly simple approach for transfer learning from pretrained language models.” arXiv preprint arXiv:1902.10547 (2019).==citations:88

github:https://github.com/alexandra-chron/siatl

Larger-Scale Transformers for Multilingual Masked Language Modeling