为了通过线上的百科网站构建知识库,已经有无数人付出了巨大的努力。这些知识库对机器理解文本信息发挥着至关重要的作用。然而,大多数非英文知识库,尤其是中文知识库,仍然非常少见。以往许多从在线百科网站中提取知识的系统,虽然适用于建立中文知识库,但仍面临着两大挑战。第一,构建本体和构建有监督的知识抽取模型需要消耗巨大的人力。二是知识库更新频率很低。为了解决这些问题,我们提出了一个永不停息的中文知识抽取系统:CN-DBpedia,它可以自动生成一个规模不断扩大、不断更新的知识库。特别是通过重用现有知识库的本体,建立一个端到端的事实抽取模型,降低了人力成本。我们进一步提出了一种智能的主动更新策略,以保持我们的知识库的新鲜度,而且不需要花费过多的人力。我们发布的在线服务API已经被调用了1.64亿次,这证明了我们系统的成功。
随着Web应用程序的推动,万维网上充斥着前所未有的信息。但是,大多数信息只能由人读取,并不能由机器读取。为了使机器理解Web内容,已经有无数人为了通过线上百科网站构建知识库而付出了巨大的努力。因此,各种知识图谱或知识库已经被构建出来,例如Yago,DBpedia和Freebase。这些知识库在许多应用程序中发挥着重要的作用,例如问答和推荐系统。
如今,大部分的知识库都是英文知识库。非英文知识库,如中文知识库,仍然非常罕见。例如,DBpedia是一项公共项目,旨在从111种不同语言版本的维基百科中提取结构化的多语言知识。其英文版包含370多万个实体,而其中文版只包含约一百万个实体。中文应用的普及需要更多的中国知识库。
虽然已经存在许多知识库的构建方法,例如Yago,DBpedia 和 zhishi.me(中文知识库),但我们仍然面临两个挑战:
为了解决这些问题,我们提出了一个永不停息的中文知识抽取系统:CN-DBpedia。我们的贡献如下:
本文的其余部分如下所示。在第2节中,我们介绍了CN-DBpedia的体系结构。在第3节中,我们将介绍如何减少构建CN-DBpedia的工作量,包括重用DBpedia的本体和构建端到端的提取模型,以丰富实体的信息框。在第4节中,我们详细阐述了我们的更新策略。第5节介绍了本系统的统计分析,包括所提取的知识的分布和信息的使用情况。最后,我们在第6节中总结了我们的论文。
CN-DBpedia的系统架构如图1所示。该系统使用百度百科,沪东百科和中文维基百科(中国三大百科网站)作为主要数据来源。我们首先从那些百科网站的文章中提取原始知识。与维基百科不同,百度百科和沪东百科不提供任何转储文件。因此,我们需要使用爬虫来获取这些文章。百科网站中的文章包含许多结构化信息,例如摘要,信息框和类别信息。我们直接从这些结构化信息中提取事实,并将其填充到中文知识库中。
然而,到目前为止所获得的知识库的质量还不够好。还有三个额外的步骤来提高知识库的质量。
步骤1:规范。由于在线百科网站是用户生成内容的网站,所以对内容的描述通常是多种多样的。不同的贡献者可能使用不同的名称和格式来描述相同的属性和值。例如,为了描述一个人的出生,一个编辑者可能使用属性birthday,另一个编辑者可能使用date of birth或其他一些东西。因此,我们需要规范化知识库中的属性和值。
步骤2:完善。当前的知识库是不完整的,因为没有实体包含类型信息,而且有些实体缺少信息框信息。为了用类型充实实体,我们重用了DBpedia中的本体(尤其是类型分类)和DBpedia类型的中文实体。通过从文章的中查找更多的SPO (主语 -谓词- 宾语)三元组,我们完善了实体的信息框信息。具体情况见第3节。
步骤3:修正。当前的知识库可能包含错误的事实。我们提出了纠正这些错误的两个主要步骤。一是误差检测,二是误差校正。我们使用两种方法来检测错误。第一个是基于规则的检测。例如,我们可以使用属性的域和范围来查找错误,属性生日的取值范围是日期,任何其他类型的值都是错误的。第二种错误检测方法是基于用户反馈。CN-DBpedia提供了一个用户搜索界面来浏览系统中的知识。该接口允许用户对SPO事实的正确性提供反馈。界面如图2所示。误差检测后,我们主要使用众包进行纠错。我们将错误事实分配给不同的贡献者,并汇总他们的修正结果。挑战在于如何将多个不同的贡献者提供的数据聚合成为一致的数据。一种简单但有效的方法是多数票法。
我们降低人力成本的第一个想法是重用现有知识库的本体,并使用现有知识库中的类型添加中文实体。第二个想法是构建一个端到端提取器来完善信息框。接下来,我们将阐述这两个概念。
构建一个被广泛接受的分类体系需要大量的人力工作。为了避免这种情况,我们重用了DBpedia的分类体系,因为它定义得很好,并且得到了广泛的认可。分类体系重用的第一步是使用英文DBpedia的类型输入中文实体。为了解决这个问题,我们开发了一个系统:CUTE(跨语言类型推断)。
图3是CUTE的系统架构。系统构建了一个有监督的层次分类模型,该模型接受一个无类型的中文实体(具有其特征)作为输入,并在DBpedia中输出所有有效的英文类型。与单层分类模型相比,层次模型减少了分类时间,提高了分类精度。因此,构建有效模型的关键就归结为构建高质量的标记数据集。由于减少人工工作是我们主要关注的问题,因此我们开发了一个自动生成标记数据的程序。我们注意到英文/中文知识库中的一些实体可能具有相同的中文标签名称。因此,我们可以将中文实体与具有相同中文标签名称的英文实体配对。中文实体以及配对的英文实体的类型,自然都是带标签的样本。然而,上述方法构建的训练数据的质量仍然存在很多问题:
为了提高训练数据的质量,我们提出了两种方法:
补全信息框是充实CN-DBpedia的关键步骤。这一步的自动化对于降低人力成本是至关重要的。信息框包含关于实体的结构化<主语、谓语、宾语>(即三元组)事实,如<莱昂纳多·迪卡普里奥,出生地,好莱坞>。信息框补全是从百科网站的文章中为给定的一对实体和谓词抽取宾语的任务。我们将提取问题建模为一个序列到序列(seq2seq)的学习问题。输入是一个包含特征词的自然语言句子,输出是每个特征词的标签。标签是1或0,用于预测特征词是否为谓词对象的一部分。我们为每个谓词训练一个抽取器 ε e \varepsilon_{e} εe。例如,图4中的句子出现在莱昂纳多·迪卡普里奥的维基百科页面。这个生日的抽取器将会把好莱坞和加州标记为莱昂纳多·迪卡普里奥的真实出生地。
建立一个有效的抽取器有两个关键问题。第一是如何构造训练数据。第二是如何选择所需的抽取模型。对于第一个问题,我们采用了远程监控的方法。基本思想是维基百科信息框包含许多关于实体的结构化事实,其中许多事实也在实体文章的自由文本部分中提到。因此,我们可以使用信息框中表示事实的句子作为训练数据。例如,如果<莱昂纳多·迪卡普里奥,出生地,好莱坞>出现在莱昂纳多·迪卡普里奥的信息框中,我们可以很容易地找到句子(如图4所示),并在句子中正确的标注宾语。
对于第二个问题,我们使用长短时记忆递归神经网络(LSTM-RNN)进行信息抽取。LSTM-RNN在复杂信息的建模和处理方面已被证明是有效的,并在许多自然语言处理任务中取得了最先进的结果。然而,LSTM-RNN很少用于信息抽取。基于以下原因,我们设想LSTM-RNN可以成为一个强大的信息抽取工具。首先,在给定标记数据的情况下,深度学习框架可以提取特征和表示,从而节省了大规模、多谓词信息抽取的特征工程的成本。其次,LSTM-RNN能够较好地处理长距离依赖关系,并且能够泛化自然语言的句法模式。
模型结构如图5所示。输入文本被视为一个特征词序列。我们的最终输出的是一个带标签的序列(带有TRUE或FALSE标签),它与输入特征词序列具有相同的长度。我们对输入特征词序列中的每个特征词使用混合表示,以涵盖尽可能多的用于知识库构建的有用信息。向量表示为三个向量的串联:单词嵌入向量(V)、短语信息(P )、类型信息(T)。V代表单词的字面信息,P代表我们对单词如何组合成短语的先验知识,T是实体e的类型表示。上一步得到的每个特征词的表示现在被输入到LSTM递归神经网络。显然,在自然语言句子中,特征词的标签既与前面的特征词相关,也与后面的特征词相关。这促使我们使用双向的LSTM隐藏层来捕获过去和未来的输入特征词。
最后我们使用二元交叉熵损失函数作为目标函数训练模型:
其中 y ^ t \hat{y}_{t} y^t(0或1)为第t个特征词的基真值。我们在训练数据生成阶段得到 y ^ t \hat{y}_{t} y^t。
在本节中,我们将详细介绍我们的更新机制。我们首先介绍一个被广泛使用的更新策略,然后介绍一个更智能的更新策略。
定期更新。更新策略对于知识库的新鲜度至关重要。最基本的更新策略是定期更新。现有的知识库(如DBpedia和Yago)大多使用这种更新策略。就是在一段时间后用一个新版本完全取代当前的知识库。在定期更新中,周期是一个关键问题。较长的更新周期意味着较低的更新成本,但是知识库可能包含较多的已经过时的事实。较短的更新周期可以保持知识库的新鲜度,但更新成本较高。如何设置一个最佳的更新周期是一个具有挑战性的问题。
为了解决这个问题,CN-DBpedia不仅支持定期更新,而且支持更智能的更新策略,该策略通过监视实体的变化来主动更新知识库,并且只在实体的事实发生变化时才更新实体。我们将此更新策略称为主动更新,将在以下文本中详细说明。
主动更新。主动更新的关键问题是识别可能包含新事实的新实体(如iPhone 7)或旧实体(已存在于知识库中)(如唐纳德•特朗普)。我们通过两个来源来确定这些实体:
热点新闻通常是一个具有时效性的重要事件。热门新闻中提到的实体要么是新的实体,要么是事实往往会发生变化的实体。例如,唐纳德·特朗普当选为美国第45任总统。他在知识库中的职业应被更新为总统。为了找到热点新闻中提到的实体,我们构建了一个实时新闻监控器,收集最新的热点新闻的标题。然后,我们识别新闻标题中的实体,并从百科网站中检索实体。
搜索引擎中流行的搜索关键词或句子通常包含目标实体。许多中文搜索引擎,如百度、搜狗等,都有一个实时热点查询或主题面板。此外,一些搜索引擎,如搜狗,甚至显示搜索量排名前10的电影,歌曲,游戏等。它们也是寻找新实体或最近被更新的实体的高质量资源。
剩下的惟一问题是从新闻标题或搜索的查询文本中提取实体名称。为了确保我们的解决方案不会遗漏任何新的实体,我们不使用新的短语检测算法。相反,我们使用一个简单的贪婪实体提取方法。我们首先进行分词,将句子/短语转换成单词列表。然后我们选择这个列表的所有子列表,并将每个子列表连接到一个字符串中。这样,我们就得到了很多子字符串。其中一些是实体名称,另一些是句子片段。无论子字符串是什么,我们都会在百科网站上搜索它。然后我们可以判断它是实体名称(有命中结果)还是无意义的片段(没有返回结果)。此外,可以过滤一些IDF(逆文档频率)较低的子字符串,因为它们通常是没有意义的实体。
我们将在本节中介绍系统的统计数据。因为CN-DBpedia是不断更新的。CN-DBpedia中的实体和事实在不断增加。到2016年12月,CN-DBpedia包含10,341,196个实体和88,454,264个关系。表1显示了实体在不同类型上的分布(只显示了前15种最流行的类型)。我们可以看到,我们的知识库涵盖了来自各种不同领域的实体。表2进一步显示了结构化事实的分布。显而易见,信息框中的事实起着主导作用。
表1:CN-DBpedia中最流行的15种类型
表2:CN-DBpedia中的关系
我们还发布了许多API,使我们的知识库可以通过Web进行访问。截至2016年12月,自2015年12月发布以来,这些API已被调用了1.64亿次。表3显示了每个API的函数及其使用情况的统计数据。我们可以看到,为文本中提到的某个实体返回一个实体的提及到实体(mention2entity)服务是最流行的。我们设想,这些API中的大多数将服务于许多大数据分析应用,作为底层的知识服务。
在本文中,我们提出了一个永不停息的中文知识抽取系统:CN-DBpedia。与其它知识库相比,CN-DBpedia所依赖的人工知识非常少,并且通过智能的主动更新策略提供了最新的知识。CN-DBpedia提供的知识服务API被调用超过1.6亿次,证明了我们系统设计的合理性。在不久的将来,我们将进一步整合更多的知识资源,增加CN-DBpedia的覆盖面。