"Attention Is All You Need "中介绍的Transformers架构

248 阅读20分钟

论文 "Attention Is All You Need "中介绍的Transformers架构,改变了创建更复杂和先进的NLP模型的情景。NLP中的Transformer是一个新颖的架构,旨在解决序列到序列的任务,同时轻松地处理长距离的依赖关系。以下是关于变形器的面试的重要问题。

内容表

  1. 多项选择题
  2. 描述性问题
  3. 实际问题

多项选择题

1.什么是 "迁移学习"?

a. 通过在同一数据集上训练一个预训练的模型,将其知识转移到一个新的模型上
。通过用第一个模型的权重初始化第二个模型,将一个预训练过的模型的知识转移到一个新的模型上
。通过建立与第一个模型相同结构的第二个模型,将预训练过的模型的知识转移到一个新的模型中。

答案:选项B:通过用第一个模型的权重初始化第二个模型,将预训练过的模型的知识转移到新的模型中。

**解释。**当第二个模型在一个新的任务上进行训练时,它第一个模型的知识转移到新的模型上。

2.2.真或假?一个语言模型的预训练通常不需要标签。

a.真
b.错
c.没有足够的信息

答案:选项a.真

**解释。**预训练通常是自我监督的,这意味着标签是从输入中自动创建的(如预测下一个词或填入一些被掩盖的词)。

3.你会使用哪种类型的模型来完成生成文本的提示?

a.一个编码器模型
b.一个解码器模型
c.一个序列到序列的模型

答案:选项B. 解码器模型

**解释。**解码器模型完全适用于根据提示生成文本。

4.你会使用哪种类型的模型来进行文本的总结?

a.编码器模型
b.解码器模型
c.序列到序列的模型

答案:选项C.序列到序列的模型

**解释。**序列到序列的模型完全适用于总结任务。

5.你会使用哪种类型的模型来根据某些标签对文本输入进行分类?

a.编码器模型
b.解码器模型
c.序列到序列的模型

答案:选项A. 编码器模型

**解释。**编码器模型产生的是整个句子的表征,它完全适用于像分类这样的任务。

6.在一个模型中观察到的偏差可能来自什么地方?

a.该模型是一个预训练模型的微调版本,它从预训练模型中获得了它的偏见
。模型训练的数据是有偏见的
。该模型所优化的指标是有偏差的。

答案:选项b.该模型所训练的数据是有偏见的。

**解释。**这是最明显的偏差来源,但不是唯一的。

7.语言建模管道的顺序是什么?

a.首先是模型,它处理文本并返回原始预测值。然后,标记器对这些预测进行理解,并在需要时将其转换为文本
。首先是标记器,它处理文本并返回ID。模型处理这些ID,并输出一个预测,可以是一些文本
。符号化器处理文本并返回ID。模型处理这些ID并输出一个预测。然后可以再次使用标记器将这些预测值转换为一些文本。

答案:选项c:标记器处理文本并返回ID。模型处理这些ID并输出一个预测。然后可以再次使用标记器将这些预测值转换为一些文本。

**解释。**标记化器可用于标记化和去标记化。

8.基本转化器模型输出的张量有多少个维度,它们是什么?

a.2:序列长度和批量大小
b.2:序列长度和隐藏大小
C

3: 序列长度、批量大小和隐藏大小

答案:选项C。3:序列长度、批量大小和隐藏大小。

**解释:由转化器输出的矢量。**变换器模块输出的向量通常很大。它一般有三个维度。

批量大小。一次处理的序列数量(在我们的例子中是2)。
序列长度。序列的数字表示的长度(在我们的例子中是16)。
隐性大小。每个模型输入的向量尺寸。

9.对序列分类模型输出的对数应用SoftMax函数的意义是什么?

a.它软化了对数,使它们更可靠
。它应用了一个下限和上限,所以它们是可以理解的
。然后,输出的总和为1,从而得到一个可能的概率解释。
B和C都是

答案:选项d. B和C都是

