最早进模型指南:NLP中的Transformers如何运做?

全文共5257字,预计学习时长11分钟或更长算法

经过阅读本篇文章,你将理解:微信

· NLP中的Transformer模型真正改变了处理文本数据的方式。网络

· Transformer支持NLP的最新变化,包括谷歌的BERT。架构

· 了解Transformer的运做规律,如何进行语言建模、序列到序列建模以及如何构建Google的BERT模型。框架

下面,咱们开始学习吧!函数

图片来源:pexels/Dominika Roseclay性能

当前,天然语言处理(NLP)的技术正之前所未有的速度发展。从超高效的ULMFiT框架到谷歌的BERT,NLP的确处于发展的黄金时代。学习

这场革命的核心就是Transformer概念,它改变了数据科学家使用文本数据的方式,下文将作具体介绍。编码

要举个例子证实Transformer的实用吗?请看下一段:人工智能

突出显示的词语指的是同一我的——Grieamann,一名受欢迎的足球运动员。对人类而言,弄清楚文本中这些词之间的关系并不困难。然而,对于一台机器来讲,这是一项艰巨的任务。

机器要想理解天然语言,明确句子中的此类关系和词语序列相当重要。而Transformer 概念会在其中发挥重要做用。

目录

1. 序列到序列模型——背景

· 基于序列到序列模型的循环神经网络

· 挑战

2. NLP中的Transformer简介

· 理解模型框架

· 得到自注意力

· 计算自注意力

· Transformer的局限

3. 了解Transformer-XL

· 使用Transformer进行语言建模

· 使用Transformer-XL进行语言建模

4. NLP中的新尝试:Google的BERT

· 模型框架

· BERT训练前的任务

序列到序列模型——背景

NLP中的序列到序列(seq2seq)模型用于将A类型的序列转换为B类型的序列。例如,把英语句子翻译成德语句子就是序列到序列的任务。

自2014年引进以来,基于seq2seq模型的循环神经网络(RNN)已经得到了不少关注。当前世界的大多数数据都是序列形式,包括数字序列、文本序列、视频帧序列和音频序列。

2015年,seq2seq模型增长了注意力机制,使性能获得进一步提高。过去5年来NLP发展速度之快,简直使人难以置信!

这些序列到序列模型用途很是普遍,适用于各类NLP任务,例如:

· 机器翻译

· 文本摘要

· 语音识别

· 问答系统等

基于seq2seq模型的循环神经网络

举一个关于seq2seq模型的简单例子。请看下图:

上方的seq2seq模型正将德语短语转换为英语短语。下面进行分解:

· 编码器和解码器都是循环神经网络。

· 在编码器中的每一步,循环神经网络会从输入序列中获取一个字向量(xi),并从上一个时间步骤中获取一隐藏状态(Hi)。

· 隐藏状态会在每一个时间步骤更新。

· 最后一个单元的隐藏状态称为上下文向量,包含有关输入序列的信息。

· 将上下文向量传给解码器,生成目标序列(英语短语)。

· 若是使用注意力机制,则隐藏状态的加权之和将做为上下文向量传给解码器。

挑战

尽管seq-2-seq模型表现良好,但仍存在必定的局限性:

· 处理长时依赖仍颇具挑战性。

· 模型框架的顺序阻止了并行化。而Google Brain的Transformer概念解决了这一挑战。

NLP中的Transformer简介

NLP中的Transformer是全新的框架,旨在解决序列到序列的任务,同时轻松处理长时依赖。Transformer是由Attention Is All You Need这篇论文提出的。建议对NLP感兴趣的人阅读该论文。

论文传送门:https://arxiv.org/abs/1706.03762

引自该论文:

Transformer是首个彻底依靠自注意力来计算其输入和输出表示,而不使用序列对齐的循环神经网络或卷积的转换模型。

此处,“转换”是指将输入序列转换成输出序列。Transformer的建立理念是经过注意和重复,完全处理输入和输出之间的依赖关系。

下面请看Transformer的框架。它可能看起来使人生畏,但不要担忧,下面将进行分解,以便逐块理解。

理解Transformer的模型框架

图片来源: https://arxiv.org/abs/1706.03762

