文章内容参考
ELMO, BERT, GPT(youtube)
ELMO, BERT, GPT(bilibili)
nlp_notes(github)
ELMO
(Embeddings from Language Model)
E1, E2, … EN 表示输入词如(我,爱,… ,你)。
T1, T2, … TN 表示输出词如(I,love,… ,you)。
经过BiLSTM层后获得两个向量,将两个向量合在一起后向量可以兼顾上下文。
将经过一个BiLSTM层后获得的合并向量记为(h1, h2, … , hn)。
经过N个BiLSTM层后获得的合并向量记为(h1n, h2n, … , hnn)。
以2层BiLSTM为例,每个输入词向量(或字向量)获得2个结合向量h1, h2
随后将向量h1, h2按图中方式获得最终向量(蓝色)。
α1 和 α2 通过学习获得,对于不同的任务两个参数的权重不同。
蓝色向量随后通过全连接层,softmax函数,得到输出词的概率。
ELMO的特别之处在于获取每一层BiLSTM的输出向量,并将所有向量整合为答案。(我全都要.jpg)
BERT
(Bdirectional Encoder Representations from Transformers)
BERT和GPT都是基于Transformer的,前者基于编码器(Encoder),后者基于解码器(Decoder)。
以下是Transformer模型的流程图,左侧是编码器,右侧是解码器。
以下是BERT流程图:
BERT的训练首先需要通过预训练(Pre-training),随后在及具体的任务上再进行微调(Fine-Tuning)。
BERT的训练分为两部分,掩词填空和语义连接。
- 填空(Mask LM)
BERT处理文本中有三个特殊符[CLS], [MASK], [SEP]。
在文本处理时,随机将一些词给盖上,其中一部分换成[MASK]字符,另一部分随机换成另一个词。
随后预测原来的词。
由于BERT训练只需要文本,不需要标签进行监督,所以称为自监督训练(self-supervised)。
比如在完整的Transformer中,我们需要两个文本分别输入编码器和解码器,其中输入解码器的部分就作为编码器训练的监督。 - 语义连接(Next Sentence Predicttion)
[SEP]用来分隔句子
[CLS]字符最后输出被分割的两个句子是否是上下文
在预训练之后的BERT引用到具体任务需要有标签的任务进行微调(Fine-Tuning)。
BERT的用途:
-
文本分类(情感分析)
分析文本属于哪一类 -
词性分类
分析每个词的词性 -
逻辑判断
判断前一段文本能否推出后一段文本
-问题回答
给出一段文本D和问题Q,输出两个数s, e,在s和e之间的文字就是答案。(答案必须在文本内)
通过学习到的两个向量(橙色和蓝色),与每个词获得的向量分别做向量点积,获得到的积经过softmax函数得到最大可能的两个位置。
橙色向量和蓝色向量分前后顺序不能颠倒,如果s>e说明答案不存在。
BERT有一个特点:通过104国语言文本训练的Multilingual-BERT模型,在经过英文文本的微调之后甚至可以用中文回答具体问题。
GPT
(Generative Pre-Training )
GPT有一个非常明显的特点,模型很大。
ELMO 92M,谷歌发布的最初BERT-large 340M(根据Bard给出的数据,BERT的训练数据高达1.56万亿字符),而GPT-2的模型数据更是来到了恐怖的1542M。
GPT的特别之处在于它通过模型参数的巨量堆叠,在没有其他优化的情况下简单地完成了相当好的表现。
预训练模型架构之间的区别。BERT 使用双向 Transformer,OpenAI GPT 使用从左到右的 Transformer,ELMo 使用独立训练的从左到右和从右到左 LSTM 的级联来生成下游任务的特征。三种模型中,只有 BERT 表征会基于所有层中的左右两侧语境。
这是一个基于GPT-2的简单回答模型