ELMO,GPT,BERT初步学习

    技术2025-03-29  18

    https://lilianweng.github.io/lil-log/2019/01/31/generalized-language-models.html 在2018年,诸如GPU, BERT等大体积的语言模型在各种任务上达到了比较好的效果。而我们在训练语言模型的过程中,也不同于图像的预训练模型,NLP任务的预训练不需要带标签的数据。 最刚开始的语言模型(word2vec, doc)训练思路是基于词共现的,而不会更具特定的上下文做改变。这种方式的embedding在一定程度上会有效,但是其提升程度是有限的。 这里我们会提到多种对文本构建词向量的方法,这些词向量怎么更加容易和高效低用于下游NLP任务。

    CoVe

    CoVe(Contentual Word Vecotrs), attention的seq2seq的机器翻译模型中得到的词向量。【这里的CoVe得到的是整个句子的向量】

    NMT recap

    NMT(Neural Machine Translation) 的encoder部分由两层标准的biLSTM组成,decoder是一个带有attiontion机制的LSTM。 以英-法翻译为例,在encoder端进行英语单词embedding的训练。 encoder的输出,会带有单词上下文的信息,好处是对很多下游NLP任务有好处。 使用glvoe和CoVe共同做文本分类任务,其中glove提供了词之间的共现关系,CoVe提供了句子的上下文信息。 CoVe的缺陷:

    在有监督的翻译任务上做预训练,受制于语料。CoVe对最终任务性能的提升受限于具体的任务。 接下来会说到的 ELMo模型克服了如下问题: 通过无监督的预训练(GPT\BERT),可以用于各种下游任务。

    ELMo

    ELMo(Embedding from language Model),通过无监督的方式,使用预训练语言模型来做包含上下文信息的单词表征。

    bidirectional language model

    使用双向LSTM提取特征,两个LSTM共享embedding层和softmax层。 模型的目标是最小化negative log likelihood。

    ELMo representations

    在biLM的顶层,ELMo通过具体的任务学习,把各层的隐层堆叠起来,隐藏层的内容包括: embedding layer output和weight。 为了评估不同的隐藏层捕获的不同信息,ELMo使用不同层的表征来表示语义特征和语法特征。

    semantic task: 单词语义消歧。BILM的顶层隐藏层要优于第一层。syntax task: part-of-speech(POS)任务中,使用第一层要优于BiLM的顶层神经元。 研究表明,语法信息在低层次的隐藏层中得到了比较好的表达,而语义信息是在高层的隐藏层中得到了较好的表达。【怎么指定使用哪一层的神经元呢】

    Use ELMo in Downstream Tsasks

    这里的语言模型是无监督的,理论上可以继续加大。然而这个训练依然是和任务无关的,所以还需要在具体的任务上,再做一些工作以提高性能。

    Cross-View Training

    Model Architecture

    https://zhuanlan.zhihu.com/p/55182085

    OpenAI GPT

    GPT(generative pre-trainging transformer) ,雨ELMO比较相似。使用了更多的语料,体积上也更大。和ELMo主要体现在两个方面的不同:

    模型结构不同。ELMo是浅层的模型,将从左到右和从右到左的多层LSTM级联起来;而GPT在decoder部分是一个多层的transformer。在辖有任务红,使用embedding的方式是不同的,ELMo在特殊任务重把embeedding当作外部特征直接喂入,而GPT需要对特殊任务做微调。

    transformer decoder as language model

    与原生的transformer下关闭,这里的模型丢弃了encoder部分,因此输入为一个单一的句子。 输入句子,模型包含了多个transformer block,每个block又包含了一个multi-head self-attention以及pointwise feed-forward层。最终输出为经过softmax归一化的分布式表达。 在损失函数上,GPT和ELMo一样,都是negative log-likelihood。

    BPE

    Byte Pair Encoding(BPE)用来对输入序列进行编码。BPE最初是是使用在压缩算法重,后来被应用于解决机器翻译重的OOV问题,我们可以解决极少出现的单词问题,并翻译为一种新的语言。为了把很少出现或UNK的单词分解为多个subwords,BPE通过迭代和贪婪的方法将单个token进行有分割的拼接。

    superviesed fine-tuning

    GTP与任务无关,只可以使用预训练的方式直接进行训练。 以分类任务为例,在带标签的数据集重,输入为x=(x1,x2…,xn),输出为y。GPT先将x通过与训练的transformer decoder,然后最后一层的输出就是隐藏层表示,需要更新的权重是Wy,这些权重可以对特殊任务有更好的适应性。 loss为最小化negative log-likelihood,另外添加LM loss会有更好的效果。

    可以加快训练阶段的拟合速度可以提升有监督模型的生成效果。 可以应用的场景包括: 分类、蕴含关系、句子相似度、多项选择等。 在大部分的任务上可以达到一个比较好的效果。首先GPT在训练阶段可以接受尽可能多的数据,第二部微调阶段,只需要提供较少的数据,以及少量的参数更新。 但是GPT有一个限制,就是单向的模型,只能够预测从左到右。

    BERT

    BERT(Bidirectional Encoder Representations from Transformers)同样更可以在无标注的样本上进行预训练,然后在特殊任务上进行微调,不需要做额外的网络搭建。 与GPT相比,BERT最大的不同在于其训练方式是双向的。模型可以学习到单词的上下文信息。 BERT的结构是一个而多层的双向transformer encoder。

    pre-training tasks

    BERT模型的训练包含了两个任务,Mask language model 和 Next sentence prediction

    Mask language model

    训练阶段每个单词有15%的概率,使用[MASK]替换。而在微调的时候,是没有[MASK]的,所以又加了一些trick,使用80%的概率,在挑选重的15%的单词里,继续下替换MASK,有10%的概率随机替换一个词,10%的概率使用原来的词。模型只预测missing的单词,【看不懂这里…】

    Next sentence prediction

    考虑到在下游环境中,会涉及到句子间的关系信息,bert添加了一个文本二分类的任务,来判断语料中下一个句子作为当前句子的下一句是不是合适。

    句子对均匀分布,50%的是,50%的不是模型输出判断句子B是不是A的下一句。 这两个人的特性,促使了我们的训练数据可以无限多。训练loss是LM likelihood lose与mean next sentence prediction likelihood的和。

    input Embedding

    输入embedding主要包含三个组成:

    wordpiece tokenization embedding, 就是subword的embedding,可以解决rare word和oov的问题。segment embedding,当有两个句子A,B的时候,会有分割符[SEP]的问题存在,这里使用E(A)E(B)来区分句子的界限。position embedding, embedding的第一个位置是[CLS],将来在下游任务可以使用。

    use bert in Downstream Tasks

    bert的微调阶段,也仅仅需要少量的参数加入。 对于分类任务,我们使用最后隐藏层的特殊字符[CLS],将其输入dense层,然后做softmax。 对于QA问题入SQuAD,我们需要预测一个段落是不是一个问题的答案。bert对两个touken给出概率分布【这里不是很清晰】

    有三处需要再细看。

    Processed: 0.008, SQL: 9