????大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流????
????个人主页-Sonhhxg_柒的博客_CSDN博客 ????
????欢迎各位→点赞???? + 收藏⭐️ + 留言????
????系列专栏 - 机器学习【ML】 自然语言处理【NLP】 深度学习【DL】
????foreword
✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。
如果你对这个系列感兴趣的话,可以关注订阅哟????
数百万到十亿参数的变压器模型似乎是没有人能解释的巨大黑匣子。结果,许多开发人员和用户在处理这些令人兴奋的模型时有时会感到气馁。然而,最近的研究已经开始使用创新的尖端工具来解决这个问题。
描述所有可解释的 AI 方法和算法超出了本书的范围。因此,本章将专注于为 Transformer 模型开发人员和用户提供洞察力的即用型可视化界面。
本章首先BertViz
由Jesse Vig安装和运行。Jesse 在构建可视化界面方面做得非常出色,该界面显示了 BERT 转换器模型的注意力头中的活动。BertViz 与 BERT 模型进行交互,并提供精心设计的交互界面。
我们将继续专注于使用语言可解释性工具( LIT ) 可视化转换器模型的活动。LIT 是一种非探测工具,可以使用 PCA 或 UMAP 来表示变压器模型预测。我们将通过 PCA 并使用 UMAP。
最后,我们将通过字典学习可视化转换器通过 BERT 模型层的旅程。Local Interpretable Model-agnostic Explanations ( LIME ) 提供了实用的函数来可视化转换器如何学习如何理解语言。该方法表明,Transformer 通常从学习一个单词开始,然后是句子上下文中的单词,最后是远程依赖。
在本章结束时,您将能够与用户交互,以可视化的方式展示 Transformer 模型的活动。BertViz、LIT 和通过字典学习实现可视化还有很长的路要走。但是,这些新兴工具将帮助开发人员和用户了解变压器模型的工作原理。
本章涵盖以下主题:
- 安装和运行 BertViz
- 运行 BertViz 的交互界面
- 探测法和非探测法的区别
- 主成分分析( PCA )提醒
- 运行 LIT 分析变压器输出
- 介绍石灰
- 通过字典学习运行变压器可视化
- 词级多义消歧
- 可视化低级、中级和高级依赖项
- 可视化关键变压器因素
我们的第一步将从安装和使用 BertViz 开始。
使用 BertViz 进行变压器可视化
Jesse Vig的文章,A Multiscale Visualization of Attention in the Transformer Model,2019,承认了 Transformer 模型的有效性。然而,Jesse Vig解释说,解读注意力机制具有挑战性。该论文描述了可视化工具 BertViz 的流程。
BertViz 可以可视化注意力头活动并解释 Transformer 模型的行为。
BertViz 最初设计用于可视化 BERT 和 GPT-3 模型。在本节中,我们将可视化 BERT 模型的活动。
现在让我们安装并运行 BertViz。
运行 BertViz
打开BertViz.ipynb
笔记本在Chapter14
本书 GitHub 存储库的目录中。
第一步是安装BertViz
和要求。
第 1 步:安装 BertViz 并导入模块
笔记本安装BertViz
,拥抱脸变压器,以及实施的其他基本要求该程序:
!pip install bertViz
from bertViz import head_view, model_view
from transformers import BertTokenizer, BertModel
现在导入了头视图和模型视图库。我们现在将加载 BERT 模型和标记器。
第 2 步:加载模型并检索注意力
BertViz 支持 BERT、GPT-2、RoBERTa 等楷模。你可以在 GitHub 上咨询 BertViz欲了解更多信息:https ://github.com/jessevig/BertViz 。
在本节中,我们将运行一个bert-base-uncased
模型和一个预训练的分词器:
# Load model and retrieve attention
model_version = 'bert-base-uncased'
do_lower_case = True
model = BertModel.from_pretrained(model_version, output_attentions=True)
tokenizer = BertTokenizer.from_pretrained(model_version, do_lower_case=do_lower_case)
我们现在输入我们的两个句子。您可以尝试不同的序列来分析模型的行为。sentence_b_start
步骤:5 模型视图:
sentence_a = "A lot of people like animals so they adopt cats"
sentence_b = "A lot of people like animals so they adopt dogs"
inputs = tokenizer.encode_plus(sentence_a, sentence_b, return_tensors='pt', add_special_tokens=True)
token_type_ids = inputs['token_type_ids']
input_ids = inputs['input_ids']
attention = model(input_ids, token_type_ids=token_type_ids)[-1]
sentence_b_start = token_type_ids[0].tolist().index(1)
input_id_list = input_ids[0].tolist() # Batch index 0
tokens = tokenizer.convert_ids_to_tokens(input_id_list)
第 3 步:头视图
head_view(attention, tokens)
第一层(第 0 层)的文字不是实际的标记,但界面是有教育意义的。每层的 12 个注意力头以不同的颜色显示。默认视图设置为第 0 层,如图 14.1所示:
图 14.1:注意力头的可视化
我们现在准备探索注意力头。
第 4 步:处理和显示注意力头
两列上方的每种颜色令牌代表一个注意力头的层数。选择一个层号并单击一个注意头(颜色)。
句子中的单词在注意力中被分解为标记。但是,在本节中,这个词tokens
泛指words
帮助我们了解变压器头的工作原理。
我专注animals
于图 14.2中的单词:
图 14.2:选择层、注意力头和token
BertViz
表明模型animals
在和几个之间建立了联系字。这是正常的,因为我们只在第 0 层。
第 1 层开始隔离单词animals
是相关的,如图 14.3所示:
图 14.3:可视化第 1 层注意力头 11 的活动
注意头11建立连接animals
, ,people
和之间adopt
如果我们点击cats
,一些有趣的连接如图 14.4所示:
图 14.4:可视化猫和其他标记之间的联系
该词cats
现在与 相关联animals
。这种联系表明该模型正在学习猫是动物。
您可以更改句子,然后单击图层和注意力头以可视化转换器如何建立连接。当然,你会发现限制。好的和坏的连接将告诉你如何变压器工作和失败。这两种情况都有解释价值变压器的行为方式以及为什么它们需要更多的层、参数和数据。
让我们看看如何BertViz
显示模型视图。
第 5 步:模型视图
model_view(attention, tokens, sentence_b_start)
BertViz
在一个视图中显示所有层和头,如图 14.5中的视图摘录所示:
图 14.5:BertViz 的模型视图模式
如果单击其中一个头部,您将获得带有单词到单词和句子到句子选项的头部视图。然后,您可以查看注意力头,以了解 Transformer 模型如何变得更好表示,因为它通过层进行。例如,图 14.6显示了第一层中注意力头的活动:
图 14.6:模型较低层中注意力头的活动
有时,表示法会在分隔符、、[SEP]
和单词之间建立联系,这没有多大意义。然而,有时令牌并不是在每一层的每个注意力头中都被激活。此外,变压器模型的训练水平限制了解释的质量。
无论如何,BertViz
对于 Transformer 模型来说,它仍然是一个有趣的教育工具和可解释性工具。
现在让我们运行直观的 LIT 工具。
LIT
LIT的可视化界面将帮助您找到模型处理不正确的示例,深入研究类似示例,查看更改上下文时模型的行为方式,以及与转换器模型相关的更多语言问题。
LIT 不像显示的那样显示注意力头的活动BertViz
。但是,值得分析为什么会出错并尝试找到解决方案。
您可以选择统一流形逼近和投影( UMAP ) 可视化或 PCA 投影仪表示。PCA 将在特定方向和幅度上进行更线性的投影。UMAP 会将其预测分解为小型集群。这两种方法的意义取决于您在分析模型输出时想要走多远。您可以同时运行两者并获得相同模型和示例的不同视角。
本节将使用 PCA 运行 LIT。让我们先简要提醒一下 PCA 的工作原理。
PCA
想象一下你在你的厨房里。您的厨房是一个 3D 笛卡尔坐标系。你厨房里的物品也都在特定的x、y、z坐标上。
您想烹饪食谱并在厨房桌子上收集食材。您的餐桌是您厨房中食谱的更高层次的表示。
厨房桌子也使用笛卡尔坐标系。但是,当您提取厨房的主要特征来表示厨房餐桌上的食谱时,您就是在执行 PCA。这是因为您已经展示了适合制作特定配方的主要成分。
相同的表示可以应用于 NLP。例如,字典是一个单词列表。但是,意味着某事的词一起构成了序列的主要成分的表示。
- Variance:数据集中单词的数值方差;例如其含义的频率和频率。
- 协方差:多个词的方差与数据集中另一个词的方差有关。
- 特征值和特征向量:为了获得笛卡尔系统中的表示,我们需要协方差的向量和幅度表示。特征向量将提供向量的方向。特征值将提供它们的大小。
- 导出数据:最后一步是通过将行特征向量乘以行数据,将特征向量应用于原始数据集:
- 要显示的数据= 特征向量行 * 数据行
PCA 投影提供了要分析的数据点的清晰线性可视化。
现在让我们运行 LIT。
运行 LIT
您可以在线运行 LIT或在 Google Colaboratory 笔记本中打开它。点击以下访问这两个选项的链接:
教程页面包含要分析的几种类型的 NLP 任务:
在本节中,我们将在线运行 LIT 并探索情感分析分类器:
点击自己探索这个演示,您将进入直观的 LIT 界面。变压器模型是一个小型变压器模型:
图 14.7:选择模型
您可以通过单击模型来更改模型。您可以直接在 Hugging Face 上测试此类模型和类似模型在其托管的 API 页面上:
sshleifer/tiny-distilbert-base-uncased-finetuned-sst-2-english · Hugging Face
NLP 模型可能会根据后续更新在 LIT 的在线版本上发生变化。概念保持不变,只是模型发生了变化。
让我们从选择 PCA 投影仪和每个示例的情感分析的二进制0
或分类标签开始:1
图 14.8:选择投影仪和标签类型
然后我们转到数据表并单击一个句子及其分类标签:
图 14.9:选择一个句子
该算法是随机的,因此输出可以从一次运行到另一次变化。
这句话也将出现在数据点编辑器中:
图 14.10:数据点编辑器
数据点编辑器允许您更改句子的上下文。例如,您可能想要找出本应属于一类但最终归入另一类的反事实分类出了什么问题。您可以更改句子的上下文,直到它出现在正确的类中,以了解模型的工作原理以及出错的原因。
句子将出现在 PCA 投影仪中,并带有它的分类:
图 14.11:正集群中的 PCA 投影仪
您可以单击 PCA 投影仪中的数据点,句子将出现在您选择的句子下方的数据点编辑器中。这样,您可以比较结果。
在 LIT 中获得的结果并不总是令人信服。然而,LIT 在许多情况下提供了有价值的见解。此外,参与这些新兴工具和技术也很重要。
现在让我们通过字典学习来可视化 Transformer 层。
通过字典学习实现变压器可视化
Transformer因素
Transformer 因子是一个嵌入包含上下文化单词的向量。一个没有上下文的词可以有很多含义,造成多义问题。例如,单词separate
可以是动词或形容词。此外,separate
可以表示断开、区分、分散,还有许多其他定义。
Yun等人,2021 年,因此创建了一个带有上下文单词的嵌入向量。词嵌入向量可以用词因子的稀疏线性表示来构造。例如,根据数据集中句子的上下文,separate
可以表示为:
separate=0.3" keep apart"+"0.3" distinct"+ 0.1 "discriminate"+0.1 "sever" + 0.1 "disperse"+0.1 "scatter"
确保线性表示仍然是稀疏的,我们不会添加 0 因子来创建具有 0 值的巨大矩阵。因此,我们不包括无用的信息,例如:
separate= 0.0"putting together"+".0" "identical"
关键是通过强制因子的系数大于 0 来保持表示稀疏。
为每一层检索每个单词的隐藏状态。由于每一层都在对句子数据集中单词表示的理解方面取得进展,因此潜在的依赖关系就会建立起来。变换因子的这种稀疏线性叠加变成了一个字典矩阵,其中包含一个稀疏的系数向量,我们可以总结为:
其中:
- (phi) 是字典矩阵
- 是要推断的系数的稀疏向量
Yun等人,2021 年,添加了高斯噪声样本,以强制算法搜索更深层次的表示。
此外,为了确保表示保持稀疏,方程必须写成 st(这样)。
作者将X称为层的隐藏状态集,将x称为变换因子的稀疏线性叠加属于X。
他们将稀疏字典学习模型完美地总结为:
在字典矩阵中,:,c 引用字典矩阵的一列并包含一个变换因子。
::,c分为三个级别:
这种方法是创新的、令人兴奋的,而且看起来很有效。但是,此时没有可视化功能。因此,Yun等人,2021 年为 LIME 创建了必要的信息,这是一种标准的可解释 AI 方法,用于可视化他们的发现。
因此,交互式变压器可视化页面基于 LIME 的输出。以下部分是对 LIME 的简要介绍。
介绍LIME
LIME代表Local Interpretable Model-Agnostic Explanations。这种可解释的 AI 方法的名称不言自明。它与模型无关。因此,我们可以通过字典学习得出关于 Transformer 可视化方法的直接后果:
- 该方法没有深入研究 Transformer 层的矩阵、权重和矩阵乘法。
- 该方法没有解释 Transformer 模型的工作原理,就像我们在第 2 章“ Transformer 模型架构入门”中所做的那样。
- 在本章中,该方法窥探了由变换因子的稀疏线性叠加提供的数学输出。
LIME 不会尝试解析数据集中的所有信息。相反,LIME通过检查特征来确定模型在本地是否可靠围绕一个预测。
LIME 不适用于全局模型。它侧重于预测的本地环境。
这在处理 NLP 时特别有效,因为 LIME 会探索单词的上下文,提供关于模型输出的宝贵信息。
在通过字典学习的可视化中,实例x可以表示为:
这个实例的可解释表示是一个二进制向量:
目标是确定一个或几个特征的局部存在或不存在。在 NLP 中,特征是可以重构为单词的标记。
对于 LIME,g表示变压器模型或任何其他机器学习模型。G表示一组包含g的变压器模型,其中包括:
因此,LIME 的算法可以应用于任何变压器模型。
至此,我们知道:
- LIME 以一个词为目标并在本地上下文中搜索其他词
- 因此,LIME 提供了一个词的本地上下文来解释为什么预测该词而不是另一个词
探索 LIME 等可解释的 AI 不在这本 NLP 转换器的范围之内。但是,有关 LIME 的更多信息,请参阅参考资料部分。
现在让我们看看 LIME 如何适合通过字典学习的变压器可视化方法。
现在让我们探索可视化界面。
可视化界面
访问以下站点以访问交互式变压器可视化页面:https ://transformervis.github.io/transformervis/ 。
可视化界面提供直观的说明,一键开始分析特定层的transformer factor,如图14.12所示:
图 14.12:选择变压器系数
一旦你选择了一个因素,你可以点击你想为这个因素可视化的图层:
图 14.13:可视化每层的功能
图 14.14:每一层的一个因素的重要性
Factor421
侧重于 的词汇领域separate
,如下层所示:
图 14.15:“分离”在较低层的表示
随着我们对更高层的可视化,出现了更长范围的表示。因子421
以 的表示开始separate
。但在更高层次上,变压器开始形成更深的认识separate
与 相关联的因子,distinct
如图14.16所示:
图 14.16:变压器因子的高层表示
尝试几个变换因子,以可视化变换器如何逐层扩展他们对语言的感知和理解。
你会发现很多很好的例子,但结果也很差。专注于好的例子,以了解转换器如何通过语言学习。使用糟糕的结果来理解为什么会出错。此外,用于可视化界面的 Transformer 模型并不是最强大或训练有素的模型。
例如,您可以Understanding_GPT_2_models_with_Ecco.ipynb
在本书的 GitHub 存储库中探索 。它向您展示了转换器在选择令牌之前如何生成候选者。这是不言自明的。
在本节中,我们看到了 Transformer 如何逐层学习单词的含义。转换器在做出选择之前会生成候选者。如笔记本所示,变压器模型是随机的,因此会在几个最高概率中进行选择。考虑以下句子:
"The sun rises in the_____."
你会在句末选什么词?我们都犹豫了。变压器也一样!
在这种情况下,GPT-2 模型选择单词sky
:
图 14.17:完成一个序列
但是 GPT-2 模型在另一次运行中可能会选择其他候选者,如图 14.18所示:
图 14.18:完成的其他候选人
我们可以看到它sky
出现在排名第一。但是,morning
出现在第二位并且也可能适合。如果我们多次运行模型,我们可能会获得不同的输出,因为模型是随机的。
看来人工智能和变形金刚的领域是完整的。
然而,让我们看看为什么人类在我们走之前还有很多工作要做。
探索我们无法访问的模型
探索的可视化界面在这一章中令人着迷。但是,还有很多工作要做!
例如,OpenAI 的 GPT-3 模型在线运行或通过 API 运行。因此,我们无法访问某些软件即服务( SaaS ) 转换器模型的权重。这一趋势将在未来几年。在研究和计算机能力上花费数百万美元的公司将倾向于提供现收现付的服务,而不是开源应用程序。
即使我们可以访问 GPT-3 模型的源代码或输出权重,使用可视化界面来分析 9,216 个注意力头(96 层 x 96 个头)也将非常具有挑战性。
在许多情况下,找出问题所在仍然需要一些人的参与。
例如,coach
英语到法语翻译中单词的多义问题往往代表一个问题。在英语中,教练可以是训练人的人,也可以是公共汽车。这个词coach
存在于法语中,但它只适用于训练人的人。
如果你去 OpenAI AI GPT-3 游乐场,https: //openai.com/ ,并翻译包含这个词coach
,你可能会得到好坏参半的结果。
OpenAI 引擎正确翻译了句子 1:
English: The coach broke down, and everybody complained.
French: Le bus a eu un problème et tout le monde s'est plaint.
coach
翻译成公车,挺好的。需要更多的上下文。
输出是随机的,因此翻译可能有一次是正确的,然后是错误的。
但是,第 2 句被误译:
English: The coach was dissatisfied with the team and everybody complained.
French: Le bus était insatisfait du équipe et tout le monde s'est plaint.
这一次,GPT-3 引擎忽略了一个事实,即coach
一个人,而不是一辆公共汽车。相同的随机运行将提供不稳定的输出。
如果我们通过添加上下文来修改句子 2,我们将获得正确的翻译:
English: The coach of the football team was dissatisfied and everybody complained.
French: Le coach de l'équipe de football était insatisfait et tout le monde s'est plaint.
翻译现在包含法语单词,与这句话coach
中英语单词的定义相同。coach
添加了更多上下文。
OpenAI 的解决方案,通常是 AI,尤其是 Transformer 模型,正在不断进步。此外,大多数工业 4.0 人工智能驱动的微决策不需要 NLP 的复杂程度或翻译任务并且是有效的。
但是,在相当长的一段时间内,Cloud AI API 级别的人工干预和开发仍然是必要的!
概括
训练 Transformer 模型以解决单词级多义消歧
低级、中级和高级依赖关系。该过程是通过连接训练百万到万亿参数的模型来实现的。解释这些巨型模型的任务似乎很艰巨。然而,一些工具正在出现。
我们首先安装BertViz
. 我们学习了如何使用交互式界面来解释注意力头的计算。我们看到了每一层的单词是如何与其他单词交互的。
本章继续定义探测和非探测任务的范围。NER 等探测任务提供了对 Transformer 模型如何表示语言的见解。但是,非探测方法分析模型如何进行预测。例如,LIT 将 PCA 项目和 UMAP 表示插入到 BERT 变压器模型的输出中。然后我们可以分析输出集群,看看它们是如何组合在一起的。
最后,我们通过字典学习运行 Transformer 可视化。用户可以选择一个变压器因子来分析和可视化其表示从变压器的较低层到较高层的演变。该因素将逐步从多义消歧到句子上下文分析,最后到长期依赖关系。
本章的工具将与其他技术一起发展。但是,本章的主要内容是可以以用户友好的方式可视化和解释 Transformer 模型活动。在下一章中,我们将发现新的变压器模型。我们还将通过风险管理方法为变压器模型项目选择最佳实施。