**解释:。**Softmax是一个激活函数,它将数字/对数缩放为概率。由此产生的数值被约束在0和1之间。

10.BERT模型期望如何处理一对句子?

a.Tokens_of_sentence_1 [SEP] Tokens_of_sentence_2
b

[CLS] Tokens_of_sentence_1 Tokens_of_sentence_2
c

[CLS] Tokens_of_sentence_1 [SEP] Tokens_of_sentence_2 [SEP]
D

[CLS] Tokens_of_sentence_1 [SEP] Tokens_of_sentence_2

答案:选项c. [CLS] Tokens_of_sentence_1 [SEP] Tokens_of_sentence_2 [SEP] 。

**解释:。**BERT需要用一些额外的元数据对输入进行按摩和装饰。

  • 令牌嵌入。在第一个句子的开头,在输入的单词标记中加入一个[CLS]标记,在每个句子的结尾插入一个[SEP]标记。
  • 段落嵌入。在每个标记上添加一个表示句子A或句子B的标记。这使得编码器能够区分不同的句子。
  • 位置嵌入。一个位置嵌入被添加到每个标记中,以表明其在句子中的位置。

11.整理函数的目的是什么?

a.它确保数据集中的所有序列具有相同的长度
。 它把所有的样本放在一个批次中
。 它对整个数据集进行预处理。
它截断了数据集中的序列。

答案:选项b.它将所有的样本放在一个批次中。

解释。 你可以把拼合函数作为DataLoader的一个参数来传递。我们使用了DataCollatorWithPadding函数,该函数将一个批次中的所有项目垫起来,使它们具有相同的长度。

12.TrainingArguments的作用是什么?

a. 它包含所有用于训练和评估训练器的超参数
。 它指定了模型的大小
。 它只包含用于评估的超参数
。 它只包含用于训练的超参数。

答案:选项a.它包含所有用于训练和评估的超参数,与训练器一起使用。

**解释。**训练参数是一组与训练循环有关的参数,这些参数被传递到训练器实例中。TrainingArguments用于访问训练中的所有自定义点。

13.以下哪项任务可以作为标记分类问题的框架?

a.找出一个句子中的语法成分
。找出一个句子中提到的人。
找出一个句子的语法是否正确
D

A和B都是

答案:选项D.A和B都是

**解释。**句子中的词可以被标记为名词、动词等。在一个句子中,一个词可以被标记为人或不是人。

14.14. "领域适应 "是什么意思?

a.它是指我们在一个数据集上运行一个模型,并得到该数据集中每个样本的预测结果
。当我们在一个数据集上训练一个模型时
。当我们在一个新的数据集上对预训练的模型进行微调时,它给出的预测更适应该数据集
D.当我们把错误分类的样本添加到数据集上,使我们的模型更加稳健。

答案:选项C:当我们在一个新的数据集上对预训练的模型进行微调时,它给出的预测结果更适应于该数据集。

**解释。**该模型使其知识适应新的数据集。

15.在一个被掩盖的语言建模问题中的标签是什么?

a.输入句子中的一些标记被随机屏蔽,标签是原始输入标记
。输入句子中的一些标记被随机屏蔽,标签是原始输入标记,向左移动
。输入句子中的一些标记被随机掩盖,标签是该句子是正面还是负面的
。两个输入句子中的一些标记被随机掩盖,标签是这两个句子是否相似。

答案:选项A,输入句子中的部分标记被随机屏蔽,标签是原始输入标记。

**解释。**遮蔽语言建模也被称为填空任务,因为它预测的是一个序列中的遮蔽标记。

16.这些任务中的哪一个可以被看作是一个序列到序列的问题?

a.撰写长篇文件的短评
b.回答关于一个文件的问题
c.将一篇文章的中文翻译成英文
d
.
以上都是

答案:选项d.以上都是

**解释。**序列到序列(通常缩写为seq2seq)模型是一类特殊的循环神经网络架构,我们通常使用(但不限于此)来解决复杂的语言问题,如机器翻译、问题回答、创建聊天机器人、文本总结等。