上图是Transformer框架的精彩插图。首先只需关注编码器和解码器的部分。

如今看看下图。编码器块具备一多头注意力层,而后另外一层是前馈神经网络。而解码器具备额外的遮挡式多头注意力层。


编码器和解码器块其实是由多个相同的编码器和解码器彼此堆叠而成的。编码器堆栈和解码器堆栈具备相同数量的单元。

编码器和解码器单元的数量是超参数的。在本文中,使用了6个编码器和解码器。

如何设置编码器和解码器堆栈:

· 将输入序列的嵌入词传给第一个编码器。

· 而后进行转换并传给下一个编码器。

· 将编码器堆栈中最后一个编码器的输出传给解码器堆栈中的全部解码器,以下图所示:


此处须要注意的重要事项——除了自注意力和前馈层外,解码器还有一层编码器——解码器注意层。这有助于解码器聚焦于输入序列的适当部分。

你可能会想这个“自注意力”层究竟在Transformer中作了什么?好问题!这能够说是整个设置中最重要的组成部分,因此首先要理解这个概念。

得到自注意力

根据该论文:

自注意力,有时称为内部注意力,是注意力机制,其关联单个序列的不一样位置以计算序列的表示。


请看上方图片,你能弄清楚这句话中的“it”这个词的意思吗?

“it”指的是街道仍是动物?对人们来讲,这是个简单的问题。但对于算法而言,并不是如此。模型处理“它”一词时,自注意力试图将“它”与同一句子中的“animal”联系起来。

自注意力容许模型查看输入序列中的其余词语,以更好地理解序列中的某个词语。如今,请看如何计算自注意力。

计算自注意力

为便于理解,笔者将此节分为如下步骤。

1. 首先,须要从编码器的每一个输入向量中建立三个向量:

· 查询矢量

· 关键矢量

· 价值矢量

训练过程当中会训练和更新这些向量。看完本节后,将更加了解其做用。

2. 接下来,将计算输入序列中每一个词语的自注意力。

3. 以“Action gets results”这一短语为例。为计算第一个单词“Action”的自注意力,将计算短语中与“Action”相关的全部单词的分数。当对输入序列中某个单词编码时,该分数将肯定其余单词的重要性。

第一个单词的得分是经过将查询向量(q1)的点积与全部单词的关键矢量(k1,k2,k3)进行计算得出的:

而后,将这些得分除以8,即关键矢量维数的平方根:

接下来,使用softmax激活函数使这些分数标准化:

而后将这些标准化后的分数乘以价值向量(v1,v2,v3),并将其相加,获得最终向量(z1)。这是自注意力层的输出。而后将其做为输入传给前馈网络:

所以,z1是输入序列“Action gets results”的首个单词的自注意力向量。以相同的方式获取输入序列中其他单词的向量:

在Transformer的框架中,屡次而非一次并行或独立地计算自注意力。所以,自注意力被称为多头注意力。输出的链接与线性转换以下图所示:

根据论文:

多头注意力容许模型共同关注来自不一样位置的、不一样子空间表示的信息。

Transformer的局限

Transformer无疑是对基于循环神经网络的seq2seq模型的巨大改进。但其自己有一些局限:

· 注意力只能处理固定长度的文本字符串。在做为输入进入馈入系统前,必须将文本分红必定数量的段或块。

· 这种文本分块会致使上下文碎片化。例如,若是句子从中间分割,则会丢失大量上下文。换句话说,文本分块时,未考虑句子或其余语义边界。

那么如何处理这些很是重要的问题呢?这是与Transformer合做的人们提出的问题,在此基础上产生了Transformer-XL。

了解Transformer-XL

Transformer 框架可习得长时依赖性。但因为使用了固定长度的上下文(输入文本段),框架没法超出必定的水平。为克服这一缺点,提出了一种新的框架——Transformer-XL:超出固定长度上下文的注意语言模型。

在该框架中,前段中得到的隐藏状态被再次用做当前段的信息源。它能够建模长时依赖性,由于信息可从一段流向下一段。

使用Transformer进行语言建模

将语言建模视为在给定前一单词后,估计下一单词几率的过程。

