NLP/图解 GPT2

NLP/图解 GPT2

这篇文章翻译自 https://jalammar.github.io/illustrated-gpt2/。多图详细解释当今最为强大的人工智能 GPT-2(截至 2019 年 8 月 12 日)。

今年,我们看到了机器学习在许多场景的广泛应用。OpenAI GPT-2 表现出了令人印象深刻的能力,它能够写出连贯而充满激情的文章,这超出了我们当前对语言模型的预期效果。GPT-2 不是一个特别新颖的架构,而是一种与 Transformer 解码器非常类似的架构。不过 GPT-2 是一个巨大的、基于 Transformer 的语言模型,它是在一个巨大的数据集上训练的。在这篇文章,我们会分析它的结构,以及这种结构产生的作用。我们会深入了解 Self Attention 层的细节。然后我们会再了解一下这种只有 Decoder 的 Transformer 在语言建模之外的应用。

阅读更多
NLP/图解 Bert

NLP/图解 Bert

本文翻译自:http://jalammar.github.io/illustrated-bert/

通俗易懂,非常适合刚刚开始了解 Bert 的同学。

BERT 来源于 Transformer,如果你不知道 Transformer 是什么,你可以查看 图解 Transformer

2018 年是机器学习模型处理文本(或者更准确地说,自然语言处理或 NLP)的转折点。如何用最恰当的形式来表示单词和句子,从而最准确地捕捉它们基本语义和关系?我们对这些问题的研究正在迅速发展。此外,NLP 社区已经发布了一些非常强大的组件,你可以免费下载,并在自己的模型和 pipeline 中使用(今年,可以说是 NLP 的 ImageNet 时刻,这句话指的是:多年前类似的发展,也加速了机器学习在计算机视觉任务中的应用)。

阅读更多
NLP/GPT3 的原理 - 详细动画图解

NLP/GPT3 的原理 - 详细动画图解

本文翻译自 http://jalammar.github.io/how-gpt3-works-visualizations-animations/

如今,科技圈充斥着关于 GPT3 的炒作。大量的语言模型(如 GPT3)开始展现出它们惊人的能力。对于大多数企业来说,这些模型虽然还不能直接给用户可靠地使用,但它们展现出的智慧火花,肯定会加速自动化进程和智能计算机系统的可能性。现在,让我们揭开 GPT3的神秘面纱,了解它是如何训练的,以及它是如何运作的。

一个训练好的语言模型会生成文本。

我们可以把一些文本输入到模型中,这些输入的文本会影响输出的文本。

阅读更多
NLP/图解 Attention

NLP/图解 Attention

本文翻译自 https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/

Attention 被广泛用于序列到序列(seq2seq)模型,这是一种深度学习模型,在很多任务上都取得了成功,如:机器翻译、文本摘要、图像描述生成。谷歌翻译在 2016 年年末开始使用这种模型。有 2 篇开创性的论文(Sutskever et al., 2014, Cho et al., 2014)对这些模型进行了解释。

阅读更多
NLP/Bert 文本分类实战
NLP/Bert 源码解读 3
NLP/Bert 源码解读 2

NLP/Bert 源码解读 2

在上一篇文章中 ,我们简单 了解了 transformers 的设计,从宏观上对整个结构有了了解。

今天,我们继续深入了解一下,在 Hugging Face 的 transformers 中,和 Bert 有关的类,都有哪些,

阅读更多
NLP/Bert 源码解读 1

NLP/Bert 源码解读 1

上一篇文章中,我用图解详细讲述了 Bert 的组成部分和内部原理。

今天这篇文章,我们来看 Bert 的源码。下面使用的 Bert 源码,来自于 Hugging Face 的 transformers。这个项目一开始的名字是:pytorch-pretrained-bert,只包含 Bert。

后来加入了 GPT-2,RoBERTa,XLM,DistilBert,XLNet,T5,CTRL 等模型,改名为 transformers。你可以点击 model-architectures 来查看所有的模型。

transformers 的代码实现包括 PyTorch 和 Tensorflow,我这里只讲其中的 PyTorch 的源码。

你可以使用 pip install transformers 来安装这个库。

阅读更多
NLP/图解 Transformer

NLP/图解 Transformer

