对于任何给定的问题,很可能已经有人把答案写在某个地方了。以电子形式提供的自然语言文本的数量真的惊人,并且与日俱增。然而,自然语言的复杂性使访问这些文本中的信息非常困难。NLP 目前的技术水平仍然有很长的路要走才能够从不受限制的文本对意义建立通用的表示。如果我们不是集中我们的精力在问题或“实体关系”的有限集合,例如:“不同的设施位于何处”或“谁被什么公司雇用”上,我们就能取得重大进展。本章的目的是要回答下列问题:
- 我们如何能构建一个系统,从非结构化文本中提取结构化数据如表格?
- 有哪些稳健的方法识别一个文本中描述的实体和关系?
- 哪些语料库适合这项工作,我们如何使用它们来训练和评估我们的模型?
一路上,我们将应用前面两章中的技术来解决分块和命名实体识别。
1 信息提取
信息有很多种形状和大小。一个重要的形式是结构化数据:实体和关系的可预测的规范的结构。例如,我们可能对公司和地点之间的关系感兴趣。给定一个公司,我们希望能够确定它做业务的位置;反过来,给定位置,我们会想发现哪些公司在该位置做业务。如果我们的数据是表格形式,如 1.1 中的例子,那么回答这些问题就很简单了。
表 1.1:
位置数据
>>> locs = [('Omnicom', 'IN', 'New York'),
...