深度学习与NLP基础

Deep Learning and Natural Language Processing

授课对象:计算机科学与技术专业 二年级

课程名称:人工智能(专业必修)

课程学分:3学分

什么是自然语言处理(NLP)

自然语言处理技术(NLP)是文本生成的基础。N L P 探索计算机和人类(自然)语言之间相互作用,研究实现人与计算机之间用自然语言进行有效通信的各种理论和方法。最早的自然语言处理研究工作是机器翻译,后逐渐向文本摘要、分类、校对、信息抽取、语音合成、语音识别等方面深入

⚫ 从基于规则的经验主义到基于统计的理性主义,再到基于深度学习的方法,NLP在70年历程中逐渐发展进步。受益于预训练语言模型的突破发展,Transformer等底层架构不断精进,NLP取得跨越式提升

自然语言处理

用计算机对字、词、句、篇章等自然语言的输入、输出、识别、分析、理解、生成等的操作和加工,实现人机间的信息交流

②构成:

自然语言处理

自然语言

人类社会约定俗成的,区别于如程序设计的人工语言

处理

输入、输出、识别、分析、理解、生成等计算机操作过程

自然语言理解

让机器具备正常人的语言理解能力(识别人讲的话)

自然语言产生

将非语言格式的数据转换成人类可以理解的语言格式(输出为人讲的话

1950s-1970s

采用基于规则的方法

√1950年,“图灵测试”被提出,自然语言处理思想诞生

√认为自然语言处理过程和人类学习认知一门语言类似,NLP停留在经验主义思潮阶段

√只能基于手写规则,处理少量数据

1970s-2000s

√从数学统计的角度预测下个词的出现概率,代表模型如N-Gram等,推理过程非常直观,但是推理结果非常受数据集的影响,容易出现数据稀疏(即空值)等问题

2000-至今

采用基于神经网络的方法

√模型开始像人脑一样学习,2017年以前主要是小模型阶段,2017年Transformer发布之后,模型开始尝试大量数据的训练学习,进入大语言模型阶段,在加入人工干预的反馈基础上,模型效果攀上新的台阶

NLP基础:Word Embedding 词嵌入/词表征

我们如何表示单词的意思?

定义: 含义(meaning) (韦氏词典)

• 由单词、短语等表示的思想

• 一个人想通过使用文字、符号等来表达的想法

• 在写作、艺术作品等作品中表达的思想

Commonest linguistic way of thinking of meaning:

signifier (symbol) signified (idea or thing)

= denotational semantics

tree ⇔{ 福 T,..

WordNet

如何在计算机建立可用的词义?

先前NLP的常用解决方案:例如WordNet,包含同义词集(synonym sets)和上位词列表(hypernyms)的同义词库(“is a”关系)

e.g., synonym sets containing “good”:

from nltk.corpus import wordnet as wn  
poses = {'n': 'noun', 'v': 'verb', 's': 'adj (s)', 'a': 'adj', 'r': 'adv'}  
for synset in wn.synsets("good"):  
    print("\{:}):".format(poses[synset(pos()), "", ".join([l.name() for l in synset.lemmas())])
noun: good  
noun: good, goodness  
noun: good, goodness  
noun: commodity, trade_good, good  
adj: good  
adj (sat): full, good  
adj: good  
adj (sat): estimable, good, honorable, respectable  
adj (sat): beneficial, good  
adj (sat): good  
adj (sat): good, just, upright  
...  
adverb: well, good  
adverb: thoroughly, soundly, good

e.g.,hypernyms of “panda”:

from nltk.corpus import wordnet as wn  
panda = wn.synset("panda.n.01")  
hyper = lambda s: s.hypernyms()  
list(panda.closure(hyper))
[Synset('procyonid.n.01'),  
Synset('carnivore.n.01'),  
Synset('placental.n.01'),  
Synset('mammal.n.01'),  
Synset('vertebrate.n.01'),  
Synset('chordate.n.01'),  
Synset('animal.n.01'),  
Synset('organism.n.01'),  
Synset('living Thing.n.01'),  
Synset('whole.n.02'),  
Synset('object.n.01'),  
Synset('physical_entity.n.01'),  
Synset('entity.n.01')]

WordNet

WordNet等语言资源的问题

• 资源可用,但缺少细微差别:

例如,“proficient 精通” 被列为“good”的同义词这只在某些语境中是正确的

• 缺少某些新的含义:

• 例如,闪电五连鞭, 坤坤, 蕉绿, wicked, badass, nifty, wizard, genius, ninja

基本不可能保持最新!

• 主观性

• 需要人工来创建和调整

• 不能用于准确计算单词相似度(后面介绍)

将单词表示为离散符号

自然语言处理系统把单词作为离散的原子符号

·‘cat’ is encoded as ld537

· ‘dog’ is encoded as Id143

.

Audio Spectrogram

DENSE

Items in adictionary…

Image pixels

DENSE

A document becomesa Bag of Words

0000.200.7000......

and highnalCurseof Dimensionality!

Word, context, ordocument vectors

SPARSE

将单词表示为离散符号

在传统的 NLP 中,我们将单词视为离散符号:

hotel, conference, motel – 局部主义(localist)表示

Means one 1, the rest Os

这样的单词符号可以用 one-hot 向量来表示:

向量维度大小 词典中单词的数量(比如说500,000+)

将单词表示为离散符号

会有什么问题?

例子:在网络搜索中,如果用户搜索“Seattle motel”,需要匹配包含 “Seattle hotel”的文档但是:

这两个向量是正交的,也就没有了它们在自然概念上的相似性(similarity)!

解决方案:

• 可否尝试依靠 WordNet 的同义词列表来获得相似性?

但已知因为意义不完整等问题,似乎不可行

• 反之:学习对向量本身的相似性进行编码

利用上下文语境表示单词

分布语义学: 单词的含义由经常出现在附近的单词给出

• “You shall know a word by the company it keeps” (J. R. Firth 1957: 11)

是现代统计 NLP 最成功的想法之一!

• 当单词 w 出现在文本中时,其上下文(context) 是出现在附近的单词集(在一个固定大小的窗口内).

• 我们利用w的丰富上下文来构建w的表示

…governmentdebt problems turning into banking crisesashappened in 2009…

…saying that Europeneedsunified banking regulationtoreplace thehodgepodge…

…India has just given its banking systema shot in the arm…

词向量

简短但密集的实数向量,大概50-300维

为每个单词构建一个密集向量,使其类似于出现在相似上下文中的单词向量,使用点(数量)积衡量相似性

词向量

为什么要用简短而密集的实数向量?

短向量更容易作为ML系统的特征使用

密集向量可能相比存储显式的计数更泛用

• 更容易捕捉到同义:

• w1同现为“car”,w2同现为“automobile”

• 获得密集向量的不同方法:

• 奇异值分解(SVD)

Word2Vec及其相关方法:“学习”这样的向量

SVD

词嵌入的SVD:共现作为特征

• 行向量描述单词在文本语料库中的使用情况

可以看作是在n维欧氏空间中的点的坐标

太高维了!

getseeuseheareatkill
knife512084030
cat525844626
dog1158310423317
boat593923400
cup98146210
pig121732927
banana11220180

同现矩阵(Co-occurrence Matrix)

词嵌入的SVD:共现作为特征

SVD用于降维

词嵌入的SVD:共现作为特征

我们也可以用其他方法,例如LLE:

Nonlinear dimensionalityreduction by locall linear embedding.Sam Roweis& Lawrence Saul. Science,v.290,2000

词嵌入的SVD:问题

SVD的问题:

在一个?? × ??矩阵上的计算开销是??(????2),其中?? < ??

使其几乎不可能用在有大量单词的词典或文档中

• 难以合并样本外的新单词或文档

神经化词向量

使用神经化词向量表示词义 – 可视化

Word2Vec概述

Word2vec是一个学习词向量的框架(Mikolov et al. 2013)

思想:

• 我们有一个很大的文本语料库(“正文”):一长串单词

固定词汇表中的每个单词都由一个vector表示

• 遍历文本中的每个位置t,其中包含一个中心词c和上下文(“外部”)词 o

• 使用c和o的词向量相似性来计算给定c时,o的概率(反之亦然)

• 不断调整单词向量来最大化此概率

Skip-gram model

(Mikolov et al. 2013)

Word2Vec概述

以一个窗口为例,计算 的过程:

Word2Vec概述

以一个窗口为例,计算 的过程:

Word2Vec目标函数

对每个位置?? = 1, … , ??,在固定大小为??的窗口内预测上下文的单词。

给定中心词 ,数据的似然:

最小化目标函数 最大化预测准确率

Word2Vec目标函数

• 我们要最小化下面的目标函数:

• 问题:如何计算

• 答案:对每个单词w,使用两个向量:

• ????:当w为中心词时

• ????:当w为上下文词时

这两个向量都是所有参数??确定的更大向量的子部分

• 然后对中心词c和上下文单词o:

Word2Vec预测函数

给出概率分布

• 这是个softmax损失函数的例子( 开放区域

• 这个softmax函数把任意????映射为概率分布????

“max”是因为它放大了最大的????的概率

•“soft”是因为它仍然为较小的????赋予了一些概率

在深度学习中频繁用到

但还是比较奇怪的叫法,因为它返回的是个分布

Word2Vec其他细节

为什么是两个向量? → 更易优化,最后两者均取平均值

但是可以实现每个单词只有一个向量的算法

两种变体:

  1. Skip-grams (SG)

预测给定中心词的上下文(“外部”)词(与位置无关)

  1. Continuous Bag of Words (CBOW)

从上下文词(袋)预测中心词

训练损失函数:

  1. 朴素的(naïve)softmax(简单,但输出类别特别多时,计算开销大)

  2. 使用如分层 softmax等优化的变体

  3. 负采样

到目前为止,我们解释了朴素softmax

Word2Vec:Skip-grams和CBOW

CBOW

Skip-qram

⚫ Continuous Bag of Words (CBOW):使用窗口中的上下文单词来预测中心词

Skip-grams: 使用中心词来预测窗口中的上下文单词

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

例子: “The cat sat on floor” (窗口大小为2)

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

Input l

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

Input l

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

Input l

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

Input l

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

Input l

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

Input l

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

Input l

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

Input l

put layer

0ˆy = softmax(z)
0ˆy^sat
0
0
0
1ˆy ∈ R|v|
...
0
0.01
0.02
0.00
0.02
0.01
0.02
0.01
0.7
0.00

CBOW:Continuous Bag of Words

[ Mikolov et al., 2013 ]

Input l

CBOW:目标函数

⚫ Continuous Bag of Words (CBOW):使用窗口中的上下文单词来预测中心词

Skip-Gram模型

[ Mikolov et al., 2013 ]

CBOW和Skip-Gram比较

CBOW不适用于稀有单词,且通常需要较少的数据来训练

— Skip-gram更适用于稀有单词,但需要更多数据来训练模型

ModelVector DimensionalityTraining wordsAccuracy [%]
SemanticSyntacticTotal
Collobert-Weston NNLM50660M9.312.311.0
Turian NNLM5037M1.42.62.1
Turian NNLM20037M1.42.21.8
Mnih NNLM5037M1.89.15.8
Mnih NNLM10037M3.313.28.8
Mikolov RNNLM80320M4.918.412.7
Mikolov RNNLM640320M8.636.524.6
Huang NNLM50990M13.311.612.3
Our NNLM206B12.926.420.3
Our NNLM506B27.955.843.2
Our NNLM1006B34.264.550.8
CBOW300783M15.553.136.1
Skip-gram300783M50.055.953.3

Interesting Result:词语类比

Mikolov et al. (2014)对线性关系进行测试:

a:b : c:?

man:woman :: king:?

+king[0.300.70]

  • man[0.200.20]
  • woman [0.600.30]

queen

[ 0.70 0.80]

Interesting Result: 词语类比

这是单词“king”的词嵌入 (在Wiki百科上训练的GloVe vector):

[ 0.50451 , 0.68607 , -0.59517 , -0.022801, 0.60046 , -0.13498 , -0.08813 , 0.47377 , -0.61798-0.31012 , -0.076666, 1.493 , -0.034189, -0.98173 , 0.68229 , 0.81722 , -0.51874 , -0.31503 ,0.55809 , 0.66421 , 0.1961 , -0.13495 , -0.11476 , -0.30344 , 0.41177 , -2.223 , -1.0756 , -1.0783 , -0.34354 , 0.33505 , 1.9927 , -0.04234 , -0.64319 , 0.71125 , 0.49159 , 0.16754 ,0.34344 , -0.25663 , -0.8523 , 0.1661 , 0.40102 , 1.1685 , -1.0137 , -0.21585 , -0.15155 ,0.78321 , -0.91241 , -1.6106 , -0.64426 , -0.51042 ]

Interesting Result: 词语类比

Interesting Result: 词语类比

其他模型

Word2vec 词向量模型是将文字依照语言惯例转换成对应的向量,其训练出来的词向量会有盲点:

在同性质文件中出现,但是文句距离太远的字无法训练到

有类似字首 / 字尾的词向量,无法在词向量中表示出来

因此有了Glove 与 FastText 两种词向量方式依序解决以上问题。

Figure1:Model architecture offastText fora sentencewith ngram features The features are embedded andaveraged to form the hiddenvariable.

Glove

GloVe(Global Vectors forWord Representation全局向量的词嵌入)是一个全局对数双线性回归模型。

目标:得到单词的词向量,让其尽可能的包含语义与语法信息。输入是语料库(没错,不需要去构建训练集),输出是词向量。GloVe模型的思路是:从语料库中统计共现矩阵,然后根据共现矩阵与GloVe模型来学习词向量。

GloVe: Global Vectors

· Let’s take the global co-occurrence statistics:

· Training faster

· Scalable to very large corpora

Glove

GloVe(Global Vectors forWord Representation全局向量的词嵌入)是一个全局对数双线性回归模型。

目标:得到单词的词向量,让其尽可能的包含语义与语法信息。输入是语料库(没错,不需要去构建训练集),输出是词向量。

GloVe模型的思路是:从语料库中统计共现矩阵,然后根据共现矩阵与GloVe模型来学习词向量。

GloVe: Global Vectors

Nearest words to

  1. frogs

  2. toad

3.litoria

4.leptodactylidae

5.rana

  1. lizard

  2. eleutherodactylus

litoria

leptodactylidae

rana

eleutherodactylus

(Pennington et al, 2o14): GloVe: Global Vectors forWordRepresentation

FastText

FastText是Facebook在2016年所提出的方法。其实,整个模型架构并没有特别创新的地方,和CBOW模型非常地像。其创新的地方在于:子词嵌入的引入。

FastText: Sub-Word Embeddings

· Similar as Skip-gram, but break words into n-grams with to 6

where:3-grams: <wh,whe,her,ere,re>

4-grams: <whe, wher,here, ere>

5-grams: <wher, where, here>

6-grams: <where, where>

Replace Ui · Vj by∑ uq gEn-grams(wi)

· More to come! Contextualized word embeddings

Take-Away

Trained word embeddings available

· word2vec: https://code.google.com/archive/p/word2vec/

· GloVe: https://nlp.stanford.edu/projects/glove/

· FastText: https://fasttext.cc/

Download pre-trained word vectors

Differ in algorithms, text corpora, dimensions, cased/uncased…

机器翻译(Machine Translation)

机器翻译(MT) 任务:将一种语言(源语言)中的句子x翻译为另一种语言(目标语言)中的句子y

x: L’homme est né libre, et partout il est dans les fers

y:Man is born free, but everywhere he is in chains

机器翻译(Machine Translation)

翻译中所要做的事,对模型来说并不简单

1519年600名西班牙人在墨西哥登陆,去征服几百万人口的阿兹特克帝国,初次交锋他们损兵三分之二。

In 1519, six hundred Spaniards landed in Mexico to conquer the Aztec Empire with apopulation of a few million. They lost two thirds of their soldiers in the first clash.

translate.google.com (2009): 1519 600 Spaniards landed in Mexico, millions of people toconquer the Aztec empire, the first two-thirds of soldiers against their loss.

translate.google.com (2013): 1519 600 Spaniards landed in Mexico to conquer the Aztecempire, hundreds of millions of people, the initial confrontation loss of soldiers two-thirds.

translate.google.com (2015): 1519 600 Spaniards landed in Mexico, millions of people toconquer the Aztec empire, the first two-thirds of the loss of soldiers they clash.

机器翻译(Machine Translation)

1990s–2010s: 统计机器翻译 (Statistical Machine Translation)

• SMT曾经是庞大的研究领域

• 最优秀的系统及其复杂

有数百个重要细节

• 系统中具有相当多单独设计的子组件

需要大量的特征工程

• 需要设计大量特征来捕获特定的语言现象

需要翻译和维护额外的资源

• 比如:等价短语(equivalent phrases)表

需要大量人力维护

• 对每两个语言都进行重复的工作

机器翻译 (Machine Translation)

2014

(dramatic reenactment)

从SMT到NMT

• 神经机器翻译(Neural Machine Translation, NMT) 是一种用单个端到端神经网络进行机器翻译的方式

• 这种神经网络架构称为序列到序列模型 (即seq2seq),其包括2个RNN

神经机器翻译NMT

Seq2Seq模型的通用性

• 这里的一般概念是个编码器-解码器(encoder-decoder)模型

• 一个神经网络接受输入并生成神经表征

• 另一个神经网络根据该神经表示生成输出

• 如果输入和输出是序列,我们称其为 seq2seq 模型

• Seq2Seq不止是在MT上好用

• 许多 NLP 任务可以表述为sequence-to-sequence:

• 文本总结 (长文本→ 短文本)

• 对话 (先前的话语 → 接下来的话语)

• 解析 (输入文本 → 以序列的形式输出解析)

• 代码生成 (自然语言 → Python 代码)

Seq2Seq模型的通用性

代码生成 (Nl2Sql 大模型)

8请帮我写一个SQL,查询出课程表中每一个学生的平均成绩

当然可以!以下是一个例子:

SELECT student_id, AVG(score) AS avg_score  
FROM students  
GROUP BY student_id;

这个SQL语句将返回每个学生的平均分数。student_id是课程表中的主键,avg_score为每个学生的平均分数。我们使用了AVG()函数来计算总分除以人数得到的平均分数。注意:上面的例子中假设students包含一个列名为score的学生成绩列。如果实际表中有多个成绩列,则需要修改语句中的相应部分以适应您的实际情况。

数据集公开年份Query数量数据库数涉及链接单轮/多轮注释
ATIS199462801单链路单轮英文
GeoQuery20018771单链路单轮英文
Pertunations20033701单链路单轮英文
Academic20141981单链路单轮英文
Scholar20178171单链路单轮英文
IMDB20171311单链路单轮英文
Yelp20171281单链路单轮英文
Wikipedia20179095726521多链路单轮英文
Advising201839981单链路单轮英文
Spider201810181250多链路单轮英文
N.20002019499745201多链路单轮中文
CSpider20199931165多链路单轮中文
SPartC20194288200多链路多轮英文
CusSQL20192007200多链路多轮英文
DOSQL202023797200多链路单轮中文
CHASE202117940260多链路多轮中文

条件语言模型

• Seq2Seq模型是条件语言模型的一个例子

• 语言模型:因为解码器预测目标句子 的下一个单词

• 条件:因为它的预测也以源句子 为条件

· NMT directly calculates

• 问题:如何训练NMT系统?

(简单的)答案:获取一个大的并行语料库…

• 但现在在“无监督 NMT”、数据增强等方面已经有了很好的工作

NMT

多层深度编码器-解码器机器翻译网络

[Sutskever et al. 2014; Luong et al. 2015]

Conditioning Bottleneck

神经机器翻译NMT的成功

NMT:NLP深度学习的首个巨大成功

NMT从2014年的边缘研究to变成2016年的领先标准方法

• 2014: 第一篇seq2seq论文发表 [Sutskever et al. 2014]

• 2016: 谷歌翻译从SMT转而采用NMT – 且到2018年已全面替代

https://www.nytimes.com/2016/12/14/magazine/the-great-ai-awakening.html

Microsoft

SYSTRAN

beyond language

facebook

Tencent腾讯

搜狗搜索

• Amazing!

• 由上百工程师数年构建的SMT系统,被由 工程师小组仅花费数月构建的NMT系统超越

Seq2Seq的瓶颈问题

Seq2Seq的瓶颈问题

Source sentence (input)

Target sentence (output)

注意力(Attention)

• 注意力提供了解决该瓶颈问题的一个方式

• 核心思想:在解码器的每一步,建立直接的连接到编码器,聚焦于源序列的特定部分

首先,我们通过图表展示,再形式化表示

Seq2Seq和注意力

• 核心思想:在解码器的每一步,建立直接的连接到编码器,聚焦于源序

列的特定部

Seq2Seq和注意力

Seq2Seq和注意力

Seq2Seq和注意力

Seq2Seq和注意力

Seq2Seq和注意力

Seq2Seq和注意力

Seq2Seq和注意力

Seq2Seq和注意力

Source sentence (input)

Seq2Seq和注意力

Source sentence (input)

Seq2Seq和注意力

Seq2Seq和注意力

Seq2Seq和注意力

• 编码器隐藏状态:??1, … , ???? ∈ ℝℎ

• 在时间步??,有解码器隐藏状态???? ∈ ℝℎ

• 对这一步计算注意力分数????:

• 对这一步用softmax来得到注意力分布 (这是个概率分布且和为1):

• 使用 ,对编码器隐藏状态进行加权求和,得到注意力输出 \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf \Psi \mathbf { } \mathbf { } \mathbf { } \mathbf { } \mathbf \Psi \mathbf { } \mathbf { } \mathbf { } \mathbf \Psi \mathbf { } \mathbf { } \mathbf { } \mathbf \Psi \mathbf { } \mathbf { } \mathbf \Psi \Psi \mathbf { } \mathbf { } \mathbf \Psi \mathbf { } \mathbf { } \mathbf \Psi \Psi \mathbf { } \mathbf \Psi \Psi \mathbf { } \mathbf \Psi \Psi \mathbf { } \mathbf \Psi \Psi \mathbf { } \mathbf \Psi \Psi \mathbf { } \mathbf \Psi \mathbf \Psi \Psi \Psi \mathbf { } \mathbf \Psi \mathbf \Psi \Psi \Psi \mathbf \Psi \Psi \mathbf \Psi \Psi \mathbf \Psi \Psi \mathbf \Psi \Psi \mathbf \Psi \Psi \mathbf \Psi \mathbf \Psi \Psi \mathbf \Psi \mathbf \Psi \Psi \mathbf \Psi \mathbf \Psi \Psi \mathbf \Psi \mathbf \Psi \mathbf \Psi \mathbf \Psi \Psi \mathbf \mathbf \Psi \Psi \mathbf \Psi \mathbf \Psi \mathbf \Psi \mathbf \Psi \mathbf \mathbf \Psi \mathbf \Psi \mathbf \mathbf \Psi \Psi \mathbf

• 最后将注意力输出 和解码器隐藏状态 拼接,并和非注意力Seq2Seq模型样继续:

Seq2Seq和注意力

注意力的优势

• 注意力能够显著提升NMT的性能

• 允许解码器专注于源句子的某些部分

• 注意 • 可以在翻译时回顾源句子,而无需记住所有内容

• 注意力解决了瓶颈问题

• 注意力允许解码器直接查看源句子,绕开了瓶颈问题

• 注意力有助于解决梯度消失问题

提供了捷径到更远的状态

• 注意力提供了一些可解释性

可以通过检查注意力分布看到解码器关注的内容

可以直接获得(软)对齐

因为从未明确训练过对齐系统,所以这是很有用的

网络只是自己学会了对齐

注意力的通用性

注意力是一种通用的深度学习技术

• 我们已经看到,注意力是改进机器翻译的序列到序列模型的好方法。

但是:注意力在很多架构中都能够使用(不仅仅是seq2seq) 和很多任务 (不只是MT)

• 对注意力更一般的定义:

• 给定一个向量集合values,以及一个向量query,注意力在query上,计算values加权和的技术

• 有时称为query对values的注意力聚焦.

例如,在 seq2seq+attention 模型中,每个解码器隐藏状态(query)关注所有编码器隐藏状态 (values)

注意力的通用性

注意力是一种通用的深度学习技术

• 对注意力更一般的定义:

• 给定一个向量集合values,以及一个向量query,注意力在query上,计算values加权和的技术

直观上:

• 加权和运算本质是对values向量信息的选择性摘要,由query向量动态决定关注焦点

• 注意力机制实现了任意规模输入→定长表征的转换(values向量),其信息压缩过程始终以query向量为条件

核心结论:

• 注意力已成为深度学习模型中强大、灵活、普适的指路牌与记忆操作范式(2010年后源自神经机器翻译的重大创新)

Transformer

Transformers: Is Attention All We Need?

• 我们知道,注意力可以显著提高循环神经网络的性能。

• 今天,我们将更进一步,问:Is All Attention We Need?

• 剧透: 还差一点!

Attention Is All You Need

Ashish Vaswani*

Google Brain

avaswani@google.com

Noam Shazeer

Google Brain

noam@google.com

NikiParmar*

Google Research

nikip@google.com

Jakob Uszkoreit*

GoogleResearch

usz@google.com

Llion Jones*

GoogleResearch

llion@google.com

Aidan N.Gomez*

University of Toronto

aidan@cs.toronto.edu

Lukasz Kaiser*

Google Brain

lukaszkaiser@google.com

Illia Polosukhin*

illia.polosukhin@gmail.com

Transformer

Transformers是NLP领域的重大革新

• 几乎支撑了现如今所有最先进NLP模型的神经网络架构

Transformer的表现:机器翻译

First, Machine Translation results from the original Transformers paper!

ModelBLEUTraining Cost (FLOPs)
EN-DEEN-FREN-DEEN-FR
ByteNet [18]23.75
Deep-Att + PosUnk [39]39.21.0 · 1020
GNMT + RL [38]24.639.922.3 · 10191.4 · 1020
ConvS2S [9]25.1640.469.6 · 10181.5 · 1020
MoE [32]26.0340.562.0 · 10191.2 · 1020
Deep-Att + PosUnk Ensemble [39]40.48.0 · 1020
GNMT + RL Ensemble [38]26.3041.161.8 · 10201.1 · 1021
ConvS2S Ensemble [9]26.3641.297.7 · 10191.2 · 1021
Transformer (base model)27.338.13.3 · 1018
Transformer (big)28.441.82.3 · 1019

Transformer的表现:大预言模型崛起

Today, Transformer-based models dominate LMsYs Chatbot Arena Leaderboard!

RankModelArena Elo95% CIVotesOrganizationLicenseKnowledge Cutoff
1GPT-4-Turbo-2024-04-091258+4/-426444OpenAIProprietary2023/12
1GPT-4-1106-preview1253+3/-368353OpenAIProprietary2023/4
1Claude 3 Opus1251+3/-371500AnthropicProprietary2023/8
2Gemini 1.5 Pro API-0409-Preview1249+4/-522211GoogleProprietary2023/11
3GPT-4-0125-preview1248+2/-358959OpenAIProprietary2023/12
6Meta Llama 3.70b Instruct1213+4/-615809MetaLlama 3 Community2023/12
6Bard (Gemini Pro)1208+7/-612435GoogleProprietaryOnline
7Claude 3 Sonnet1201+4/-273414AnthropicProprietary2023/8

Gemini / Bard(Google)

ChatGPT/GPT-4(OpenAl)

Claude 3(Anthropic)

Llama 3(Meta)

[Chiang et al., 2024]

Transformer的表现:NLP之外

Protein Folding

[Jumper etal.2021] aka AlphaFold2!

Image Classification

[Dosovitskiy et al.2020]: Vision Transformer (ViT) outperformsResNet-based baselines with substantially lesscompute.

Ours-JFT (ViT-H/14)Ours-JFT (ViT-L/16)Ours-121k (ViT-L/16)BiT-L (ResNet152x4)Noisy Student (EfficientNet-L2)
ImageNet88.55 ± 0.0487.76 ± 0.0385.30 ± 0.0287.54 ± 0.0288.4/88.5*
ImageNet RealL90.72 ± 0.0590.54 ± 0.0388.62 ± 0.0590.5490.55
CIFAR-1099.50 ± 0.0699.42 ± 0.0399.15 ± 0.0399.37 ± 0.06-
CIFAR-10094.55 ± 0.0493.90 ± 0.0593.25 ± 0.0593.51 ± 0.08-
Oxford-IIT Pets97.56 ± 0.0397.32 ± 0.1194.67 ± 0.1596.62 ± 0.23-
Oxford Flowers-10299.68 ± 0.0299.74 ± 0.0099.61 ± 0.0299.63 ± 0.03-
VTAB (19 tasks)77.63 ± 0.2376.28 ± 0.4672.72 ± 0.2176.29 ± 1.70-
TPUv3-core-days2.5k0.68k0.23k9.9k12.3k

ML for Systems

[Zhou et al. 2020]: A Transformer-basedcompiler model (GO-one) speeds up aTransformermodel!

Model (#devices)GO-one (s)HP (s)METISS (s)HDP (s)Run time speed up over HP / HDPSearch speed up over HDP
2-layer RNNLM (2)0.1730.1920.3550.1919.9% / 9.4%2.95x
4-layer RNNLM (4)0.2100.2390.5030.25113.8% / 16.3%1.76x
8-layer RNNLM (8)0.3200.332OOM0.7643.8% / 58.1%27.8x
2-layer GNMFT (2)0.3010.3840.3440.32727.6% / 14.3%30x
4-layer GNMFT (4)0.3500.4690.4660.43234% / 23.4%58.8x
0.4400.562OOM0.69321.7% / 36.5%7.35x
2-layer Transformer-XL (2)0.2230.2680.370.26220.1% / 17.4%40x
4-layer Transformer-XL (4)0.2300.27OOM0.25917.4% / 12.6%26.7x
8-layer Transformer-XL (8)0.3500.46OOM0.42523.9% / 16.7%16.7x
0.2290.312OOM0.30126.6% / 23.9%13.5x
Inception (2) b640.4230.731OOM0.49842.1% / 29.3%21.0x
AmoebaNet (4)0.3940.440.4260.41826.1% / 6.3%58.8x
2-stack 18-layer WaveNet (2)0.3170.376OOM0.35418.6% / 11.7%6.67x
4-stack 36-layer WaveNet (4)0.6590.988OOM0.72150% / 9.4%20x
GEOMEAN----28.5% / 18.2%15x

Transformer:尺度定律(Scaling Law)

Transformer就是我们所需要的吗?

• 使用 Transformer,随着我们同时增加模型大小、训练数据和计算资源,语言建模性能可以顺利提高

• 这种幂律关系已经在多个数量级上被观察到,而且没有放缓的迹象!

• 如果我们继续扩展这些模型(不改变架构),它们最终能否达到或超过人类水平的性能?

Compute

Dataset Size

Parameters

Transformer的动机

为什么要超越递归架构?

Transformer的作者在设计这个架构时有3个想法 :

  1. 最小化(至少别增加)每层的计算复杂度

  2. 最小化任何一对单词之间的路径长度,以促进学习长距离依赖关系

  3. 最大化可并行化的计算量

Transformer的动机

1. 每层的计算复杂度

d时,与我们目前了解的递归模型相比,Transformer 的每层复杂度较低。

Table1:Maximumpath lengths,per-layer complexityand minimum numberof sequential operationsfordifferent layer types. is the sequence length, is therepresentation dimension, isthe kernelsize of convolutions and the size of the neighborhood in restricted self-attention.

Layer TypeComplexity per LayerSequential OperationsMaximum Path Length
Self-AttentionO(n2·d)O(1)O(1)
RecurrentO(n·d2)O(n)O(n)
ConvolutionalO(k·n·d2)O(1)O(logk(n))
Self-Attention (restricted)O(r·n·d)O(1)O(n/r)

Table1of the Transformerpaper.

Transformer的动机

2. 最小化线互距离

• RNN是“从左到右”展开的

• 编码线性局部性,是一种有用的启发式方法

• 相邻的单词通常会相互影响彼此的含义

tasty pizza

• 问题: RNN需要O(sequence length) 的步数来使相隔较远的单词交互

Transformer的动机

2. 最小化线互距离

• O(sequence length)的步数来使相隔较远的单词交互,意味着:

• 难以学习到长距离依赖(因为梯度问题)

• 单词的线性顺序是“内置”的,我们知道顺序结构并不能说明所有情况

Info of chef has gone through O(sequence length) many layers!

Transformer的动机

3. 最大化可并行性

• 前向和后向传播有 O(seq length) 个无法并行化的操作

• GPU(和 TPU)允许一次执行许多独立计算

• 但是,在计算过去的 RNN 隐藏状态之前,不能完全计算未来的 RNN 隐藏状态

• 难以在非常大的数据集上进行训练

• 随着序列长度的增加,问题尤其严重,因为由于内存限制,无法再将更多样本组合成batch

Transformer与(自)注意力

• 概括地说,注意力将每个单词的表示形式视为一个query,用于访问和合并一组values中的信息。

• 之前我们从递归的Seq2Seq模型中了解到了解码器对编码器的关注

• 自注意力(Self-attention) 是编码器-编码器 (或解码器-解码器) 的注意力,其中,每个单词都关注输入(或输出)中的其他单词

All words attend to all words in previous layer; most arrows here are omitted

计算依赖关系

递归(recurrence)vs.注意力(attention)的计算依赖关系

Transformer编码器-解码器

[Vaswani et al., 2017]

编码器:自注意力

自注意力为Transformer的核心构建块

注意力机制:直观

把注意力当成一个“模糊的”或近似的哈希表:

为了查询一个value,我们需要把query和表中的keys进行比较

在哈希表中(如左下图所示):

每个query(哈希) 映射到正好一个key-value对

在(自)注意力中(如右下图所示):

每个query和每个key在不同程度上匹配

以query-key的匹配程度为权重,返回values的和

Transformer编码器的自注意力

• 步骤1:对每个单词 ,计算它的query、key和value:

• 步骤2:计算query和key之间的注意力分数:

步骤3:使用softmax对注意力分数进行归一化:

• 步骤4:计算value的加权和:

Transformer编码器的自注意力

向量化的表示形式

步骤1:将词嵌入堆叠为??,计算query、key和value:

• 步骤2:计算query和key之间的注意力分数:

• 步骤3:使用softmax对注意力分数进行归一化:

• 步骤4:计算value的加权和:

Transformer并非万能

• 问题: 由于没有元素级非线性,自注意力只是简单地对value向量进行重新平均。

• 简单修复:在注意力的输出上添加一个前向层,提供非线性的激活作用 (以及额外的表达能力)

Transformer: 训练Trick

但怎么在深度网络里面应用?

训练Trick #1:残差连接 (Residual Connections)

训练Trick #2:层归一化 (Layer Normalization)

训练Trick #3:缩放点内积注意力 (Scaled Dot Product

Transformer: 训练Trick

Trick #1:残差连接 (Residual Connections)

• 残差连接是计算机视觉领域一个简单但强大的技术

• 深度网络其实在学习恒等函数上,出奇地差

因此,直接传播“未加工的”嵌入到下一层,会有很大的帮助

这能够避免网络“遗忘”或扭曲一些重要的信息,因为它被很多层处理

残差连接也被认为能够平滑损失地貌(Loss Landscape)使训练更加容易

[residuals]

Transformer: 训练Trick

Trick #2:层归一化(Layer Normalization)

问题:对于给定层,由于它从更底层得到的输入持续发生变换,参数难以训练

解决:在每一层内,通过归一化到均值为和标准差为1,减小方差

Mean: Standard Deviation:

Encoder

Repeat 6x(#of Layers)

Transformer: 训练Trick

Trick #3:缩放点内积注意力(Scaled Dot Product Attention)

在层归一化之后,向量元素的均值和方差分别为0和1

然而,极端值的出现仍然会极大影响点积的结果,因为它的方差随维度 缩放

回顾统计理论:

• 和的均值=均值的和

• 和的方差 方差的和

为使方差为1,只需要简单地除以

更新之后的自注意力公式:

Transformer: 主要问题

我们已经在编码器中应用了注意力,但还有一个主要问题

• 考虑下列句子:

• “Man eats small dinosaur.”

词语的顺序似乎完全没有对网络产生影响

这是错误的, 因为词序在许多语言(包括英语)中都有意义

Transformer-Based Encoder-Decoder Model

Man eats small dinosaur

Transformer: 主要问题

解决方法:通过位置编码注入顺序信息

自注意力:位置表征

解决自注意力的第一个问题:序列的顺序

• 由于自注意力不会构建顺序信息,因此我们需要在 key、queries 和 values 中对句子的顺序进行编码。

• 考虑将每个序列索引(sequence index)表示成向量(vector)

• 不需要关心????是由何而来

• 很容易就能将这种信息整合到自注意力块中:只需要把????加到输入中

• 令??෥??、 为旧的values、keys、queries

在深度自注意力网络里面,只需要在第层这样做。此外,除了直接加之外,也可以采用拼接的方式

自注意力:位置表征

基于正弦曲线(sinusoids)的位置表征向量(原始)

• 正弦位置表征(Sinusoidal position representations): 连接不同周期的正弦函数:

• 优点:

• 周期性表明 “绝对位置”可能没有那么重要

当周期重新开始时,或许可以外推到更长的序列

• 缺点:

• 不可学习

扩展:相对位置编码+自注意力

关键: 最突出的位置信息是单词之间的关系(例如,“cat”是“eat”之前的单词),而不是它们的绝对位置(例如, “cat”是单词 2)

Original Self-Attention Output:

where aij exp eij

Relation-Aware Self-Attention Output:

kEN-DE BLEU
012.5
125.5
225.8
425.9
1625.8
6425.9
25625.8

We then learn relative position representations

多头自注意力

思想:进行多次自注意力操作然后将它们的结果结合起来

[Vaswani et al. 2017]

Wizards of theCoast,Artist:Todd Lockwood

Transformer编码器:多头自注意力

• 如果想要一次查看句子中的多个地方怎么办?

• 对于单词??,自注意力 “查看” 最高的地方, 但如果因为不同的原因,想要查看不同的??呢?

• 通过构建多个 、??矩阵,设计多个自注意力“头”

• 令 ,其中 为注意力头的个数,ℓ的范围1到

• 每个注意力头独立地进行注意力操作:

• ????????????ℓ = ?????????????? (????ℓ??ℓ⊤??⊤ ∗ ????ℓ),其中????????????ℓ ∈ ℝ??/ℎ

• 然后组合所有头的输出

• ???????????? = ??[????????????1; … ; ????????????ℎ],其中?? ∈ ℝ??×??

• 每个头“查看”不同的东西,并构造不同的value向量

Credittohttps://jalammar.github.io/illustrated-transformer/

Transformer编码器:多头自注意力

至此,编码器完成,对于解码器:

Transformer解码器:掩码多头自注意力

• 问题:如何防止解码器“作弊”?如果我们有一个语言建模目标,那么网络就不能向前看并 “看到” 答案吗?

• 解决:掩码多头自注意力。概括地说,我们从模型中隐藏(屏蔽)有关未来词元(Token)的信息。

Transformer Transformer 解码器:掩码多头自注意力

编码器-解码器注意力

可以看到自注意力即key、query、value均有相同的来源

在解码器中,注意力看起来更像我们之前看过的

令ℎ1, … , ℎ?? 为Transformer编码器的输出向量,

为Transformer解码器的输入向量,???? ∈ ℝ??

那么,key和value则由编码器取得(像一段记忆一样):

• 并且query从解码器取得,有:

解码器:收尾

解码器:收尾

添加一个前馈层 (使用残差连接以及层归一化)

解码器:收尾

添加一个前馈层 (使用残差连接以及层归一化)

添加最终线性层,将嵌入投影到一个比词汇量大小更长的向量中(对数概率)

解码器:收尾

添加一个前馈层 (使用残差连接以及层归一化)

添加最终线性层,将嵌入投影到一个比词汇量大小更长的向量中(对数概率)

添加Softmax层,生成下一个可能单词的概率分布

Transformer完整架构

谢谢大家!

相关课程资源及参考文献请浏览

超算习堂:https://easyhpc.net/course/143