Transformers 自然语言处理(三)(3)https://developer.aliyun.com/article/1514215
Case 6: 蕴涵
在这种情况下,我们对字典中的单词感兴趣,并按固定顺序测试它们。
例如,让我们看看“pay
" + “debt
"是否在我们的相似性函数中有意义:
#@title Case 6: Entailment word1="pay";word2="debt" print("Similarity",similarity(word1,word2),word1,word2)
结果令人满意:
Similarity [[0.89891946]] pay debt
我们可以检查数据集中的几对单词,并检查它们是否有意义。例如,这些单词对可以从法律部门的电子邮件中提取。如果余弦相似度超过0.9
,则可以剥离邮件中的无用信息,并将内容添加到公司的知识库数据集中。
现在让我们看看预训练的分词器与自然语言处理任务的匹配情况。
具有特定词汇的标准自然语言处理任务
本节重点介绍了本章节中Word2Vec tokenization部分的Case 4: Rare words和Case 5: Replacing rare words。
我们将使用Training_OpenAI_GPT_2_CH09.ipynb
,这是我们在Chapter 7中使用的笔记本的重命名版本,The Rise of Suprahuman Transformers with GPT-3 Engines。
笔记本有两处更改:
dset
,数据集,被重命名为mdset
,并包含医学内容- 添加了一个 Python 函数来控制使用字节级 BPE 分词的文本
我们不会描述第七章中所涵盖的Training_OpenAI_GPT_2_CH09.ipynb
,以及附录 III 和 IV。确保在开始之前上传所需的文件,就像第七章中所解释的那样。
您希望训练模型的时间没有限制。中断它以保存模型。
文件位于Chapter09
的gpt-2-train_files
目录中的 GitHub 上。尽管我们使用的是第七章中相同的笔记本,但要注意数据集dset
在目录和代码中现在被命名为mdset
。
首先,让我们使用经过训练以理解医学内容的 GPT-2 模型生成一个无条件样本。
使用 GPT-2 生成无条件样本
在这一节中,我们将亲自动手来理解变换器的内部工作原理。当然,我们可以跳过整个章节,简单地使用 OpenAI API。然而,一个 4.0 的 AI 专家必须成为 AI 大师,通过预处理管道展示,而不是模糊地告诉变换器模型要做什么。为了展示一个变换器模型要做什么,必须了解变换器模型的工作原理。
在案例 4:罕见词语和案例 5:替换罕见词语中,我们看到罕见词语可以是在特定领域中使用的词语,古老的英语,世界各地英语的变体,俚语等。
在 2020 年,新闻中充斥着与 COVID-19 爆发有关的医学术语。在这一部分中,我们将看到一个 GPT-2 变换器如何处理医学文本。
要编码和训练的数据集包含了Martina Conte和Nadia Loy(2020 年)撰写的一篇论文,名称为具有非局部感知的多线索动力学模型用于细胞在具有趋化作用的纤维网络上的迁移。
标题本身并不容易理解,包含了一些罕见的词语。
加载位于gpt-2-train_files
目录中的文件,包括mdset.txt
。然后按照第七章中所述运行代码。您可以逐个单元格地运行此代码,第七章会给出指导。务必按照说明确保激活tf 1.x
。在运行第 4 步之后,务必重新启动运行时,然后再次运行第 4 步中的tf 1.x
单元格,然后再继续。否则,您将在笔记本中遇到错误。在本节中,我们将亲自动手使用低级别的原始 GPT-2 代码,而不是 API。
在对医学数据集进行训练之后,您将进入无条件抽样单元,第 11 步:生成无条件样本:
#@title Step 11: Generating Unconditional Samples import os # import after runtime is restarted os.chdir("/content/gpt-2/src") !python generate_unconditional_samples.py --model_name '117M'
此命令以及本笔记本中的其他代码运行所需的时间取决于您的计算机性能。本书中的所有 GPT-2 代码都仅用于教育目的。建议在生产环境中使用 OpenAI 的 GPT-3 API。对于变换器项目,响应时间更快。
运行单元格,并在需要时停止。它会产生一个随机输出:
community-based machinery facilitates biofilm growth. Community members place biochemistry as the main discovery tool to how the cell interacts with the environment and thus with themselves, while identifying and understanding all components for effective Mimicry. 2\. Ol Perception Cytic double-truncation in phase changing (IP) polymerases (sometimes called "tcrecs") represents a characteristic pattern of double-crossing enzymes that alter the fundamental configuration that allows initiation and maintenance of process while chopping the plainNA with vibrational operator. Soon after radical modification that occurred during translational parasubstitution (TMT) achieved a more or less uncontrolled activation of SYX. TRSI mutations introduced autophosphorylation of TCMase sps being the most important one that was incorporated into cellular double-triad (DTT) signaling across all cells, by which we allow R h and ofcourse an IC 2A- > .../...
仔细观察输出,我们注意到以下几点:
- 生成的句子的结构相对可接受
- 输出的语法不错
- 对于非专业人士来说,输出可能看起来类似于人类
但是内容毫无意义。Transformers无法产生与我们训练的医学论文相关的真实内容。要获得更好的结果需要艰苦的工作。当然,我们总是可以增加数据集的规模。但它是否包含我们正在寻找的内容呢?我们是否会找到更多数据中的错误相关性呢?例如,想象一下一个涉及 COVID-19 的医疗项目,数据集包含以下句子:
COVID-19 不是危险的病毒,而只是像普通流感一样
。COVID-19 是一种非常危险的病毒
。COVID-19 不是一种病毒,而是实验室创造出的东西
。COVID-19 肯定不是由实验室创造的!
疫苗是危险的!
疫苗是救命稻草!
政府没有正确管理疫情
。政府采取了必要的措施
。
以及更多类似这样矛盾的句子。这些不一致性证实了数据集和分词器都必须为专业的医疗保健项目、航空航天、交通运输和其他关键领域进行定制。
想象一下,你有数十亿字的数据集,但内容如此矛盾和嘈杂,无论你如何尝试,都无法得到可靠的结果!
这可能意味着数据集必须更小,限制在科学论文的内容上。但即便如此,科学家们对彼此之间也常常意见不一。
结论是,要产生可靠的结果需要大量的辛勤工作和一支牢固的团队。
现在让我们尝试对 GPT-2 模型进行条件化设置。
生成经过训练的条件样本
在本节中,我们转到笔记本的步骤 12:交互式上下文和完成示例单元格,并运行它:
#@title Step 12: Interactive Context and Completion Examples import os # import after runtime is restarted os.chdir("/content/gpt-2/src") !python interactive_conditional_samples.py --temperature 0.8 --top_k 40 --model_name '117M' --length 50
工业 4.0 人工智能专家将更少地关注代码,更多地关注如何展示Transformers模型做什么。每个模型都需要一定程度的指导,而不仅仅是使用无条件的数据来模糊地告诉它做某事。
我们通过输入医学论文的一部分来对 GPT-2 模型进行条件设定:
During such processes, cells sense the environment and respond to external factors that induce a certain direction of motion towards specific targets (taxis): this results in a persistent migration in a certain preferential direction. The guidance cues leading to directed migration may be biochemical or biophysical. Biochemical cues can be, for example, soluble factors or growth factors that give rise to chemotaxis, which involves a mono-directional stimulus. Other cues generating mono-directional stimuli include, for instance, bound ligands to the substratum that induce haptotaxis, durotaxis, that involves migration towards regions with an increasing stiffness of the ECM, electrotaxis, also known as galvanotaxis, that prescribes a directed motion guided by an electric field or current, or phototaxis, referring to the movement oriented by a stimulus of light [34]. Important biophysical cues are some of the properties of the extracellular matrix (ECM), first among all the alignment of collagen fibers and its stiffness. In particular, the fiber alignment is shown to stimulate contact guidance [22, 21]. TL;DR:
我们在输入文本的结尾加上TL;DR
:告诉 GPT-2 模型总结我们对它进行条件化的文本。输出在语法和语义上都是有意义的:
the ECM of a single tissue is the ECM that is the most effective. To address this concern, we developed a novel imaging and immunostaining scheme that, when activated, induces the conversion of a protein to its exogenous target
由于输出是非确定性的,我们也可能得到这样的回答:
Do not allow the movement to be directed by a laser (i.e. a laser that only takes one pulse at a time), but rather a laser that is directed at a target and directed at a given direction. In a nutshell, be mindful.
结果更好,但需要更多的研究。
从这个例子和章节中我们可以得出的结论是,对于预训练的Transformers模型,例如在大量随机网络爬行数据上进行预训练,将教导Transformers模型英语。然而,就像我们一样,Transformers也需要在特定领域接受训练,才能成为该领域的专家。
让我们进一步调查并控制分词化的数据。
控制分词化的数据
本节将读取 GPT-2 模型使用其预训练分词器编码的前面词语。
运行单元格时,在运行后续单元格之前停止一个单元格。
我们将转到本章中使用的 Training_OpenAI_GPT_2_CH09.ipynb
笔记本的 Additional Tools: Controlling Tokenized Data
单元格。该单元格是为本章添加到笔记本中的。
该单元首先解压 out.npz
,其中包含编码的医学论文,该论文位于数据集 mdset
中:
#@title Additional Tools : Controlling Tokenized Data #Unzip out.npz import zipfile with zipfile.ZipFile('/content/gpt-2/src/out.npz', 'r') as zip_ref: zip_ref.extractall('/content/gpt-2/src/')
解压 out.npz
,我们可以读取 arr_0.npy
,包含我们正在寻找的编码数据集的 NumPy
数组:
#Load arr_0.npy which contains encoded dset import numpy as np f=np.load('/content/gpt-2/src/arr_0.npy') print(f) print(f.shape) for i in range(0,10): print(f[i])
输出是数组的前几个元素:
[1212 5644 326 ... 13 198 2682]
现在我们将打开 encoder.json
并将其转换为 Python 字典:
#We first import encoder.json import json i=0 with open("/content/gpt-2/models/117M/encoder.json", "r") as read_file: print("Converting the JSON encoded data into a Python dictionary") developer = json.load(read_file) #converts the encoded data into a Python dictionary for key, value in developer.items(): #we parse the decoded json data i+=1 if(i>10): break; print(key, ":", value)
最后,我们显示了我们编码数据集的前 500
个标记的键和值:
#We will now search for the key and value for each encoded token for i in range(0,500): for key, value in developer.items(): if f[i]==value: print(key, ":", value)
mdset.txt
的前几个单词如下:
This suggests that
我添加了这些单词以确保 GPT-2 预训练的分词器能够轻松识别它们,这也确实是这样的:
This : 1212 Ġsuggests : 5644 Ġthat : 326
我们可以轻松识别前导空格字符(Ġ
)前的初始标记。然而,让我们看一下医学论文中的下一个词:
amoeboid
amoeboid
是一个罕见的词。我们可以看到 GPT-2 的分词器将其分解为子词:
Ġam : 716 o : 78 eb : 1765 oid : 1868
让我们跳过空格,看看发生了什么。amoeboid
变成了 am
+ o
+ eb
+ oid
。我们必须同意,没有未知的标记:[unk]
。这是由于使用了字节级 BPE 策略。
然而,Transformers的注意力层可能会关联:
am
与其他序列,如I am
o
与任何包含o
的序列oid
与另一个包含oid
的序列,可能与某些算法的tabloid
相关
这一点一点都不好。让我们进一步看看以下单词:
amoeboid and mesenchymal
输出清晰地显示了 and
。至于其余的部分,标记令人困惑:
Ġam : 716 o : 78 eb : 1765 oid : 1868 Ġand : 290 Ġmes : 18842 ench : 24421 ym : 4948 al : 282
你可能想知道为什么这是个问题。原因可以用一个词来概括:多义性。如果我们使用 word2vec 分词器,词典可能不包含罕见的词语,比如 amoeboid
,我们将得到一个未知的标记。
如果我们使用字节级 BPE,我们会得到更好的结果,因为我们排除了更少的同一单词的变体,比如 go
和 go
+ ing
。
然而,amoeboid
中的 am
标记在低级别带来了多义性的问题。am
可以是一种前缀,像 I
+ am
中的 am
,或者像 am
+ bush
中的子词。注意层可能会将一个标记的 am
关联到另一个 am
,从而创建不存在的关系。这定义了自然语言理解中多义性的核心问题。
我们可以说进展正在取得,但我们需要更努力地改进自然语言处理。
我们已经通过一些例子了解了我们在实际项目中面临的很多日常问题。花些时间尝试一些你认为有用的例子。
在我们离开之前,我们将使用一个探测任务来验证Transformers模型提供的自然语言理解水平。
探索 GPT-3 的范围
即使是像 OpenAI GPT-3 这样最强大的转换器也有它们的局限性。让我们看看 GPT-3 如何对待 amoeboid
这个词,它更接近于医学术语而不是主流词汇。在许多项目中,我们需要技术术语。匹配数据集需要质量控制来确保转换器如何组织其字典和嵌入。
我们人类可以检测错误并纠正别人。例如,在本章的 控制标记化数据 部分中,我们探讨了 amoeboid
这个词。
让我们首先问问 GPT-3 amoeboid
是什么意思:
图 9.4:询问 GPT-3 “amoeboid” 的含义
amoeboid
(类似变形虫)是一个形容词,但 GPT-3 在输出中表示它是一个名词:
A: Amoeboid is a noun which means "resembling an amoeba"
然后我们向 GPT-3 提出一个更加精确的问题,但仍然得到一个错误的答案:
Q: Is amoeboid a noun or an adjective? A: Amoeboid is a noun.
最后,我们坚持要求清晰的定义,并得到了正确的答案:
Q: What does amoeboid mean in medical terms? A: Amoeboid means "resembling an amoeba".
定义是准确的,尽管语法分析不准确。
在现实项目中,什么更重要?是理解一个词的定义,还是确定它在句子中作为形容词还是名词的角色?
一个词的定义对于医学项目来说已经足够了。在这种情况下,GPT-3 可能已经足够了。如果定义已经足够,那么语义角色标注不是理解句子的先决条件。
也许语法方面对于教育语法学校项目很重要,但对于企业供应链、金融和电子商务应用程序来说并不重要。
OpenAI GPT-3 在两种情况下都可以进行微调,正如我们在 第七章,GPT-3 引擎的超人类转变 中所看到的那样。
本节总结认为,我们必须确保在训练好的转换器模型中拥有所有需要的数据。如果没有,标记化过程将是不完整的。也许我们应该拿出一本医学词典,并创建一个包含特定词汇的大型医学文章语料库。然后,如果模型仍然不够准确,我们可能需要对数据集进行标记化并从头开始训练模型。
一个 2022 年的开发者将会有较少的开发工作,但仍然需要大量思考和设计!
现在让我们结束本章,转向另一个 NLU 任务。
总结
在本章中,我们衡量了标记化和后续数据编码过程对转换器模型的影响。一个转换器模型只能关注堆栈中的嵌入和位置编码子层中的标记。这个模型是编码器-解码器、仅编码器还是仅解码器模型并不重要。数据集看起来足够好训练也不重要。
如果标记化过程失败,即使只是部分失败,我们正在运行的转换器模型也会错过关键的标记。
我们首先发现,对于标准语言任务来说,原始数据集可能足以训练一个转换器。
但是,我们发现,即使预训练的标记化器经过了十亿字的训练,它只会创建一个很小的词汇表,其中包含了它遇到的词汇的一小部分。像我们一样,标记化器捕捉到了它正在学习的语言的本质,只有这些词汇也经常被使用,它才会记住最重要的词汇。这种方法对于标准任务效果很好,但在特定任务和词汇方面会出现问题。
然后,我们寻找了一些想法,其中之一是解决标准标记化器的限制。我们应用了一种语言检查方法,以适应我们希望处理的文本,比如一个标记化器思考和编码数据的方式。
我们将该方法应用于 GPT-2 的无条件和有条件任务。
最后,我们分析了数据标记化和匹配数据集与 GPT-3 的限制。从这一章可以得到的教训是,AI 专家将在相当长的一段时间内存在!
在下一章中,基于 BERT 的Transformers的语义角色标注,我们将深入探讨 NLU,并使用 BERT 模型要求Transformers解释句子的含义。
问题
- 一个标记化的字典包含了语言中存在的每一个单词。(真/假)
- 预训练的标记化器可以对任何数据集进行编码。(真/假)
- 在使用数据库之前检查数据库是一个好的做法。(真/假)
- 从数据集中清除淫秽数据是一个好的做法。(真/假)
- 删除包含歧视性言论的数据是一个好的做法。(真/假)
- 原始数据集有时可能产生嘈杂内容和有用内容之间的关系。(真/假)
- 一个标准的预训练标记化器包含了过去 700 年的英语词汇。(真/假)
- 老式英语可能在用现代英语训练的标记化器对数据进行编码时产生问题。(真/假)
- 医学和其他类型的行话可能在用现代英语训练的标记化器对数据进行编码时产生问题。(真/假)
- 控制预训练标记化器产生的编码数据的输出是一个好的做法。(真/假)
参考资料
- Colin Raffel、Noam Shazeer、Adam Roberts、Katherine Lee、Sharan Narang、Michael Matena、Yanqi Zhou、Wei Li 和 Peter J. Liu,2019 年,《探索具有统一文本到文本转换器的迁移学习的极限》:
arxiv.org/pdf/1910.10683.pdf
- OpenAI GPT-2 GitHub 代码库:
github.com/openai/gpt-2
- N. Shepperd 的 GitHub 代码库:
github.com/nshepperd/gpt-2
- Hugging Face 框架和资源:
huggingface.co/
- 美国法律,蒙大拿州企业法:
corporations.uslegal.com/state-corporation-law/montana-corporation-law/#:~:text=Montana%20Corporation%20Law,carrying%20out%20its%20business%20activities
- 玛蒂娜·孔特,娜迪亚·洛伊,2020 年,《具有非局部感知的多线索动力学模型用于化学趋化作用纤维网络上的细胞迁移》:
arxiv.org/abs/2006.09707
- 美利坚合众国独立宣言,由托马斯·杰斐逊:
www.gutenberg.org/ebooks/1
- 美国权利法案,由美国及相关文本:
www.gutenberg.org/ebooks/2
- 大宪章:
www.gutenberg.org/ebooks/10000
- 《纯粹理性批判》,《实践理性批判》和《道德形而上学基本原理》:
www.gutenberg.org
加入我们书籍的 Discord 空间。
加入该书的 Discord 工作区,与作者进行每月的问我任何活动。