17.你应该在什么时候预训练一个新的模型?

a.当没有针对你的特定语言的预训练模型时
b.当你对你所使用的预训练模型的偏差有顾虑时
c.当你有大量的数据可用时,即使有一个预训练过的模型可以用它来工作
D

A和B都有

答案:选项D,A和B都是

**解释一下。**但你必须非常确定你将用于训练的数据确实比较好。

18.为什么在调用Transformer模型的compile()时,通常不需要指定损失?

a.因为Transformer模型是用无监督学习来训练的
b.因为模型的内部损失输出是默认使用的
C.因为我们在训练后计算指标,而不是在训练后计算指标
D.因为损失是在model.fit() ,而不是指定的

答案:选项b.因为模型的内部损失输出是默认使用的。

**解释。**在Keras中,训练模型的标准方法是创建模型,然后用优化器和损失函数编译()它,最后再拟合()它。如果你给compile()指定一个损失参数,那么模型将使用该参数而不是默认的损失。

19.什么是归一化?

a.它是标记器在初始阶段对文本进行的任何清理工作
。这是一种数据增强技术,包括通过删除罕见的词语使文本更加正常
。这是最后的后处理步骤,标记化器在这里添加特殊标记
。是指通过减去平均数并除以标准差,使嵌入的平均值为0,标准差为1。

答案:选项a:是指标记器在初始阶段对文本进行的任何清理。

**解释:**例如,它可能涉及删除重音或空白,或小写输入。

20.问题回答管道如何处理长上下文?

a.它并不真正处理,因为它在模型所能接受的最大长度上截断长上下文
。它将上下文分成几个部分,并对得到的结果进行平均
。它将上下文分成几个部分(有重叠),并为每个部分的答案找到最大的分数
。它把上下文分成几个部分(不重叠,以提高效率),并找出每个部分的答案的最高分。

答案:选项C.它将背景分成几个部分(有重叠),并在每个部分找到答案的最高分。

**解释。**回答问题的管道允许我们将上下文分割成较小的块,指定最大长度。为了确保我们不会在错误的地方分割上下文以使我们能够找到答案,它还包括各块之间的一些重叠。

描述性问题

1.什么是NLP?

自然语言处理(NLP)是指计算机科学的一个分支,更具体地说,是人工智能或AI的一个分支,它关注的是让计算机有能力以与人类大致相同的方式理解文本和口语。

NLP将计算语言学--基于规则的人类语言建模--与统计学、机器学习和深度学习模型相结合。这些技术结合在一起,使计算机能够处理文本或语音数据形式的人类语言,并 "理解 "其全部含义,包括说话者或作者的意图和情绪。

2.什么是seq2seq模型?

顾名思义,seq2seq将一个词的序列(句子或句子)作为输入,并生成一个词的输出序列。它是通过使用递归神经网络(RNN)来实现的。虽然RNN的普通版本很少被使用,但它的更高级版本,即LSTM或GRU被使用。它通过在每个时间点接受2个输入来发展单词的上下文。一个来自用户,另一个来自其以前的输出,因此被称为循环性(输出作为输入)。

它主要有两个组成部分,即编码器和解码器,因此有时它被称为编码器-解码器网络。

编码器:它使用深度神经网络层,并将输入词转换为相应的隐藏向量。每个向量代表当前单词和单词的上下文。

解码器:它与编码器类似。它把编码器产生的隐藏向量、它自己的隐藏状态和当前单词作为输入,产生下一个隐藏向量,最后预测下一个单词。

3.注意机制的基础是什么?

在心理学中,注意力是指有选择地集中于一个或几个事物而忽略其他事物的认知过程。

神经网络被认为是以简化的方式模仿人脑行动的一种努力。注意机制也是试图在深度神经网络中实现有选择地集中于少数相关事物,而忽略其他事物的相同行动。

4.解释注意力的必要性