本文翻译自 : http://jalammar.github.io/illustrated-transformer/。是我看过的把 Transformer 讲解得最好的文章:这篇文章从输入开始,一步一步演示了数据在 Transformer 中的流动过程。由于看过一些中文翻译的文章,感觉不够好,所以我自己翻译了一个版本,在一些难以直译的地方,我加入了一些原文没有的文字说明,来更好地解释概念。另外,我添加了一些简单的代码,实现了一个基本的 Self Attention 以及 multi-head attention 的矩阵运算。

Transformer 依赖于 Self Attention 的知识。Attention 是一种在深度学习中广泛使用的方法,Attention的思想提升了机器翻译的效果。如果你还没学习 Attention,请查看这篇 Attention 的精彩讲解

阅读更多
NLP/台大 Bert、ELMO、GPT 学习笔记

NLP/台大 Bert、ELMO、GPT 学习笔记

这篇文章用于记录台大李宏毅老师的 ELMO,BERT,GPT 课程 的学习笔记。课程地址:https://www.bilibili.com/video/av64570585/

这篇文章用一句话概括,就是:如何让机器看懂人类的文字

为了让机器更好地理解人类的文字,学术界做了许多的研究,截至目前为止,在这个方向上最新的进展:ELMO、BERT、GPT。上一篇文章讲了 Transformer,而 BERT 是 Transformer 里的 Encoder,GPT 是 Transformer 里的 Decoder。

EMLO

上一篇文章讲了 Word Embedding,也就是每个词都使用一个向量来表示,向量中包含了词的语义信息。

通常一个词只有一个 Embedding 向量已经足够了,但是实际中,同一个词出现在不同的句子,可能有不同的含义。

例如:下面 4 个句子中,前 2 个句子的bank表示银行,后 2 个句子的bank表示河边。

1
2
3
4
Have you paid that money to the bank yet ?
It is safest to deposit your money in the bank.
The victim was found lying dead on the river bank.
They stood on the river bank to fish.

在之前的 Word Embedding 中,所有的bank的 Embedding 都是一样的。但是在上面 4 个句子中,前 2 个句子的bank和后 2 个句子的bank的 Embedding 应该是不一样的。我们希望,模型对于同一个词,能够根据不同的上下文,学习出不同的 Embedding。这种方法叫做 Contextualized Word Embedding 。

为了达到这个目的,一种叫 ELMO (Embedding from Language Model)的方法被提出来了。这是一种基于 RNN 的。

具体是使用两个 RNN:

  • 左边的 RNN 根据前一个词,输出后一个词,学习到了前文的信息
  • 右边的 RNN 根据后一个词,输出前一个词,学习到了后文的信息。

两个 RNN 训练完成后,取中间的 Hidden state,并拼接起来,得到最终的 Embedding,这个 Embedding 包含了上下文的信息。


上面的图中只有一层 RNN,在实际中,可以设置多层的 RNN ,这样就会得到多个层对应的 Embedding。那这时应该选择哪些层的 Embedding 呢?ELMO 的做法是这些 Embedding 全都要,将每一层的 Embedding 加权求和,得到最终的 Embedding。这里的权值,是和具体的 NLP 任务一起训练得到的,比如 Coreference(找出指代词对应的词)、SQuAD(问答系统)、SST-5(文本情感分类)。


BERT

Bert 就是 Transformer 的 Encoder 部分,全称是 Bidirectional Encoder Representations from Transformers。

在 transformer 中,Encoder 的输入是一句话的序列,输出是每个词的 Embedding 向量。

所以,BERT 的作用也是训练得到每个词的 Embedding。


训练 BERT 的方法包括两个:Masked LM 和 Next Sentence Prediction。

在实际中,这两个训练方法是同时应用到 BERT 中的。

Masked LM

  • 输入给 BERT 的句子中,会随机选择 15% 的字或者单词置换为一个特殊的 token,称为 MASK。
  • 然后把整句话输入到 BERT,得到每个词的 Embedding。
  • 把 MASK 位置的 Embedding,输入一个线性的分类器,根据 Embedding 预测这个位置的词是哪一个。


因为最后的分类器是一个简单的线性分类器,拟合能力弱,而它的输入是从 BERT 中学习到的 Embedding,这就要求从 BERT 中学习到的 Embedding 是一种非常好的 representation。