Al-Rfou等人 (2018)提出了将Transformer模型应用于语言建模的想法。根据该论文,整个语料库应依照可管理能力,划分固定长度段。而后,在段上单独训练Transformer模型,忽略全部来自前段的上下文信息:

图片来源:https://arxiv.org/abs/1901.02860

这种框架不会出现消失梯度的问题。但语境碎片限制了其习得长期依赖性。在评估阶段,该段仅会向右移动一个位置。新段必须彻底从头开始处理。遗憾的是,这种评估方法计算量很是大。

使用Transformer-XL进行语言建模

在Transformer-XL的训练阶段,以前状态计算的隐藏状态被用做当前段的附加上下文。Transformer-XL的这种重复机制解决了使用固定长度上下文的限制。

在评估阶段,可重复使用前段的表示,而非从头开始计算(如Transformer模型)。固然,这会提升计算速度。

NLP中的新尝试:Google的BERT(来自Transformers双向编码器的表示)

众所周知迁移学习在计算机视觉领域的重要性。例如,可针对ImageNet数据集上的新任务微调预训练的深度学习模型,并仍然可在相对较小的标记数据集上获得适当的结果。

一样,语言模型预训练可有效改进许多天然语言处理任务。

传送门:https://paperswithcode.com/paper/transformer-xl-attentive-language-models

BERT框架是Google AI新的语言表示模型,可进行预训练和微调,为各类任务建立最早进的模型。这些任务包括问答系统、情感分析和语言推理。

BERT的模型框架

BERT使用多层双向Transformer编码器。其自注意力层在两个方向上都有自注意力。谷歌发布了该模型的两个变体:

1BERT Base:Transformers 层数 = 12, 总参数 = 110M

2BERT Large:Transformers 层数 = 24, 总参数 = 340M

BERT经过双向性完成几项任务的预训练——遮挡式语言模型和下一句预测。下面将详细讨论这两项任务。

BERT训练前的任务

使用如下两个无人监督的预测任务对BERT进行预训练。

1. 遮挡式语言模型(MLM)

根据该论文:

遮挡式语言模型随机地从输入中遮挡了一些标记,目的是仅根据其上下文,预测被遮挡单词的原始词汇。与从左到右的语言模型预训练不一样,MLM目标容许表示融合左右的上下文,这使咱们能够对双向Transformer进行深度预训练。

Google AI研究人员随机遮挡每一个序列中15%的单词。任务是什么呢?预测这些被遮挡的单词。须要注意——遮挡的单词并不是老是带有遮挡的标记[MASK],由于在微调期间不会出现[MASK]标记。

所以,研究人员使用如下方法:

· 80%的单词带有被遮挡的标记[MASK]

· 10%的单词被随机单词替换

· 10%的单词保持不变


2. 下一句话预测

一般,语言模型不会理解连续句子间的关系。BERT也接受过这项任务的预训练。

对于语言模型预训练,BERT使用成对的句子做为其训练数据。每对句子的选择很是有趣。举个例子,以便更好地理解。

假设一个文本数据集有100,000个句子,想要使用这个数据集对BERT语言模型进行预训练。所以,将有50,000个训练样例或50,000对句子做为训练数据。

· 50%的句对中,第二句其实是第一句的下一句。

· 其他50%的句对,第二句是来自语料库的随机句子。

· 第一种状况的标签将成为第二种状况的'IsNext'和'NotNext'。

像BERT这样的框架代表,无人监督学习(预训练和微调)将成为许多语言理解系统的关键要素。低资源任务尤为可从这些深度双向框架中得到巨大收益。

下面是一些NLP任务的快照,BERT在其中扮演着重要角色:

图片来源:https://arxiv.org/abs/1810.04805

咱们应该很庆幸,在本身身处的时代里,NLP发展如此迅速,Transformers和BERT这样的架构正在为将来几年更为先进的突破铺平道路。


更多课程传送门:https://courses.analyticsvidhya.com/courses/natural-language-processing-nlp??utm_source=blog&utm_medium=understanding-transformers-nlp-state-of-the-art-models

留言 点赞 关注

咱们一块儿分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

(添加小编微信:dxsxbb,加入读者圈,一块儿讨论最新鲜的人工智能科技哦~)

相关文章
相关标签/搜索