关于NLP模型GPT-2的学习笔记(一)

近期GPT-3的热度在NLP领域很高,因此对于这个模型有了尝试的想法,目前GPT-3的模型和资源还不太多,因此先用GPT-2尝试一下训练模型和文本生成。

在实践之前,对于GPT模型的基本原理做了一定的了解,下面进行一些简单的介绍。

GPT模型是OPEN-AI构建的自然语言处理模型,其在文本生成上往往能产生超出预料的效果,与BERT和Transformer XL等模型带起了NLP领域的新热潮。

NLP模型简介

自然语言处理模型的主要任务就是对于自然语言(区别于机器语言)进行一系列处理达到使用者的目的,与机器语言相对比,由于自然语言并没有特别严格的格式,因此从句式结构去分析和生成文本存在相当大的难度。因此目前的文本生成都是依靠词与词之间的联系来实现的,就如同输入法的提示一样,输入一个词之后生成下一个词,这个过程就是目前文本生成模型的基本流程,通过产生与上一个词关联性最大的一列词并从中挑选一个作为输出,如此循环生成一篇文章。

模型架构

目前主要的自然语言处理模型架构都是由编码器(encoder)和解码器(decoder)构成,BERT由编码器构成,GPT由译码器构成,这与transformer模型相似。GPT-2 就像传统的语言模型一样,一次只输出一个单词(token)。

这种模型之所以效果好是因为在每个新单词产生后,该单词就被添加在之前生成的单词序列后面,这个序列会成为模型下一步的新输入。这种机制叫做自回归(auto-regression),GPT-2,以及一些诸如 TransformerXL 和 XLNet 等后续出现的模型,本质上都是自回归模型,而 BERT 则不然。这就是一个权衡的问题了。虽然没有使用自回归机制,但 BERT 获得了结合单词前后的上下文信息的能力,从而取得了更好的效果。

编码器模块

编码器模块可以接受长度不超过最大序列长度(如 512 个单词)的输入。如果序列长度小于该限制,就在其后填入预先定义的空白单词。

译码器模块

其次是解码器模块,它与编码器模块在架构上有一点小差异——加入了一层使得它可以重点关注编码器输出的某一片段,也就是下图中的编码器-解码器自注意力(encoder-decoder self-attention)层。

解码器在自注意力(self-attention)层上还有一个关键的差异:它将后面的单词掩盖掉了。但并不像 BERT 一样将它们替换成特殊定义的单词<mask>,而是在自注意力计算的时候屏蔽了来自当前计算位置右边所有单词的信息。

posted @ 2020-08-17 22:32  btc  阅读(548)  评论(0编辑  收藏  举报