香草型编码器-解码器架构只将最后的隐藏状态从编码器传递给解码器。这导致的问题是,信息必须被压缩成一个固定长度的向量,而信息可能在这种压缩中丢失。特别是在序列中早期发现的信息,在整个序列被处理后往往会被 "遗忘"。双向层的增加通过以相反的顺序处理输入来弥补这一缺陷。虽然这对较短的序列有帮助,但对长的输入序列来说,这个问题仍然存在。注意力的发展使解码器能够关注整个序列,从而在解码步骤中使用整个序列的背景。

5.为什么选择基于注意力的模型而不是基于递归的模型?

RNN是按顺序工作的,这意味着为了计算一个句子的第二个词(第二个时间步骤),我们需要计算第一个隐藏向量(第一个时间步骤)。然后为了计算t时间的隐藏状态,你总是要等待t-1的结果,所以我们不能并行化。此外,RNN意味着大量的计算需要大量的资源。

带有注意力的RNN改善了对较长句子的时间依赖性的提取,但在长序列中仍然很困难。在一个简单的编码器-解码器架构中,解码器应该只通过查看编码器步骤的最终输出来开始进行预测,该步骤具有浓缩的信息。另一方面,基于注意力的架构在每个时间步骤中关注每个编码器节点的每个隐藏状态,然后在决定哪一个更有信息量后进行预测。

6.什么是自我注意?

自我注意,有时也被称为内部注意,是一种与单个序列的不同位置相关的注意机制,以便计算出该序列的表示。自我注意允许模型查看输入序列中的其他词,以更好地理解序列中的某个词。

7.什么是转化器?

转化器是一种深度学习模型,它采用了自我关注的机制,对输入数据的每一部分的重要性进行不同的加权。它主要用于自然语言处理(NLP)和计算机视觉(CV)领域。Transformer是第一个完全依靠自我注意来计算其输入和输出的表征的转导模型,不使用序列对齐的RNN或卷积。这里,"转导 "是指将输入序列转换为输出序列。Transformer背后的想法是完全用注意力和递归来处理输入和输出之间的依赖关系。

8.变换器的应用有哪些

  • 法律--在分析法律记录时
  • 保健部门--分析医疗记录和药物相互作用
  • 虚拟助理
  • 机器翻译
  • 文本总结
  • 文档生成
  • 命名实体识别(NER)
  • 生物学序列分析
  • 视频理解。

9.解释变换器结构

编码器和解码器是转化器的构件。编码器块将输入字的序列变成一个矢量,而解码器将矢量转换为序列。

编码器结构有两层。自我关注和前馈。编码器的输入首先经过一个自我注意层,然后自我注意层的输出被送入前馈神经网络。顺序数据具有时间性特征。它标志着每个词都拥有关于其他词的一些位置。

解码器结构有三层。自我关注,编码器-解码器关注,以及前馈。解码器有自我注意和前馈层,这在编码器中也有,但在它们之间有一个注意层,帮助解码器关注输入句子的相关部分。

10.变换器的局限性

Transformer无疑是对基于RNN的seq2seq模型的巨大改进。但它也有自己的局限性。

  • 注意力只能处理固定长度的文本串。在输入系统之前,文本必须被分割成一定数量的段或块。
  • 这种对文本的分块会导致上下文的断裂。例如,如果一个句子从中间被拆开,那么就会失去大量的上下文。换句话说,文本被分割而不尊重句子或任何其他语义边界。

11.解释一下BERT

BERT是一个用于自然语言处理(NLP)的开源机器学习框架。BERT旨在通过使用周围的文本建立上下文,帮助计算机理解文本中含糊不清的语言的含义。BERT框架使用维基百科的文本进行了预训练,并可以用问题和答案数据集进行微调。

历史上,语言模型只能按顺序阅读文本输入--从左到右或从右到左--但不能同时进行这两种阅读。BERT是不同的,因为它被设计为可以同时从两个方向读取。这种能力通过引入变形金刚而得以实现,被称为双向性。

