英文原文链接:https://web.stanford.edu/~jurafsky/slp3/17.pdf
译者:鸽鸽(自己学习使用,非商业用途)
建议去我的博客阅读,体验感更佳。
17.2 关系抽取算法
关系抽取的算法主要有五类:手写模式、监督机器学习、半监督(通过bootstrapping和通过远程监督)以及无监督。我们将在接下来的章节中分别介绍这些算法。
17.2.1 使用模式抽取关系
最早并且现在依然常用的关系抽取算法是词法-句法模式( lexico-syntactic pattern),由Hearst(1992a)第一个开发,因此通常被称为Hearst patterns。例如以下句子:
Agar is a substance prepared from a mixture of red algae, such as Gelidium, for laboratory or industrial use.
琼脂是一种由红藻(如Gelidium)混合制备的物质,用于实验室或工业用途。
赫斯特指出,大多数人类读者不会知道Gelidium是什么,但他们可以很容易推断出它是一种红藻(的下义词hyponym)。她认为以下词法-句法模式:
意味着以下语义
让我们可以推断出
NP {, NP}* {,} (and|or) other NPH | temples, treasuries, and other important civic buildings |
NPH such as {NP,}* {(or|and)} NP | red algae such as Gelidium |
such NPH as {NP,}* {(or|and)} NP | such authors as Herrick, Goldsmith, and Shakespeare |
NPH {,} including {NP,}* {(or|and)} NP | common-law countries, including Canada and England |
NPH {,} especially {NP}* {(or|and)} NP | European countries, especially France, England, and Spain |
: Figure 17.5 Hand-built lexico-syntactic patterns for finding hypernyms, using {} to mark optionality (Hearst 1992a, Hearst 1998).
图17.5显示了Hearst(1992a, 1998)提出的五种模式,用于推断上下位关系;我们用NPH表示parent/hyponym。现代版本的基于模式的方法通过增加命名实体约束来扩展它。例如,如果我们的目标是回答关于“谁在哪个组织中担任什么职务”的问题,我们可以使用如下模式。
手工构建的模式具有高精度的优势,并且可以针对特定领域进行定制。但另一方面,它们通常是低召回率的,而且如果要创建所有可能的模式,工作量很大。
17.2.2 通过监督学习进行关系抽取
监督机器学习的关系抽取方法遵循的是一种大家现在应该很熟悉的方案。选择一组固定的关系和实体,用这些关系和实体手动标注训练语料,然后用标注后的文本来训练分类器标注一个未出现过的测试集。
最直接的方法,如图17.6所示:(1) 找到命名的实体对(通常在同一个句子中);(2) 为每对实体进行关系分类。分类器可以使用任何有监督的技术(逻辑回归、RNN、Transformer、随机森林等)。
一个可选的中间过滤分类器可以用来加快处理速度,通过二元决策判定给定的一对实体是否相关(通过任何关系)。它的训练对象是直接从标注语料中的所有关系中抽取的正例,以及从未标注关系的句内实体对中生成的负例。
function FINDRELATIONS(words) returns relations
relations←nil
entities←FINDENTITIES(words)
forall entity pairs <e1, e2> in entities do
if RELATED?(e1, e2)
relations←relations+CLASSIFYRELATION(e1, e2)
基于特征的监督关系分类器。让我们考虑基于特征的分类器(如逻辑回归或随机森林)的样本特征,对这个句子中的美国航空公司(Mention 1,或M1)和Tim Wagner(Mention 2,M2)之间的关系进行分类。
(17.5) American Airlines, a unit of AMR, immediately matched the move, spokesman Tim Wagner said
这些包括词的特征(如词嵌入、one-hot、无论是否抽取词干stemming):
- M1和M2的核心词(headwords)及其连接 (concatenation)
Airlines Wagner Airlines-Wagner- M1和M2的词袋和ngram
American, Airlines, Tim, Wagner, American Airlines, Tim Wagner- 特定位置的词和ngram
M2: -1 spokesman
M2: +1 said- M1和M2之间的词袋或ngram
a, AMR, of, immediately, matched, move, spokesman, the, unit
以及命名实体特征:
- 命名实体类型及其连接(concatenation)
M1: ORG, M2: PER, M1M2: ORG-PER
- M1和M2的实体级别(从集合NAME、NOMINAL、PRONOUN中选择)。
M1: NAME [it or he would be PRONOUN]
M2: NAME [the company would be NOMINAL]
- 参数之间的实体数量(在本例中,对于AMR)。
句法结构是一个有用的信号,通常表示为依存关系或穿越实体之间的树的成分句法路径。
- M1和M2之间的成分路径
NP ↑ NP ↑ S ↑ S ↓ NP- 依存树路径
Airlines ←subj matched ←compsaid →subj Wagner
神经监督关系分类器 关系抽取的神经模型同样将这个任务视为监督分类。让我们考虑一个应用于TACRED关系抽取数据集和任务的典型系统 (Zhang et al., 2017) 。在TACRED中,提供一个句子和其中的两个spans:主语,即人或组织;宾语,即任何其他实体。任务是从42个TAC关系中分配一个关系(或者没有关系)。
一个典型的Transformer-encoder算法,如图17.7所示,简单的说就是把一个像BERT这样的预训练编码器,在句子表示的基础上增加一个线性层(例如BERT [CLS] token),这个线性层被微调为1-of-N分类器,以分配43个标注中的一个。BERT编码器的输入是部分去词汇化的;主语和宾语实体在输入中被其NER标注所取代。这有助于保持系统不会对单个词项过度拟合 (Zhang et al., 2017) 。当使用BERT类型的Transformers进行关系抽取时,使用类似RoBERTa (Liu et al., 2019) 或SPANbert (Joshi et al., 2020) 这样的BERT版本会很有帮助,这些版本没有用[SEP]标记分隔的两个序列,而是将单个长序列的句子形成输入。
一般来说,如果测试集与训练集足够相似,并且有足够多的手工标注数据,监督关系抽取系统可以获得很高的准确率。但对一个庞大的训练集进行标注是非常昂贵的,而且监督模型也很脆弱:它们不能很好地泛化到不同的文本类型。由于这个原因,关系抽取的很多研究都集中在我们接下来要讲的半监督和无监督方法上。
17.2.3 通过 Bootstrapping 进行半监督关系抽取
监督机器学习假设我们有大量的标注数据。不幸的是,这很昂贵。但假设我们只有一些高精度的种子模式(seed patterns),就像第17.2.1节中的那些,或者可能有一些种子元组(seed tuples)。这已经足够boostrap一个分类器了!Bootstrapping的过程是获取种子对中的实体,然后找到包含这两个实体的句子(通过网络或者我们使用的任何数据集)。从所有这些句子中,我们抽取并归纳实体周围的上下文,以学习新的模式。图17.8给出了一个基本算法。
function BOOTSTRAP(Relation R) returns new relation tuples
tuples←Gather a set of seed tuples that have relation R
iterate
sentences←find sentences that contain entities in tuples
patterns←generalize the context between and around entities in sentences
newpairs←use patterns to grep for more tuples
newpairs←newpairs with high confidence
tuples←tuples + newpairs
return tuples
假设我们需要创建一个航空公司/枢纽对的列表,我们只知道Ryanair在Charleroi有一个枢纽。我们可以使用这个种子事实来发现新的模式,在我们的语料库中找到这个关系的其他提及。我们搜索Ryanair、Charleroi和hub在某种程度上接近的术语。也许我们会发现以下一组句子。
(17.6) Budget airline Ryanair, which uses Charleroi as a hub, scrapped all weekend flights out of the airport.
以沙勒罗瓦为枢纽的低价航空公司Ryanair取消了所有周末从机场起飞的航班。
(17.7) All flights in and out of Ryanair’s hub at Charleroi airport were grounded on Friday…
所有进出沙勒罗伊机场枢纽的航班都在周五停飞。
(17.8) A spokesman at Charleroi, a main hub for Ryanair, estimated that 8000 passengers had already been affected.
瑞安航空的核心枢纽查勒罗伊的一位发言人估计,已经有8000名乘客受到影响。
从这些结果中,我们可以利用实体提及之间的上下文单词、提及一之前的词、提及二之后的词,以及两个提及的命名实体类型,还有其他可能的特征,来抽取如下的通用模式:
/ [ORG], which uses [LOC] as a hub /
/ [ORG]’s hub at [LOC] /
/ [LOC], a main hub for [ORG] /
这些新的模式可以继而用来搜索更多的元组。Bootstrapping系统还为新的元组分配了置信度值(confidence values),以避免语义漂移(semantic drift)。在语义漂移中,一个错误的模式会导致错误元组的引入,而这些元组又会导致不正确的模式的建立,使得抽取关系的意义发生漂移。
比如下面的例子。
(17.9) Sydney has a ferry hub at Circular Quay.
(17.9) 悉尼在环形码头有一个轮渡枢纽。
如果被接受为正例,这个表达式可能导致元组的错误引入。基于这个元组的模式可能会将更多的错误传播到数据库中。
模式的置信度值基于两个因素的平衡:模式相对于当前元组集的表现,以及模式就在文档集中产生的匹配数量而言的生产率。更正式的表达是,给定一个文档集 ,一个当前的元组集 ,以及一个引入的模式 ,我们需要跟踪两个因素:
- :在中查找时,所匹配的中的元组集
- :在中找到的元组的总集
下面的公式平衡了这些考虑因素 (Riloff and Jones, 1999):
这个度量标准一般经过标准化处理,产生一个概率。我们可以通过结合中与该元组相匹配的所有模式中支持该元组的证据来评估所提出的新元组的置信度 (Agichtein and Granoisy-or vano, 2000)。结合这种证据的一种方法是noisy-or技术。假设一个给定的元组是由中的一个模式子集支持的,每个模式都有自己的置信度,正如上面的度量所示。在noisy-or模型中,我们做了两个基本假设。首先,如果一个提出的元组是假的,它的所有支持模式一定是错误的;其次,它们各自失败的来源都是独立的。如果我们不严格地将我们的置信度视为概率,那么任何单个模式失败的概率为;一个元组的所有支持模式出错的概率是它们单个失败概率的乘积,因此我们对一个新元组的置信度有以下公式:
在bootstrapping过程中,为接受新的模式和元组设置保守的置信度阈值,有助于防止系统偏离目标关系。
17.2.4 远程监督式关系抽取
虽然手工标注文本的关系标注成本很高,但是有一些方法可以找到间接的训练数据来源。远程监督方法 distant supervision (Mintz et al., 2009) 结合了bootstrapping和监督学习的优点。远程监督不是只用少量的种子,而是使用一个大型数据库来获取大量的种子实例,从所有这些例子中创建大量的噪声模式特征(noisy pattern features),然后将它们结合在一个监督分类器中。例如,假设我们要学习人与出生城市之间的出生地关系。在基于种子的方法中,我们一开始可能只有5个例子。但基于维基百科的数据库,如DBPedia或Freebase,有数万个许多关系的例子;包括超过10万个出生地的例子(,等)。下一步是在大量的文本上运行命名实体标注器-——Mintz et al. (2009) 使用了维基百科上的80万篇文章,并抽取出所有具有与元组相匹配的两个命名实体的句子,比如:
…Hubble was born in Marshfield…
…Einstein, born (1879), Ulm…
…Hubble’s birthplace in Marshfield…
现在可以从这些数据中抽取训练实例,每个元组<关系,实体1,实体2>都有一个相同的训练实例。因此,每个如下的元组都会有一个训练实例:
<born-in, Edwin Hubble, Marshfield>
<born-in, Albert Einstein, Ulm>
<born-year, Albert Einstein, 1879>
然后我们可以应用基于特征或神经网络的分类。对于基于特征的分类,标准的监督关系抽取特征,比如两个提及的命名实体标注,提及之间的词和依存路径,以及相邻的词。每个元组都会有从许多训练实例中收集到的特征;像这样的单个训练实例的特征向量将含有来自许多提到Einstein和Ulm的不同句子的词法和句法特征)。
因为远程监督有非常大的训练集,所以它也能够使用非常丰富的特征,这些特征是这些单个特征的联合体。所以我们会抽取出成千上万的模式,这些模式会将实体类型与中间的单词或依存路径结合在一起,比如:
PER was born in LOC
PER, born (XXXX), LOC
PER’s birthplace in LOC
回到我们的运行示例,对于这个句子:
(17.12) American Airlines, a unit of AMR, immediately matched the move, spokesman Tim Wagner said
我们将学习丰富的连词(conjunction)特征,比如:
M1 = ORG & M2 = PER & nextword=“said”& path= NP ↑ NP ↑ S ↑ S ↓ NP
结果是一个监督分类器,它有大量丰富的特征集用于检测关系。由于并不是每个测试句子都会有一个训练关系,所以分类器还需要能够将一个例子标记为无关系。这个标注是通过随机选择在任何Freebase关系中都未出现的实体对,抽取它们的特征,并为每个这样的元组建立一个特征向量来训练的。最终的算法在如图17.9所示。
function DISTANT SUPERVISION(Database D, Text T) returns relation classifier C
foreach relation R
foreach tuple (e1,e2) of entities with relation R in D
sentences←Sentences in T that contain e1 and e2
f←Frequent features in sentences
observations←observations + new training tuple (e1, e2, f, R)
C←Train supervised classifier on observations
return C
远程监督享有我们所探讨的每一种方法的优势。像监督分类一样,远程监督使用一个具有大量特征的分类器,并通过详细的手工创建的知识进行监督。和基于模式的分类器一样,它可以利用高精度的证据来证明实体之间的关系。事实上,远程监督系统学习到的模式就像早期关系抽取器手工构建的模式。例如Snow et al. (2005)的is-a或hypernym抽取系统使用来自WordNet的hypernym/hyponym NP对作为远程监督,然后从大量的文本中学习新的模式。他们的系统精确地产生了Hearst(1992a)最初的5个模板模式,但也导致了包括这4个模式在内的7万个额外的模式:
NPH like NP Many hormones like leptin...
NPH called NP ...using a markup language called XHTML
NP is a NPH Ruby is a programming language...
NP, a NPH IBM, a company with a long...
这种同时使用大量特征的能力意味着,与基于种子的系统中模式的迭代扩展不同,没有语义漂移的发生。与无监督分类一样,它不使用有标注的训练语料库,而是依赖于非常大量的无标注数据,因此对训练语料库中的体裁(genre)问题不敏感。远程监督的另一个优势是,它可以创建训练元组,以便与神经网络分类器一起使用,而神经网络分类器不需要特征。远程监督的主要问题是,它往往会产生低精度的结果,因此目前的研究重点是如何提高精度。此外,远程监督只能帮助抽取已经存在的足够大的数据库的关系。如果要在没有数据集的情况下抽取新的关系,或者新领域的关系,就必须使用纯无监督的方法。
17.2.6 关系抽取的评估
有监督的关系抽取系统是通过使用带有人类标注的gold-standard关系的测试集并计算精度、召回率和 F-measure 来评估的。标注精度和召回率要求系统正确分类关系,而未标注的方法只是衡量系统检测相关实体的能力。
半监督和无监督方法更难评估,因为它们是从网络或大型文本中抽取全新的关系。由于这些方法使用了非常多的文本,所以通常不可能只在一个小的标注测试集上运行它们,因此不可能预先标注出一个正确的关系实例的gold set。
对于这些方法,可以通过从输出中随机抽取一个关系样本来(仅仅是)近似精确性,并让人检查这些关系的准确性。通常,这种方法侧重于从文本中抽取的元组,而不是关系的提及;系统不需要检测每一个关系的提及来正确评分。相反,评估是基于系统完成任务时数据库中包含的元组集。也就是说,我们想知道系统是否能发现 Ryanair 在 Charleroi 有一个枢纽;我们并不关心它发现了多少次。那么,估计的精度 就是:
译:P = 样本中正确提取的关系元组 / 样本中提取的关系元组总数
另一种能给我们提供一点召回信息的方法是计算不同召回级别的精度。假设我们的系统能够对它所产生的关系进行排序(按照概率或置信度),我们可以分别计算前1000个新关系、前10000个新关系、前100000个新关系的精度等等。在每一种情况下,我们都会从该集合中随机抽取一个样本。这将向我们展示当我们抽取越来越多的元组时,精度曲线的表现。但是没有办法直接评估召回率。
本章剩余内容见:《自然语言处理综论》第17章-信息抽取(下)