Next Sentence Prediction

第二种训练方法是:把两个句子拼接起来,中间添加一个 SEP 的分隔符,并在最前面添加一个 CLS 的 token,经过 BERT 得到每个位置的 Embedding,把 CLS 位置输出的 Embedding 输入一个线性 2 分类器,判断这两个句子是不是属于前后关系。

你可能有 一个疑问,为什么 CLS 的位置要放在句子的最开始,而不是最后面。这是因为 BERT 内部的 Self-Attention 可以连接整个上下文的信息。因此,CLS 放在句子的前面还是后面,是没有影响的。


在实际中,Bert 是可以和具体的任务,一起训练的。

下面是 4 个应用例子。

BERT 的应用例子

文章分类

BERT 可以用来做情感分类,文档分类等任务。

具体是在文档最前面添加一个 CLS 的 token,然后整个文档经过 BERT 得到 Embedding,把 CLS 位置的 Embedding 输入到一个线性分类器做分类。其中 BERT 的网络可以使用别人已经训练好的参数做 fine-tune。


Slot filling(每个词做分类)

在 Slot filling 中,每个词都有一个类别。只需要把句子经过 BERT 得到的每一个 Embedding 都输入到线性分类器中,对每一个词做分类。


Natural Language Inference

在 Natural Language Inference 任务中,输入是两个句子,前面一句是前提,后面一句是推论,判断根据前一个句子是否能够推导出后一个句子。这是一个 3 分类问题,输出有: True/False/ unknown。

和第一个问题类似,也是在句子前面添加一个 CLS 的 token,然后把 CLS 位置的 Embedding 输入一个线性分类器。


Extraction-based Question Answering

这是问答系统的任务,输入是一篇文章 \(D=\{ d_{1}, d_{2}, ...,d_{N}\}\),和一个问题 \(Q=\{ q_{1}, q_{2}, ...,q_{M}\}\),输出是答案在文章 \(D\) 中的位置 \((s, e)\)\(s\) 表示答案的开始位置,\(e\) 表示答案的结束位置。那么答案 \(A = =\{ d_{s}, ...,d_{e}\}\)

如下图所示,问题和答案的序列拼接起来,输入到 BERT,得到每个词的 Embedding。然后训练两个向量,与文档 \(D\) 里面的每一个词计算相似度,再经过 Softmax 层输出概率。

在下图左边,一个向量用于匹配答案的开始位置 \(s\)

在下图右边,另一个向量用于匹配答案的结束位置 \(e\)

那么最终的答案就是 \(A = =\{ d_{s}, ...,d_{e}\}\)


如果 \(s > e\),表示开始的位置比结束的位置还要大,意味着对应的问题没有答案。

在原始论文中,BERT 有 24 层网络,也就是会有 24 个向量输出,最终的向量是 24 个向量的加权求和,权重是和具体的任务一起训练得到的。有论文研究了不同任务对 BERT 中每一层 Embedding 的权重的分布图。

论文地址:https://arxiv.org/abs/1905.05950

ERNIE

你可以把 ERNIE 和 BERT 类似,但是 ERNIE 是为中文设计的,全称是 Enhanced Representation through Knowledge Integration。

它和 BERT 的区别是:

  • 在 BERT 的训练中,Masked LM 会随机选择 15% 的替换成特殊的 MASK。
  • 而在 ERNIE 的训练中,Masked LM 会随机选择 15% 的替换成特殊的 MASK。

论文地址:https://arxiv.org/abs/1904.09223


GPT

GPT 是 Generative Pre-Training,是 Transformer 的 Decoder 部分。也就是根据前一个词生成下一个词。


目前, GPT 已经发展到第 3代,称为 GPT 3,是目前最大的模型,使用的数据集在处理前容量达到了 45TB,具有 1750 亿参数,被赋予“最强 NLP 模型”的称号。GPT-3 可以做到非常多的事,它可以写诗、写剧本、写小说、甚至输出一些代码。GPT-3 的能力前所未有地强大。目前 GPT-3 已经开放了 API,你可以尝试申请体验一下。


如果你觉得这篇文章对你有帮助,不妨点个赞,让我有更多动力写出好文章。

我的文章会首发在公众号上,欢迎扫码关注我的公众号张贤同学