利用这种双向性能力,BERT在两个不同但相关的NLP任务上进行了预训练。屏蔽语言建模和下一句话预测。

12.解释掩蔽语言模型(MLM)

掩蔽语言模型从输入中随机掩蔽一些标记,其目的是仅根据其上下文预测被掩蔽单词的原始词汇ID。与从左到右的语言模型预训练不同的是,MLM的目标允许表示融合左边和右边的上下文,这使得我们可以预训练一个深度的双向转化器。

13.解释下一句话的预测

一般来说,语言模型并不能捕捉到连续句子之间的关系。BERT也对这项任务进行了预训练。对于语言模型的预训练,BERT使用成对的句子作为其训练数据。

例如,设想我们有一个由100,000个句子组成的文本数据集,我们想用这个数据集来预训练BERT语言模型。因此,将有50,000个训练实例或句子对作为训练数据。

  • 对于50%的句子对,第二句实际上是第一句的下一句。
  • 对于剩下的50%的句子对,第二句将是语料库中的一个随机句子。
  • 第一种情况的标签是 "IsNext",第二种情况是 "NotNext"。

14.什么是命名实体识别(NER)?

命名实体识别是信息检索的一部分,是一种对所提供的非结构化数据中存在的实体进行定位和分类并将其转换为预定义的类别的方法。

15.什么是标记化?

符号化是任何NLP管道中的第一步。标记化只不过是将原始文本分割成小块的单词或句子,称为标记。如果文本被分割成单词,那么它被称为 "单词标记化",如果它被分割成句子,那么它被称为 "句子标记化"。一般来说,"空格 "用于执行单词标记化,而 "句号、感叹号和换行符 "等字符则用于句子标记化。我们必须根据手中的任务选择适当的方法。

实际问题

1.如何在Python笔记本上设置转化器的工作环境?

前往你的Jupyter笔记本,在本地或在Google Colab(首选)。我们将使用pip进行安装,它是Python的软件包管理器。

!pip install transformers

你可以通过在你的Python运行时中导入该包来确保该包被正确安装。

import transformers

2.下面的代码将返回什么?

from transformers import pipeline

ner = pipeline("ner", grouped_entities=True)
ner("My name is Derek and I live in Paris.")

命名实体识别(NER)包括从文本中提取 "实体"。它将返回代表人物或地点的词。此外,在grouped_entities = True的情况下,它将把属于同一实体的词组合在一起,比如 "巴黎"。

OUTPUT:
[{'结束':16,
'entity_group':'PER',
'core': 0.9991296,
'start':11,
'word': 'Derek'},
{'end':36,
'entity_group':'LOC',
'分数': 0.99867034,
'起始':31,
'word': 'Paris'}]

3.下面这个片段的输出是什么?

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
tokenizer.tokenize("Hello!")

符号化是将一个较大的实体分解成其组成单位的过程。该代码返回一个字符串的列表,每个字符串都是一个标记。

OUTPUT:['Hello', '!]

4.演示标记化器--标记化、编码和解码

标记器是NLP管道的核心组件之一。它们有一个目的:将文本翻译成可由模型处理的数据。模型只能处理数字,所以标记器需要将我们的文本输入转换为数字数据。

标记化
标记化过程是由标记化器的tokenize()方法完成的。

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
sequence = "Hello world"
tokens = tokenizer.tokenize(sequence)
print(tokens)

输出。['Hello', 'world']

这个标记化器是一个子词标记化器:它拆分单词,直到获得可以用其词汇表表示的标记。

编码:从标记到输入ID的转换
对输入ID的转换是由convert_tokens_to_ids()标记器方法处理的。

ids = tokenizer.convert_tokens_to_ids(tokens)
print(ids)

输出:[8667, 1362]

这些输出,一旦转换为适当的框架张量,就可以作为模型的输入。

解码
解码是反过来的:从词汇索引中,我们想得到一个字符串。这可以通过decode()方法来完成,如下所示。

decoded_string = tokenizer.decode(ids)
print(decoded_string)

输出:你好,世界