在过去几年中,变换器的发展远远超过了过去一代的自然语言处理(NLP)技术。标准的自然语言理解(NLU)方法首先学习句法和词汇特征以解释句子的结构。以前的NLP模型通常需要先训练以理解语言的基本句法结构,然后才能进行语义角色标注(SRL)。
Shi和Lin(2019)在他们的论文中提出了一个问题,即是否可以跳过初步的句法和词汇训练。也就是说,基于BERT的模型是否可以在不经历传统的培训阶段的情况下执行SRL任务?答案是肯定的!
Shi和Lin(2019)建议将SRL视为序列标记任务,并提供了一种标准化的输入格式。他们的基于BERT的模型产生了出乎意料的好结果。
本章将使用由艾伦人工智能研究所提供的预训练BERT模型,该模型基于Shi和Lin(2019)的论文。Shi和Lin通过跳过句法和词汇训练将SRL推向了一个新的水平。我们将看看他们是如何做到的。
我们将从定义语义角色标注(SRL)以及SRL输入格式的标准化开始。然后,我们将使用艾伦人工智能研究所提供的资源开始工作。接下来,我们将在Google Colab笔记本中运行SRL任务,并使用在线资源来理解结果。
最后,我们将通过运行SRL示例来挑战基于BERT的模型。首先,我们将展示SRL的工作原理。然后,我们将运行一些更困难的示例,逐渐将BERT-based模型推向SRL的极限。找到模型的极限是确保变换器模型在实际实现中保持现实和实用的最佳方法。
本章涵盖以下主题:
- 定义语义角色标注(SRL)
- 定义SRL输入格式的标准化
- BERT-based模型架构的主要方面
- 编码器堆栈如何处理SRL输入格式
- BERT-based模型SRL注意力过程
- 开始使用艾伦人工智能研究所提供的资源
- 构建一个笔记本来运行预训练的BERT-based模型
- 在基本示例上测试句子标记
- 在困难示例上测试SRL并解释结果
- 将BERT-based模型推向SRL的极限,并解释如何做到这一点
我们的第一步将是探索Shi和Lin(2019)定义的SRL方法。
开始使用SRL
SRL对人类和机器来说都很困难。然而,再次表明,变换器模型已经接近我们人类的基准。
在本节中,我们将首先定义SRL并可视化一个示例。然后,我们将运行一个预训练的基于BERT的模型。
让我们首先定义SRL的问题任务。
定义语义角色标注(Semantic Role Labeling,SRL)
Shi and Lin(2019)提出并证明了这一观点,即我们可以找出谁做了什么以及在哪里,而不依赖于词汇或句法特征。本章基于Peng Shi和Jimmy Lin在加利福尼亚滑铁卢大学进行的研究。他们展示了如何通过注意层更好地学习语言结构。
SRL标签语义角色,即一个词或一组词在句子中扮演的角色以及与谓词之间建立的关系。
语义角色是一个名词或名词短语在句子中相对于主谓关系中的主要动词扮演的角色。例如,在句子"Marvin walked in the park"中,"Marvin"是句子中发生事件的执行者,执行者是事件的执行者。主动词或主谓动词是"walked"。
谓词描述主语或执行者的某些内容。谓词可以是提供有关主语的特征或动作信息的任何内容。在我们的方法中,我们将谓词称为主动词。例如,在句子"Marvin walked in the park"中,谓词以其受限制的形式是"walked"。
句子中的"in the park"修饰了"walked"的含义,称为修饰语。
围绕谓词的名词或名词短语是参数或论点项。例如,"Marvin"是"walked"的参数。
我们可以看出,SRL不需要语法树或词汇分析。
让我们可视化我们示例的SRL。
可视化SRL
本章将使用Allen Institute的视觉和代码资源(有关更多信息,请参阅参考文献部分)。艾伦人工智能研究所拥有出色的交互式在线工具,我们在整个本章中一直使用这些工具来可视化SRL。您可以在demo.allennlp.org/ 上访问这些工具。
艾伦人工智能研究所倡导AI造福大众。我们将充分利用这种方法。本章中的所有图表均是使用AllenNLP工具创建的。
艾伦研究所提供的变压器模型不断发展。因此,当您运行这些示例时,本章中的示例可能会产生不同的结果。从本章中获取最多信息的最佳方法是:
阅读并理解超出仅运行程序的解释的概念 花时间理解所提供的示例 然后使用本章中使用的工具在自己选择的句子上进行自己的实验:demo.allennlp.org/semantic-ro...
现在,让我们来可视化我们的SRL示例。图10.1是"Marvin walked in the park"的SRL表示:
我们可以在图10.1中观察到以下标签:
动词:
- 句子的谓语
- 参数:句子的参数,称为ARG0
- 修饰语:句子的修饰语。在这种情况下是一个位置。它也可以是副词、形容词或任何修改谓语含义的内容。
文本输出也很有趣,其中包含了可视表示的标签的缩写版本:
yaml
walked: [ARG0: Marvin] [V: walked] [ARGM-LOC: in the park]
我们已经定义了SRL并通过一个示例进行了说明。现在是时候来看看基于BERT的模型了。
运行预训练的基于BERT的模型
这一部分将首先描述本章中使用的基于BERT的模型的架构。
然后,我们将定义用于使用BERT模型进行SRL样本实验的方法。
让我们首先看看基于BERT的模型的架构。
基于BERT的模型的架构
AllenNLP的基于BERT的模型是一个12层的仅编码器BERT模型。AllenNLP团队实现了Shi和Lin(2019)中描述的BERT模型,并添加了一个额外的线性分类层。
有关BERT模型的描述,请花几分钟,如果需要的话,回到第3章,对BERT模型进行微调。
基于BERT的模型充分利用双向注意力,采用简单的方法和架构。Transformer模型的核心潜力存在于注意力层。我们已经看到了具有编码器和解码器堆栈的Transformer模型。我们还看到了其他仅具有编码器层或解码器层的Transformer。Transformer的主要优势仍然在于注意力层近似于人类的方式来处理语言。
Shi和Lin(2019)定义的谓词识别格式的输入格式展示了Transformer模型在以标准化方式理解语言方面的进展:
[CLS] Marvin walked in the park.[SEP] walked [SEP]
训练过程已经标准化:
- [CLS] 表示这是一个分类任务
- [SEP] 是第一个分隔符,表示句子的结束
- [SEP] 后面跟着作者设计的谓词识别
- [SEP] 是第二个分隔符,表示谓词标识符的结束
仅仅这种格式就足以训练一个BERT模型来识别和标记句子中的语义角色。
现在让我们设置运行SRL示例的环境。
搭建BERT SRL环境
我们将使用Google Colab笔记本,以及在demo.allennlp.org/ Semantic Role Labeling部分提供的AllenNLP视觉文本表示。
我们将采用以下方法:
- 打开SRL.ipynb,安装AllenNLP,并运行每个示例
- 显示SRL运行的原始输出
- 使用AllenNLP的在线可视化工具来可视化输出
- 使用AllenNLP的在线文本可视化工具来显示输出
这章是自成一体的。你可以阅读它或按照描述运行示例。
SRL模型的输出可能会随着AllenNLP更改使用的变压器模型而有所不同。这是因为AllenNLP模型和变压器通常会持续进行训练和更新。此外,用于训练的数据集可能会发生变化。最后,这些不是基于规则的算法,不能每次都产生相同的结果。输出可能会从一次运行到另一次运行发生变化,如屏幕截图中所述。
现在,让我们运行一些SRL实验。
使用基于BERT的模型进行SRL实验
我们将使用本章"设置BERT SRL环境"部分描述的方法来运行SRL实验。我们将从具有不同句子结构的基本示例开始。然后,我们将通过一些更具挑战性的示例来测试BERT-based模型,以探索系统的能力和限制。
打开SRL.ipynb并运行安装单元格:
ini
!pip install allennlp==2.1.0 allennlp-models==2.1.0
然后,我们导入标记模块和已经训练好的BERT预测器:
java
from allennlp.predictors.predictor import Predictor
import allennlp_models.tagging
import json
predictor = Predictor.from_path("https://storage.googleapis.com/allennlp-public-models/structured-prediction-srl-bert.2020.12.15.tar.gz")
我们还添加了两个函数来显示SRL BERT返回的JSON对象。第一个函数显示谓词的动词和描述:
python
def head(prediction):
# Iterating through the json to display excerpt of the prediciton
for i in prediction['verbs']:
print('Verb:',i['verb'],i['description'])
第二个函数显示完整的响应,包括标签:
python
def full(prediction):
#print the full prediction
print(json.dumps(prediction, indent = 1, sort_keys=True))
在本出版物发布时,BERT模型专门用于语义角色标记。该模型的名称是SRL BERT。SRL BERT是使用OntoNotes 5.0数据集进行训练的:catalog.ldc.upenn.edu/LDC2013T19。
该数据集包含句子和注释。该数据集旨在识别句子中的谓词(包含动词的句子部分)并识别提供有关动词的更多信息的单词。每个动词都带有其"参数",告诉我们更多关于它的信息。一个"框架"包含了动词的参数。
因此,SRL BERT是一个专门针对执行特定任务进行训练的专业模型,因此它不像我们在第7章《使用GPT-3引擎崛起的超人类变换器》中看到的OpenAI GPT-3那样是一个基础模型。
只要句子包含一个谓词,SRL BERT将专注于语义角色标记,并且可以获得可接受的准确性。
现在我们准备通过一些基本示例进行热身。
基本样例
基本示例在直觉上看似简单,但在分析上可能会有些棘手。复合句、形容词、副词和情态动词很难辨别,即使对于非专业人士也是如此。
让我们从一个对于变换器来说很容易的示例开始。
样例1
第一个示例虽然很长,但对于变换器来说相对容易:
"Bob真的认为他能在几个小时内为50个人准备一顿饭吗?"
在"SRL.ipynb"中运行"示例 1"的单元格:
ini
prediction=predictor.predict(
sentence="Did Bob really think he could prepare a meal for 50 people in only a few hours?"
)
head(prediction)
BERT SRL识别了四个谓词;每个谓词的动词标记结果如下所示,使用head(prediction)
函数:
yaml
Verb: Did [V: Did] Bob really think he could prepare a meal for 50 people in only a few hours ?
Verb: think Did [ARG0: Bob] [ARGM-ADV: really] [V: think] [ARG1: he could prepare a meal for 50 people in only a few hours] ?
Verb: could Did Bob really think he [V: could] [ARG1: prepare a meal for 50 people in only a few hours] ?
Verb: prepare Did Bob really think [ARG0: he] [ARGM-MOD: could] [V: prepare] [ARG1: a meal for 50 people] [ARGM-TMP: in only a few hours] ?
您可以通过运行full(prediction)单元格来查看完整的响应。
根据PropBank(命题银行)结构的论据数据集,例如,在此摘录中,动词think可以解释如下:
- V 标识动词think
- ARG0 标识施事者,因此Bob是施事者或"代理"
- ARGM-ADV 将really识别为副词(ADV),ARGM表示该副词提供了一个附加成分(不是必需的),因此没有编号
如果我们在AllenNLP在线界面中运行此示例,我们将获得每个动词的SRL任务的一帧的可视表示。第一个动词是Did("做了什么"):
第二个识别的动词是think("认为"):
如果我们仔细观察这个表示,我们可以发现 SRL BERT 具有一些有趣的特性:
- 检测到了动词 "think"。
- 避免了"prepare" 陷阱,这本来可能被解释为主要动词。相反,"prepare" 仍然作为 "think" 的参数的一部分。
- 检测到了一个副词并对其进行了标记。
第三个动词是 "could"("能够"):
然后,转换器转向了动词 "prepare",对其进行了标记,并分析了其上下文:
同样,简单的基于 BERT 的变换器模型检测到了关于句子的语法结构的大量信息,并发现:
- 动词 "prepare" 并将其单独标记出来
- 名词 "he" 并将其标记为一个参数,同样,也对 "a meal for 50 people" 这个 "proto-patient"(包括其他参与者修改的部分) 进行了相同的处理
- "in only a few hours" 是一个时间修饰语(ARGM-TMP)
- "could" 是一个情态修饰语,表示动词的情态,例如事件发生的可能性
现在我们将分析另一个相对较长的句子。
样例2
以下句子看起来很简单,但包含了几个动词:
"Mrs. and Mr. Tomaso went to Europe for vacation and visited Paris and first went to visit the Eiffel Tower."
这个混乱的句子会让变换器犹豫吗?让我们通过运行 SRL.ipynb 笔记本中的 Sample 2 单元格来看看:
ini
prediction=predictor.predict(
sentence="Mrs. and Mr. Tomaso went to Europe for vacation and visited Paris and first went to visit the Eiffel Tower."
)
head(prediction)
输出摘录证明变换器正确地识别了句子中的动词:
yaml
Verb: went [ARG0: Mrs. and Mr. Tomaso] [V: went] [ARG4: to Europe] [ARGM-PRP: for vacation] and visited Paris and first went to visit the Eiffel Tower .
Verb: visited [ARG0: Mrs. and Mr. Tomaso] went to Europe for vacation and [V: visited] [ARG1: Paris] and first went to visit the Eiffel Tower .
Verb: went [ARG0: Mrs. and Mr. Tomaso] went to Europe for vacation and visited Paris and [ARGM-TMP: first] [V: went] [ARG1: to visit the Eiffel Tower] .
Verb: visit [ARG0: Mrs. and Mr. Tomaso] went to Europe for vacation and visited Paris and first went to [V: visit] [ARG1: the Eiffel Tower] .
在AllenNLP在线上运行示例时,识别了四个谓词,从而生成了四个帧。
第一个帧是关于went(去)的:
我们可以解释动词"went"的论元。"Mrs. and Mr. Tomaso" 是主体。变压器发现动词的主要修饰语是旅行的目的,即 "to Europe"。如果我们不知道Shi和Lin(2019)只构建了一个简单的BERT模型来获得这种高质量的语法分析,那么这个结果可能会令人吃惊。
我们还可以注意到"went"与"Europe"的关联是正确的。变压器正确地将动词"visited"与"Paris"相关联:
变压器本可以将动词"visited"直接与埃菲尔铁塔相关联。但它没有这么做。它坚守立场,做出了正确的决定。
接下来,我们要求变压器识别第二次使用的动词"went"的上下文。同样,它没有陷入合并句子中两次出现的动词"went"的所有相关论元的陷阱。它再次正确分割了这个序列,并产生了出色的结果:
动词"went"被使用了两次,但变压器并没有陷入陷阱。它甚至发现"first"是动词"went"的时间修饰语。
最后,动词"visit"被再次使用,SRL BERT正确解释了它的用法:
让我们运行一个更加令人困惑的句子。
样例3
示例3将使我们的变压器模型面临更大的困难。以下示例包含四次动词"drink"的变体:
约翰想喝茶,玛丽喜欢喝咖啡,但卡里姆喝了些凉水,费扎想喝番茄汁。
让我们在SRL.ipynb笔记本中运行示例3:
ini
prediction=predictor.predict(
sentence="John wanted to drink tea, Mary likes to drink coffee but Karim drank some cool water and Faiza would like to drink tomato juice."
)
head(prediction)
变压器找到了解决方法,如下所示,其中包含了动词的输出摘录:
yaml
Verb: wanted [ARG0: John] [V: wanted] [ARG1: to drink tea] , Mary likes to drink coffee but Karim drank some cool water and Faiza would like to drink tomato juice .
Verb: drink [ARG0: John] wanted to [V: drink] [ARG1: tea] , Mary likes to drink coffee but Karim drank some cool water and Faiza would like to drink tomato juice .
Verb: likes John wanted to drink tea , [ARG0: Mary] [V: likes] [ARG1: to drink coffee] but Karim drank some cool water and Faiza would like to drink tomato juice .
Verb: drink John wanted to drink tea , [ARG0: Mary] likes to [V: drink] [ARG1: coffee] but Karim drank some cool water and Faiza would like to drink tomato juice .
Verb: drank John wanted to drink tea , Mary likes to drink coffee but [ARG0: Karim] [V: drank] [ARG1: some cool water] and Faiza would like to drink tomato juice .
Verb: would John wanted to drink tea , Mary likes to drink coffee but Karim drank some cool water and [ARG0: Faiza] [V: would] like [ARG1: to drink tomato juice] .
Verb: like John wanted to drink tea , Mary likes to drink coffee but Karim drank some cool water and [ARG0: Faiza] [ARGM-MOD: would] [V: like] [ARG1: to drink tomato juice] .
Verb: drink John wanted to drink tea , Mary likes to drink coffee but Karim drank some cool water and [ARG0: Faiza] would like to [V: drink] [ARG1: tomato juice] .
变压器找到了解决方法,如下所示,其中包含了动词的输出摘录:
当它识别出动词"drank"时,它正确地排除了"Faiza",只将"some cool water" 作为参数呈现出来。
到目前为止,我们发现基本样本上的基于BERT的变换器产生了相对良好的结果,那么让我们尝试一些更加困难的样本。
有难度的样例
这一部分将运行包含BERT-based变换器首次解决的问题的样本。最后,我们将以一个棘手的样本结束。
让我们从一个复杂的样本开始,BERT-based变换器可以分析。
样例4
样本4将我们带入更棘手的SRL领域。该样本将Alice与动词liked分开,创建了一个长期的依赖关系,需要跳过"每个星期天去慢跑的丈夫"。
句子是:
Alice,她的丈夫每个星期天去慢跑,喜欢在此期间去上舞蹈课。
人类可以将Alice孤立出来并找到谓词:
Alice喜欢在此期间去上舞蹈课。
BERT模型能像我们一样找到谓词吗?
让我们首先在SRL.ipynb中运行代码来找出。
ini
prediction=predictor.predict(
sentence="Alice, whose husband went jogging every Sunday, liked to go to a dancing class in the meantime."
)
head(prediction)
输出确定了每个谓词的动词,并为每个框架打上了标签:
yaml
Verb: went Alice , [ARG0: whose husband] [V: went] [ARG1: jogging] [ARGM-TMP: every Sunday] , liked to go to a dancing class in the meantime .
Verb: jogging Alice , [ARG0: whose husband] went [V: jogging] [ARGM-TMP: every Sunday] , liked to go to a dancing class in the meantime .
Verb: liked [ARG0: Alice , whose husband went jogging every Sunday] , [V: liked] [ARG1: to go to a dancing class in the meantime] .
Verb: go [ARG0: Alice , whose husband went jogging every Sunday] , liked to [V: go] [ARG4: to a dancing class] [ARGM-TMP: in the meantime] .
Verb: dancing Alice , whose husband went jogging every Sunday , liked to go to a [V: dancing] class in the meantime .
让我们关注我们感兴趣的部分,看看模型是否找到了谓词。它找到了!正如输出的这部分所示,它找到了动词"liked",尽管动词"like"与"Alice"之间隔着另一个谓词:
yaml
Verb: liked [ARG0: Alice , whose husband went jogging every Sunday]
让我们现在在AllenNLP的在线界面上运行示例后,查看模型分析的可视化表示。变换器首先找到了Alice的丈夫:
变换器解释说:
- 谓语或动词是went
- whose husband是谓语的论元
- jogging是与went相关的另一个论元
- every Sunday是一个表示在原始输出中的时间修饰语[ARGM-TMP: every Sunday]
然后,变换器找到了Alice的丈夫在做什么:
我们可以看到,动词jogging已被识别,并与whose husband以及时间修饰语every Sunday相关联。
变换器不仅如此。它还检测到了Alice喜欢的东西:
变换器还正确检测和分析了动词"go":
我们可以看到,与"类"相关的时间修饰也被识别出来。考虑到SRL BERT训练的简单序列+动词输入,这实现相当不错。
最后,变换器识别出最后一个动词"dancing"与"class"相关:
样本4产生的结果相当令人信服!让我们试着找出这个变换器模型的极限。
样例5
样本5没有多次重复相同的动词。然而,样本5包含一个具有多重功能和含义的单词。这超出了多义词,因为"round"这个词可以有不同的含义和语法功能。"round"可以是名词、形容词、副词、及物动词或不及物动词。
作为及物动词或不及物动词,"round"可以达到完美或完成。在这个意义上,"round"可以与"off"一起使用。
以下句子使用"round"的过去式:
"The bright sun, the blue sky, the warm sand, the palm trees, everything round off."
这个谓词中的动词"round"是用于"使完美"的意义。当然,最容易理解的语法形式应该是"rounded",但让我们看看我们的句子会发生什么。
让我们在SRL.ipynb中运行样本5:
ini
prediction=predictor.predict(
sentence="The bright sun, the blue sky, the warm sand, the palm trees, everything round off."
)
head(prediction)
输出中没有动词。变换器没有识别出谓词。事实上,即使在运行full(prediction)函数时,它也没有找到任何动词:
json
"verbs": []
然而,在线版本似乎对这个句子有更好的解释,因为它找到了动词:
既然我们喜欢我们的SRL变换器,我们将对它友善。我们将向它展示一个更常用的动词形式应该怎么做。让我们将句子从过去时改成现在时,通过在 round 后面添加一个 s:
The bright sun, the blue sky, the warm sand, the palm trees, everything rounds off.
让我们尝试一下现在时版本的 SRL.ipynb:
ini
prediction=predictor.predict(
sentence="The bright sun, the blue sky, the warm sand, the palm trees, everything rounds off."
)
head(prediction)
原始输出显示找到了谓词,如下所示:
yaml
Verb: rounds [ARG1: The bright sun , the blue sky , the warm sand , the palm trees , everything] [V: rounds] [ARGM-PRD: off] .
如果我们在AllenNLP上运行这个句子,我们将获得以下的视觉解释:
我们的基于BERT的变换器表现不错,因为单词"round"可以在其现在时形式中被找到,即"rounds"。
BERT模型最初未能产生我们预期的结果,但在友情帮助下,这个示例最终圆满结束。
我们可以看到:
- 随着我们实施的模型版本的演变,输出可能会有所变化。
- 一个智能制造4.0的实际思维方式需要更多的认知努力来指导变换器做什么。
让我们尝试另一个难以标记的句子。
样例6
示例6选取了一个我们通常认为只是一个名词的词。然而,比我们想象的更多单词既可以是名词又可以是动词。例如,"to ice" 是在冰球中用来将冰球射到整个溜冰场的对方球门线之后的动词。而"puck"是冰球运动中使用的圆盘。
一个冰球教练可以在一天开始时告诉球队要训练射冰球。然后当教练喊道:
现在,射冰球吧,伙计们!
请运行示例6看看会发生什么。
ini
prediction=predictor.predict(
sentence="Now, ice pucks guys!"
)
head(prediction)
变压器未能找到动词:"verbs": []。
游戏结束!我们可以看到变压器取得了巨大的进展,但开发人员仍有很大的空间来改进模型。人类仍然在游戏中告诉变压器该怎么做。
在线界面将"pucks"(冰球)与动词混淆了:
这个问题可能可以通过另一个模型来解决,但你将会遇到其他限制。即使是GPT-3也有你必须应对的限制。
这些限制将需要你的专业知识来使项目成功。因此,你将不得不创建专业化的词典以在项目中取得成功。这对开发人员来说是个好消息!你将会培养新的跨学科和认知技能,你的团队会很欣赏。
尝试一些自己的示例或样本,看看SRL在这种方法的限制下能做些什么。然后探索如何开发预处理函数,以展示给变压器模型在你定制的应用程序中要做什么。
在我们离开之前,让我们质疑SRL的动机。
质疑语义角色标注(SRL)的范围
在面对现实项目时,我们通常是孤独的。我们有任务要完成,唯一需要满足的人就是那些提出项目要求的人。
务实主义必须首先考虑,技术意识之后。
在2020年代,传统的人工智能思想和新思想并存。到本十年末,将只有一个获胜者,将一些传统思想融合到新思想中。
本节通过两个方面质疑语义角色标注(SRL)的生产力以及其动机:
- 谓词分析的限制
- 对"语义"一词的使用的质疑
谓词分析的限制
SRL依赖于谓词。SRL BERT只有在提供动词时才能工作。但数百万的句子中没有包含动词。
如果您在AllenNLP演示界面的"语义角色标记"部分(demo.allennlp.org/)中仅提供主语,它会正...
但是,如果您的主语是对问题的回答:
- Person 1: 你想喝点什么,请?
- Person 2: 一杯咖啡,谢谢。
当我们输入Person 2的回答时,SRL BERT找不到任何信息。
输出是0个总帧。SRL无法分析这个句子,因为它包含省略。谓词是隐含的,而不是明确的。
省略的定义是从一个句子中省略一个或多个不必要的词,以便理解。
每天都会说和写数亿句包含省略的句子。
然而,对于所有这些句子,SRL BERT都会产生0个总帧。
以下回答(A)以及以what、where和how开头的问题(Q)都会产生0个总帧:
Q:你想吃什么早餐?
A:煎饼配热巧克力。
(模型推断:煎饼=专有名词,with=介词,热=形容词,巧克力=普通名词。)
Q:你想去哪里?
A:伦敦,请。
(模型推断:伦敦=专有名词,please=副词。)
Q:你今天怎么上班的?
A:地铁。
(模型推断:地铁=专有名词。)
我们也可以将这种情况应用于对话中的问题,仍然得不到SRL BERT的框架(输出):
背景:在对话中,Person 2不想要咖啡:
Q:那茶呢?
A:不,谢谢。
Q:好的,热巧克力呢?
A:不。
Q:一杯水呢?
A:是的!
刚刚我们看到了一个没有框架、没有语义标记的对话。什么也没有。
我们可以以社交媒体上的一些电影、音乐会或展览评论来结束,这些评论也会产生0个框架:
最棒的电影! 我一生中最糟糕的音乐会! 精彩的展览! 这一节展示了SRL的限制。现在让我们重新定义SRL并展示如何实施它。
重新定义SRL
SRL BERT预设句子包含谓词,但在许多情况下,这是一个错误的假设。分析句子不能仅仅基于谓词分析。
谓词包含一个动词。谓词告诉我们更多关于主语的信息。以下谓词包含一个动词和附加信息:
The dog ate his food quickly.
"ate...quickly" 告诉我们狗吃东西的方式。然而,一个动词本身也可以是一个谓词,如:
"狗吃。"
这里的问题在于"动词"和"谓词"属于句法和语法分析的一部分,而不是语义学。
从语法和功能角度理解单词如何组合在一起是有限制的。
考虑下面这个毫无意义的句子:
Globydisshing maccaked up all the tie.
SRL BERT 在一个毫无意义的句子上完美执行了"语义"分析:
从这些例子中我们可以得出一些结论:
- SRL谓词分析仅在句子中包含动词时有效
- SRL谓词分析无法识别省略句
- 谓词和动词是语言结构的一部分,属于语法分析
- 谓词分析只识别结构,而不识别句子的含义
- 语法分析远不止是句子的中心
- 语义分析关注短语或句子的含义,强调上下文和词语之间的关系。
语法分析包括句法、屈折和短语或句子中词语的功能。术语"语义角色标注"具有误导性,应该被命名为"谓词角色标注"。
我们完全可以理解没有谓词的句子,而且不受序列结构的限制。
情感分析可以解码句子的含义,无需进行谓词分析即可输出结果。情感分析算法完全理解"最好的电影"是积极的,无论是否存在谓词。
我的建议是将SRL与其他人工智能工具一起使用,正如我们将在第13章《使用Transformer分析虚假新闻》中看到的那样。
现在让我们总结我们对SRL的范围和限制的探讨。
总结
在本章中,我们探讨了SRL。SRL任务对人类和机器都很困难。Transformer模型已经展示了在许多自然语言处理主题上可以在一定程度上达到人类水平。
我们发现一个简单的基于BERT的Transformer可以执行谓词意义消歧。我们运行了一个简单的Transformer,它可以识别动词(谓词)的含义,而无需使用词汇或句法标记。 Shi和Lin(2019)使用了标准的句子+动词输入格式来训练他们的基于BERT的Transformer。
我们发现,使用精简的句子+谓词输入来训练的Transformer可以解决简单和复杂的问题。当我们使用相对罕见的动词形式时,达到了限制。然而,这些限制并不是最终的。如果在训练数据集中添加困难问题,研究团队可能会改进模型。
我们还发现了以人类善为出发的人工智能存在。艾伦人工智能研究所提供了许多免费的人工智能资源。此外,研究团队还在NLP模型的原始输出中添加了视觉表示,以帮助用户理解人工智能。我们看到解释人工智能与运行程序一样重要。这些视觉和文本表示提供了对基于BERT模型潜力的清晰视图。
最后,我们探讨了SRL的范围和限制,以优化如何将这种方法与其他人工智能工具一起使用。
通过其分布式架构和输入格式,Transformers将继续改进自然语言处理的标准化。
在下一章,第11章《让您的数据说话:故事、问题和答案》中,我们将挑战Transformer,处理通常只有人类能够很好执行的任务。我们将探索在命名实体识别(NER)和问题回答任务中,当面临时的任务时,Transformer的潜力。