写在之前

本文为鄙人的毕业论文,之前对机器学习这玩意儿毫无了解,迫于毕业压力跟一帮毫无经验的硬件同学研究了好几个月的NLP。最后算是跑通了整个链路,但是效果可以说是差强人意,完全无法用的一个模型。鄙人典型的蛮干党,什么数学原理都不懂,搞了一些论文读了一读,上手就干他妈的,最后发现完全玩不转,但最后还是沉淀下来一些经验,我当时做这块发现实践资料非常少,故发出,给水毕业论文的学生一些参考。

本项目为笔者毕业设计,于2019年12月了解到该项目,在此前对机器学习无任何了解。在大学期间(2016-2019)一直学习安全相关知识,主攻WEB安全,目前研究方向为云原生安全。故对WEB前端、后台、数据库有一定的知识储备和了解,同时对于各种编程语言有一定的了解。本项目并非笔者一己之力,团队规模为7人,均为某邮2016级电子信息工程专业的学生。

PS: 黑色的地方不是没有图片,而是图片的背景是透明的,所以就黑了,建议点开观看。也可以在此处看最后交给学校的pdf版本。
https://whip1ash.cn/file/Design%20of%20Knowledge%20Graph%20and%20Knowledge%20Inference%20System%20Based%20on%20Neural%20Network.pdf

Introduction

Background

近年来,随着人工智能的迅速发展,支持人工智能的技术逐渐被更多人了解并研究,知识图谱就是其中很重要的一个技术。目前,知识图谱在很多日常生活的很多方面都已经得到了非常广泛的应用。比如语义化的搜索引擎(Google,Baidu等),移动助手(Mobile assistant)(Siri,Cortana等),以及一些智能问答机器人(intelligent chatbots)。

知识图谱相关的支持技术在很早就已经开始得以发展,比如语义网、逻辑描述和专家系统等,但知识图谱(Knowledge Graph)这个概念来源于Google在2012年发起的一个项目,在此提出”Knowledge Graph: things, not strings”,但Google官方并没有给出知识图谱的定义,同时也没有一个得到广泛认可的知识图谱的定义。所以,在2018年,基于图1的架构提出了对于知识图谱的定义。

未命名文件 -2-

A knowledge graph acquires and integrates information into an ontology and applies a reasoner to derive new knowledge.

由此知识图谱定义可得出知识图谱的两个重要模块,一是获取并整合知识,构建以三元组(RDF-Style triples)为基础的知识库(Knowledge Base),像这种。二是使用知识推理来挖掘知识库中隐藏的知识,达到知识图谱补全的效果,或者使其对知识图谱进行降噪,检索出当前知识图谱中的错误。知识图谱嵌入(Knowledge Graph Embedding)是当前实现知识推理非常有效的方式。

时至今日,知识图谱相关技术的发展已经比较完善,利用知识图谱解为当前的应用场景提供更好的支撑或探索知识图谱新应用场景已是大势所趋。将知识图谱与现有的资源相结合,对现有的资源/知识相结合,从而发挥出数据更大的价值。在未来,知识图谱等相关技术一定会成为支撑生产的底层技术,从而极大的提高当前社会的生产力。

Purpose

本文提出了一个基于知识图谱的系统设计,能够使用非结构化的数据快速搭建某一领域基于三元组的知识库,并使用基于神经网络的知识推理系统对当前的知识库进行补全和降噪。该系统的耦合度低,在知识库不断增长的过程中,各个模块可以独立升级,以增强知识图谱的获取知识和完善知识的能力。

Content

本文结构分为三个部分。
第一部分研究了知识图谱的构建,在其中包括知识过去,数据标记,命名实体识别和关系抽取,旨在于利用非结构化文本数据源快速构架知识图谱中的知识库,在具体实现上讨论分析了爬虫,机器学习等技术应用的方案,并提出了知识图谱构建的流程。

第二部分研究了知识图谱推理技术,知识图谱推理技术利用知识图谱嵌入的方式来实现,在具体方法主要分为基于规则的推理、基于分布式表示的推理和基于神经网络推理。在基于神经网络的推理中,目前ProjE和ConvE是相对比较成熟的模型,在此部分中对这两个模型的原理进行了分析。

第三部分提出了一个具有基于神经网络知识图谱推理能力的知识图谱系统设计,包含完整的知识图谱构建和知识推理系统在整体系统中的应用。此部分还详细分析了该系统的整体结构,以及具体的实现方式,并且对于该系统的安全性进行了分析,并提出了一定的措施。

Knowledge Graph Construction

知识图谱本质上可以算作一个语义网,具有语义网的很多特性, 但又有所不同。知识图谱和语义网的目标都是实现人与计算机的无障碍沟通,让计算机能理解语言和概念,能够理解逻辑并拥有判断和推理能力,也就是使计算机更加智能化、自动化和人性化.语义网通过建立能够被计算机所理解的语义“元数据(meta data)”, 使网络上的信息能通过统一的标准成为一个通用的信息交换媒介, 从而大大提高网络的搜索效率和推理理解能力,知识图谱则是以图谱的形式达到相同的目的.但是知识图谱的数据来源可以是百科类的半结构化数据和各种网络数据,关注的更多是知识清洗、知识融合和知识表示技术.早期语义网则多是靠人工构建,关注重点也不一样。

构建知识图谱是万里长征第一步,需要以此为基础来更好的服务于业务,更有效的发挥知识的价值。使用非/半结构化的数据(文本)构建知识库分为以下五个步骤:(1)获取数据,不同来源的文本需要进行标准化,并存储。(2)对部分文本进行标注,训练命名实体识别和关系抽取模型。(3)命名实体识别。(4)关系抽取。(5)利用实体和关系构建知识库。

graph workflow

Acquire Knowledge

对于日常百科类数据,目前已经有很多已经构建好的知识库,比如Freebase、DBpedia、Wikidata等。但在实际应用中,结构化的数据中的实体类型和关系类型并无法直接进行使用,所以需要将非结构化的数据和半结构化的数据处理成RDF形式来进行使用。

知识图谱中的知识库作为结构化的语义知识库,使用RDF来描述数据,基本要素为“节点,属性和边”,基本表现形式是三元组,一般为“实体-关系-实体”。其中,节点表示实体或概念,而边表示各种各样的关系,属性即为某一类节点的公共性质。实体指的是实际存在的事物,概念是比实体更抽象的表达。关系是实体与实体、实体与概念之间的结构或联系,包括层级关系,比如“属于”、 “一部分 ”, 和非层级关系,比如属性等。本体在知识图谱的概念中也总是被提及,它属于知识表示的概念,来源于哲学的“本体论”.“知识本体”最初研究世界上各种事物以及代表这些事物的范畴的形式特性,并对其进行分类、建立规范,后来在计算机科学中 “知识本体”有了科学定义, 表示概念体系的明确规范,使其概念明确、形式简单、容易共享,比如生物学领域知识本体就是生物学领域知识的抽象.同样地,“本体”是对领域实体存在本质的抽象,强调实体间的关联,并用多种知识表示元素表达出来,构造本体的目的就是为了实现一定程度的知识共享和重用.本体强调实体间或概念间的 关联关系,知识图谱在本体的基础上,增加了更多关于实体的信息.也就是说,本体描述了知识图谱的数据模式,给知识图谱构建数据模式相当于给它建立了本体.

对于知识的存储主要有两种方案,分别是RDF存储和图数据库存储。其中,RDF存储使用唯一的URI(Uniform Resource Identifier)来表示一个资源,一个资源通常有表示一个事务,资源与资源捡的关系用属性来表述,三种资源可以组成一个三元组。三元组模式的查询、归并和连接都非常高效,但因为其自身索引方式的问题,空间开销比较大,更新维护的代价也较大。

相对来说,图数据库可以提供完善的图查询语言(GraphQL)、支持各种图挖掘算法。其中Neo4j是非常优秀的图数据库,性能卓越,良好的图形化界面,支持Cypher图查询语言(the Graph Database Query Language).

-w1738

专业领域的非结构化数据在百科性的知识库中无法有很好的覆盖,所以可以通过教材和讲义中获取,但讲义的数据格式杂乱,并且没有统一的标准,将其标准化是一个十分困难的过程。教材的数字化程度参差不齐,可以辅助使用OCR(Optical Character Recognition)技术对文本进行识别,目前相关技术十分成熟,百度云、科大讯飞等都提供相关的技术服务。

同时也可以使用爬虫对相关网页进行爬取,爬取到的数据能够以各种形式进行保存,并且处理后的数据格式比较统一,非常易于使用。Scrapy是非常强大且易用的爬虫框架,基于Python开发,快速且高效,并且具有良好的扩展性。

Data Annotation

2007 年,斯坦福大学教授李飞飞等人开始启动 ImageNet 项目,该项目主要借助亚马逊的劳务众包平台Mechanical Turk(AMT)来完成图片的分类和标注,以便为机器学习算法提供更好的数据集.截至 2010 年,已有来自167个国家的4万多名工作者提供了14197122张标记过的图片,共分成21841种类别.从2010年到2017年,ImageNet 项目每年举办一次大规模的计算机视觉识别挑战赛,各参赛团队通过编写算法来正确分类、检测和定位物体及场景.ImageNet 项目的成功,改变了人工智能领域中大众的认知,即数据是人工智能研究的核心,数据比算法重要得多.从此,数据标注拉开了序幕.目前,学术界尚未对数据标注的概念形成一个统一的认识,比较认可的是由王翀和李飞飞等人提出的定义.他们认为,标注是对未处理的初级数据,包括语音、图片、文本、视频等进行加工处理,并转换为机器可识别信息的过程.原始数据一般通过数据采集获得,随后的数据标注
相当于对数据进行加工,然后输送到人工智能算法和模型里完成调用。

数据标注可视为模仿人类学习过程中的经验学习,相当于人类从书本中获取已有知识的认知行为.具体操作时,数据标注把需要计算机识别和分辨的文本事先打上标签,让计算机不断地识别这些文本的特征,最终实现计算机能够自主识别。文本标注是指根据一定的标准或准则对文字内容进行诸如分词、语义判断、词性标注、文本翻译、主题事件归纳等注释工作,其应用场景有名片自动识
别、证照识别等。目前,常用的文本标注任务有情感标注、实体标注、词性标注及其他文本类标注。

由于在多数情况下无法直接使用百科型图谱中的实体类型和关系类型,所以需要根据当前场景,构建实体类型和关系类型,然后对知识获取步骤中一部分数据进行标注。机器学习中的数据标注是人工对数据的进行标记,指出预期结果,以便能够训练机器学习的模型。数据的类型有很多种,比如文字,图像,音频或视频,所以数据标注技术也相应的分为文字标注,图像标注和视频标注等。这些技术的核心都是在元数据中嵌入或增加数据使其能够被机器使用NLP(Nature Languare Process)或computer vision检测到。

labeled data

-w1079

数据标注需要借助到一些工具,分为离线和在线两种。离线数据标注工具具有轻量、快捷的特性,但无法多人协同,如果需要标注的数据量较大则会比较困难,同时,离线数据标注工具输出格式比较单一。在线数据标注平台能够实现多人协同,在浏览器上进行操作,用户界面友好,但不一定符合当前场景对于数据格式的需求,数据无法自由流动。所以本项目实现了一个数据标注平台,后端使用Django Web框架开发,前端使用Vue框架开发,数据使用MySQL进行存储。前后端分离,模块化开发,耦合程度低,Web接口符合REST规范,同时具有良好的用户交互界面(UI),支持对实体类型、关系类型进行标注,标注后的数据输出格式自由度高。

数据库结构如下:
database stuct

API接口如下:
Entity/Relation

API Description
/ListType List entity types
/AddType Add entity types
/DelType Delete entity types
/EditType Edit entity types
/Save Save tags
/List List History
/Count Tags amount
/Del Delete specific tag
/Get Get specific tag content

Sentence

API Description
List List sentences
Done List done sentences
Doing List doing sentences
Count Get the number of sentences
Get Get a untagged sentence
Export Export data
Del Delete the sentnece which don’t have entity

-w2544

综上所述,数据标注的准确性决定了人工智能算法的有效性,因此,数据标注不仅需要有系统的方法、技术和工具,还需要有质量保障体系.

Named Entity Recognition

命名实体识别技术(Named Entity Recognition,NER)是人工智能NLP领域的核心基础技术之一。1956年优麦卡锡、明斯基、罗彻斯特和香农共同组织召开的用机器模拟人类智能的专题讨论会上指出,人工智能主要研究用人工的方法和技术模仿、延伸、扩展智能,最终实现机器智能,而人工智能的长期目标是实现达到人类智力水平的人工智能。为实现人工智能的目标,建造一个可以支撑自然语言处理和理解的大规模全方位知识库非常重要,但是当前由于人类知识存在的庞杂性、多样性、开放性等特性,建造辅助人工智能建设的大规模全方位知识库依旧任重道远。NER旨在与在非结构化的问题本中抽取出结构化的信息(实体)。高效且准确地识别出文本中包含的实体信息,对于计算机处理文本数据具有重要意义.在自然语言处理研究领域,信息检索、知识图谱、问答系统等多项高层任务均需要命名实体识别任务作为其基础构件,为推动人工智能发展提供可靠的知识和技术基础。

命名实体(named entity,NE)作为一个明确的概念和研究对象,是在 1995年11月的第六届 MUC会议( MUC-6 ,the Sixth Message Understanding Conferences)上被提出的。MUC-6和后来的 MUC-7 并未对什么是命名实体进行深入的讨论和定义, 只是说明了需要标注的实体是“实体的唯一标识符(unique identifiers of entities)”,规定了NER评测需要识别的三大类(命名实体、时间表达式、数量 表达式)、七小类实体,其中命名实体分为:人名、 机构名和地名。 MUC 之后的 ACE 将命名实体中的机构名和地名进行了细分,增加了地理-政治实体和设施两种实体,之后又增加了交通工具和武器。 CoNLL-2002、CoNLL-2003 会议上将命名实体定义为包含名称的短语,包括人名、地名、机构名、时间和数量,基本沿用了MUC的定义和分类,但实际的任务主要是识别人名、地名、机构名和其他命名实体。SIGHAN Bakeoff-2006、Bakeoff-2007 评测也大多采用了这种分类。

President [PER Xi Jinping] extended sincere greetings to the country’s workers of all ethnic groups on [DATE Thursday], encouraging them to contribute more to combating [PRO COVID-19] as well as promoting economic and social development through their hard work.
来源于 ChainDaily

文本中的实体包含了丰富的语义,是至关重要的语义单元,从原始文本中识别有意义的实体或实体指代项在自然语言理解中起着至关重要的作用。在上面的例子中,通过NER可以识别出”Xi Jingping”是一个人名,”Thursday”是日期,COVID-19是一个专有名词。

在早期,NER主要通过词典和规则的形式,逐渐发展到机器学习的方式。近年来,基于神经网络的NER方法被相继提出,[主要思路为先使用卷积神经网络(Convolutional Neural Network,CNN)、循环神经网络(Recurrent Neural Network,RNN)、长短时神经网络(Long short-term memory, LSTM)等网络结构提取序列隐含特征,然后利用条件随机场求解最优序列(Conditional Random Field,CRF)。](Neural Architectures for Named Entity Recognition)。Chiu 和 Nichols提出了一种双向LSTM-CNNs架构,该架构可自动检测单词和字符级别的特征。Ma和Hovy进一步将其扩展到 BiLSTM-CNNs-CRF 体系结构,其中添加了 CRF 模块以优化输出标签序列。Liu 等提出了一种称为 LM-LSTM-CRF 的任务感知型神经语言模型,将字符感知型神经语言模型合并到一个多任务框架下,以提取字符级向量化表示。这些端到端模型具备从数据中自动学习的功能,可以很好地识别新实体。

Bi-LSTM-CRF

在2018年,Google提出了BERT模型,在NLP的各个领域都达到了非常卓越的效果(state-of-art)。但BERT模型对于数据量要求较高,在前期数据量匮乏的情况下并无法得到很理想的效果,所以在前期可以使用统计学习或者深度学习的方法,如Hidden Markov Model(HMM),或Conditional Random Field(CRF)等。在BERT的基础上,可以搭建BERT-BiLSTM-CRF、BERT-BiLSTM-Attention-CRF等网络模型结构,根据需求和算力进行选择。对于BERT-BiLSTM-Attention-CRF模型来说,主要由四部分构成,分别是BERT预训练语言模型、BiLSTM 层、Attention 层以及CRF层。 模型首先利用BERT预训练语言模型对单个字符进行编码,得到单个字符对应的词向量;接着利用BiLSTM层对输入文本进行双向编码,在解码前使用注意力机制增加上下文相关的语义信息;最后将包含上下文信息的语义向量输入CRF层进行解码,CRF层可以输出概率最大的标签序列,从而得到每个字符的类别。目前有很多非常优秀的机器学习框架可以快速应用上述模型,比如PyTorch、Transformer或SimpleTransformer等。

bert

NER的数据集使用IOB(Inside, Outside, Beginning)的标注模式,BIO 三段标记法:对于每个实体,将其第一个字标记为“B-(实体类型)”,后续的标记为“I-(实体类型)”,对于无关字,一律标记为O。 相比BIOES五段标记法,BIO三段标记法最大的优点是支持逐字标记,BIOES 法需要将单字标为“S(Single)”,而这需要先对数据进行分词处理,容易将分词产生的误差向下传播,影响模型最终效果。

Relationship Extraction

20世纪80年代末以来, 美国国防高级研究计划局 (Defense Advanced Research Projects Agency, DARPA) 主持召开了消息理解会议 (Message Understanding Conference, MUC), 通过测评驱动的会议模式推动了信息抽取研究的蓬勃发展。MUC会议一共举办了7届, 定义了包括命名实体识别 (Named Entity Recognition, NER) 、模板关系 (Template Relation, TR) 、情节模板 (Scenario Template, ST) 等文本挖掘任务。其中关系抽取任务在1998年MUC-7会议上被引入, 目的是通过填充关系模板槽的形式抽取出实体之间存在的Location_of、Employee_of和Product_of三大类关系。MUC系列测评会议对于关系抽取的研究起到了巨大的推动作用。

自从MUC会议于1998年停办后, 美国国家标准与技术研究院 (National Institute of Standards and Technology, NIST) 组织开展了自动内容抽取 (Automatic Content Extraction, ACE) 测评会议。ACE会议旨在研究自动抽取出新闻语料中的实体、关系以及事件等内容。关系抽取属于ACE会议定义的关系检测与识别 (Relation Detection and Recognition, RDR) 任务。ACE会议提供了关系抽取的测评语料, 也构建了详细的实体关系类型, 将关系抽取任务进一步细化。

ACE会议于2009年并入美国国家标准与技术研究院组织的国际文本分析会议 (Text Analysis Conference, TAC) 后, 关系抽取并入知识库构建 (Knowledge Base Population, KBP) 领域的槽填充 (Slot-Filling) 任务。TAC KBP会议推动了面向知识库构建过程的关系抽取研究, 很多研究者开始利用大规模的开源知识库, 采取基于Distant Supervision的方法研究关系抽取。

随着互联网的发展, 出现了海量异构而且含有噪声的数据, 传统测评会议定义的面向特定领域和特定关系的关系抽取任务已经不再适应新的需求。为了解决互联网海量数据的文本挖掘和分析任务, 很多学者开始研究开放式信息抽取 (Open Information Extraction, Open IE) 技术。开放式实体关系抽取作为其中的重要子任务和关键技术, 受到了研究者的广泛关注。

关系抽取技术发展呈现出两个阶段:

(1) 机器学习理论的引入, 促使关系抽取由基于语法规则向有监督机器学习方法转变。ACE等会议提供了标准的关系体系、训练语料和测试样例, 促进了有监督机器学习理论在关系抽取中的应用。研究者们普遍将关系抽取视为分类问题, 研究重点是语形层面的特征工程。大量研究表明了支持向量机、条件随机场等模型在关系抽取研究中的有效性, 同时也发掘了一批适合关系抽取任务的词汇和句法的语形特征。

(2) 研究领域向互联网开放领域的拓展, 促进了基于半监督和无监督关系抽取技术的发展。知识库构建是关系抽取的重要应用场景, 维基百科、YAGO和Freebase等背景知识库所蕴含的广大事实型信息缓解了标注语料不足的问题, 因此基于Distant Supervision的抽取方法取得了一定效果。但是互联网开放语料的规模更大、包含的关系类型更复杂, 直接面向开放语料进行抽取具有更大的实际意义。由于开放语料中绝大部分未经人工标注, 因此以半监督和无监督方法为主的开放式关系抽取逐渐成为研究重点。除了利用语形特征之外, 开放式关系抽取研究还引入语义特征, 从而提升了关系抽取在大规模语料上的适用性。

在通过命名实体识别,抽取出非结构化数据的实体时,需要通过关系抽取技术来识别实体之间的关系。关系抽取和命名实体识别一样,都是属于信息抽取(Information Extraction)中非常重要的技术,是命名实体识别的下一个步骤。实体是信息中最基本的组成单位,比如人、组织这些实体。每一句话的这些实体经常被一些定义好的关系连接起来,比如人和组织通过“雇佣”关系连接。但在实际情况中,关系不只是连接两个实体,更是连接多个实体。关系抽取旨在于自动化的发现非结构化文本中的关系。

关系抽取在技术实现上分为五类,分别是有监督学习、半监督学习、非监督学习、开放式信息抽取和远程监督学习。在早期,使用监督学习的方式来完成知识抽取的任务,监督学习主要分为两个方法,分别是Feature-based方法和Kernel-based方法,但由于监督学习的方法对于需要大量的正向和方向两类数据集进行训练,现存可用的数据集较少,构建高质量数据集价格相对昂贵,同时基于当时的NLP模型,对于下游的任务表现并不理想。随着深度学习不断发展,逐渐就提出了半/非监督学习的方式。

词嵌入和位置嵌入可以比较好的解决监督训练所存在的问题。词嵌入旨在抽取词的语义信息,使用非监督学习的方式学习了大量未标记的文本。词嵌入使用了一个嵌入矩阵来实现,\(E \in \mathbb{R}^{|V|\times d_w}\)。其中,\(d_w\)是嵌入空间的维度,\(|V|\)是词汇表的体积。

位置嵌入技术认为:对于关系来说,离目标实体更近的单词通常具有更有用的信息,所以位置嵌入编码一句话中每一个词离实体的相对位置,这能够让网络知道每一个词离每一个实体有多远。所有的句子\(x\)可以被表示为一个向量序列 \(x = {w_1,w_2,\dots,w_m}\),对于每一个词\(w_i \in \mathbb{R}^d\),其中\(d = d_w + 2 \times d_p\)。在上述基础上,深度学习模型通常使用卷积神经网络(CNN)来捕获连词(n-gram)层特征,用于关系抽取。同样,BERT模型对于关系抽取任务也有非常优秀的表现,但BERT模型对于数据量要求较大,在业务前期无法满足的前提下,可以使用CNN、RNN等深度学习模型。

RNN

Knowledge Graph Inference

Introduction

在面向知识图谱的知识推理中,较传统的方法,例如基于规则的推理和基于逻辑的推理方法等,其最大优势在于准确率高,但是,该优势的前提条件是能够获取全面的规则与本体约束,而这一条件在现实中很难实现。此外,由于在推理过程中需要额外对规则和本体进行实例化处理,对数据量逐年增长的大规模知识图谱来 说计算复杂度过高。相反,神经网络方法具备更高的学习能力、推理能力和泛化能力,不仅能够学习海量的文本语料,缓解大规模知识图谱带来的数据爆炸问题,并 且可以直接建模知识图谱事实元组,降低了计算难度,甚至还能通过合理设计和使用辅助存储单元,在一定程度上模拟人脑推理和思考问题的过程。

在上述过程构建知识图谱时,由于信息抽取的局限性,导致知识图谱中大量实体的之间的隐含关系并未被挖掘出来,并且存在一定量的错误。为了解决上述两个问题,知识图谱推理(Knowledge Graph Inference, KGI)技术应运而生,其中知识图谱补全(Knowledge Graph Completion, KGC)为了挖掘知识图谱之间隐含的关系,知识图谱噪声监测(Knowledge Graph Noise Detection, KGND)是为了发现图谱中存在的错误,或是判断两个实体是否指向同一对象,以便达到知识图谱降噪或知识融合的效果。知识图谱中基本组成元素三元组虽然在结构化存储具有非常优秀的表现,但由于其符号特性导致KG难以对其进行操作,知识图谱嵌入(Knowledge Graph Embedding,KGE)技术解决了该问题,所以KGE也是KI的基础。

由于当前国内外诸多研究者知识图谱相关概念的定义不同,所以在此辨析一下这几个概念:KGI的其中一个子任务是KGC,KGC是任务/目标,而KGE是实现KGI的基本技术。

[更具体地,Kompridis 将推理定义 为多种能力的集合,包括有意识地理解事物的能力,建立和验证事实的能力,运用逻辑的能力以及基于知识改 变或验证现有体系的能力。](Kompridis N.So we need something else for reason to mean[J].International Journal of Philosophical Studies,2000, 8(3):271-295.)

知识推理在实际中的应用也非常广泛,对于大规模的多关系数据来说,知识推理对于一系列的任务都有极大的提升可能,比如信息检索(Information Retrieval,RI),知识问答(Question Answering,QA)和逻辑数据挖掘(Bioligical Data Mining,BDM)。KGE在下游(down stream)任务中,应用最广泛的就是连接预测(Link Predict,LP),通常指的是预测与给定实体有特定关系的实体的任务,即补全三元组中缺失的某一个元素。三元组分类(Triple Classfication,TC)也是下游任务应用场景之一,旨在于验证给定三元组的真假。在KG之外,KGE也可以实现关系抽取(Relationship Extraction,RE),问答和系统推荐。

KGI在形式上分为单步推理,即直接关系推理和多步推理,即间接关系推理。单步推理和多步推理根据方法的不同分为基于规则的推理、基于分布式表示的推理、基于神经网络的推理和混合推理。在早期的基于规则的推理中,分为基于传统规则的推理和基于本体规则的推理,传统基于规则的推理,由于当前知识图谱的规模较大,导致基于规则推理的代价较高,同时有效并且覆盖率广的规则难以获得。KGE技术的出现解决了三元组结构难以被KG直接操作的问题,在此技术上,基于分布式表示和基于语义的神经网络的KGI发展迅速。

基于分布式表示的KGI分为基于翻译、基于张量/矩阵分解等。基于分布式表示的推理首先通过表示模型学习知识图谱中的事实元组,得到知识图谱的低维向量表示;然后,将推理预测转化为基于表示模型的简单向量操作。其中,基于翻译模型的KGI因为其参数复杂度低、发展相对成熟,在近年来得到了广泛的认可,具有代表性的模型有TransE、TransH、TransR等。基于张量/矩阵分解的表示推理将(头实体,关系,尾实体)三元组看成张量/矩阵中的元素构建张量/矩阵,通过张量/矩阵分解方法进行表示学习,RESCAL模型是其代表。

基于语义的推理建立在挖掘和利用语义信息的基础上,例如实体和关系的名称、描述以及上下文信息等。由于文本中蕴含的潜在语义信息非常丰富,信息之间存在着深刻的语义关联,因此,文本和语义信息自然而然地成为知识推理领域的主要推理依据。

基于神经网络的知识推理其主要思路是利用神经网络的学习能力和泛化能力来建模知识图谱的事实元组,其中,针对三元组建模并预测三元组元素一般属于单步推理,多步推理则是对多元组构成的连续路径进行建模,对路径首尾实体及其之间的隐含关系等信息进行预测。基于神经网络的推理利用神经网络直接建模知识图谱三元组,得到三元组元素的向量表示,用于进一步的推理。该类方法依然是一种基于得分函数的方法,区别于其他方法,整个网络构成一个得分函数,神经网络的输出即为得分值。神经张量网络(Neural Tensor Network,NTN)用双线性张量层代替传统的神经网络层,在不同的维度下,将头实体和尾实体联系起来,刻画实体间复杂的语义联系。共享变量神经网络模型(Projection Embedding,ProjE)通过简单的组合操作组合三元组的已知部分(头实体与关系或尾实体与关系)建立目标向量空间,并映射未知部分(尾实体或头实体)的候选集到相同的空间,用基于候选的排序损失学习模型。多层卷积神经网络(Convolutional Embedding,ConvE)将实体和关系进行重塑和卷积,生成特征图。再将特征图张量矢量化并投影到一个K维空间中,然后在与所有候选项进行比对。MT-KGNN 模型首次提出利用神经网络建模知识图谱中的属性信息;ConMask 模型定义了“开放 世界知识图谱补全”,能够将知识库外部新的实体链接 到知识图谱中;HNM 模型应用于智能问答领域,与传统问答系统基于管道的方法不同,结合了字符及字词级的语义信息,避免了管道方法的错误传播问题。

KI-w1391

ProjE

随着知识库存储量的不断增大,知识推理模型特征 空间日益复杂,参数规模也随之不断增长。 Shi 等人通过简化底层模型体系结构,提出一种效果更好而参数规模更小的投影嵌入模型(Embedding Projection,ProjE),其主要方法是将实体预测视为多候选项排名问题,取其 中排名得分最高的候选项为实体预测结果。

ProjE模型认为在初步阶段不同维度的相互作用是不重要的,所以该模型限制其矩阵是固有稀疏的对角矩阵,因此结合操作符被定义为

$$e \bigoplus r = D_ee + D_rr + b_c$$,

其中,\(D_e\)和\(D_r\)是\(k \times k\)的对角矩阵,这两个对角矩阵分别作为全局实体和关系的权重,\(b_c \in R^k\)是结合坐标系。由此结合操作符,该模型定义嵌入映射函数为

$$h(e,r) = g(W^c f(e \bigoplus r)+b_p )$$,

其中,\(f\)和\(g\)是激活函数,\(W^c \in R^{s \times k}\) 是候选实体矩阵,\(b_p\)是映射坐标系,\(s\)是候选实体的数量。\(h(e,r)\)表示排名得分向量,其中每个元素表示为输入嵌入的结合\(e \bigoplus r\)和候选向量\(W^c\)的相似度。ProjE的神经网络架构由一个结合层和一个映射层组成。

ProjE

在图中,给出一个尾实体”lllinois”和一个关系”CityOf”,计算每一个头实体的得分。蓝色和绿色的节点是行向量,分别是实体嵌入矩阵\(W^E\)和关系嵌入矩阵\(W^R\),橙色的对角矩阵,作为结合操作符,\(W^C\)包含数个候选实体。

总体来看,相对于其他使用转移矩阵的方法,ProjE 模型使用组合操作的方式显著减少了参数的数量。该模型设计最初主要针对实体预测任务,后期研究过程中发现通过改变输入,也可以使方法适应关系预测任务。

但是 ProjE模型关注于通过组合运算符处理实体和关系的嵌入向量,从而产生输出向量,这一流程对词向量预处理的效果存在很大的依赖性,此外,该模型未利用实体描述、属性、关系路径等重要语义信息,推理结果的可解释性略显牵强。

ConvE

ConvE模型主要关注链接预测问题,主要优点是参数的利用率高,擅长学习有复杂结构的KG。该模型认为,对于KG \(G = {(s,r,o)} \subseteq \varepsilon \times R \times \varepsilon \),其中两个实体\(s,o \in \varepsilon \),关系\(r \in R\),则链接预测问题可以被形式化为一个逐点学习的排序问题,其目标是学习一个评分函数 \(psi : \varepsilon \times R \times \varepsilon \mapsto \mathbb{R} \)即给定一个三元组\(x=(s,r,o)\),其得分\(\psi(x) \in \mathbb{R} \)与\(x\)编码的三元组为真的可能性成正比。ConvE模型通过一个卷积和全连接层来对输入的实体和关系进行计算,该模型最主要的特征是分数是由二维变形嵌入后的卷积决定的。评分函数如下所示:

$$\psi_r(e_s,e_o) = f(vec(f([\bar{e_s};\bar{r_r}] * w))W)e_0$$

在打分函数中,\(r_r \in \mathbb{R}^k \)是关系参数,\( \bar{e_s} \)和\(\bar{r_r}\)是\(e_s\)和\(r_r\)的2D变形。如果\(e_s,r_s \in \mathbb{R}^k \),并且 \(k = k_wk_h\)时,\( \bar{e_s},\bar{e_r} \in \mathbb{R}^{k_w \times k_h} \)。

ConvE的损失函数如下:

$$ \mathscr{L}(p,t) = -\frac{1}{N} \sum(t_i \cdotp log(p_i) + (1-t_i) \cdotp log(1-p_i)) $$

其中,在 1-1 评分时,r是\(\mathbb{R}^{1x1}\)维标记向量,在1-N评分时,r是\(\mathbb{R}^{1xN}\)维标记向量。

ConvE

这是 ConvE 的整体结构,把输入的实体关系二元组的 embedding reshape 成一个矩阵,并将其看成是一个 image 用卷积核提取特征,这个模型最耗时的部分就是卷积计算部分,为了加快 feed-forward 速度,作者在最后把二元组的特征与 KG 中所有实体的 embedding 进行点积,同时计算 N 个三元组的 score(即1-N scoring),这样可以极大地减少计算时间。

由上可知,基于神经网络的KGI方法在参数规模上要远大于基于翻译模型,对于数据量和算力的要求较高,但对于大规模的KB拥有比较好的效果。所以KGI系统在KG中应该是根据当前KB规模不断进行调整的,应与整体耦合度低,以便于针对当前的情况做出调整。同时,OpenKE框架能够很容易的在实际业务中使用翻译模型,ProjE和ConvE模型分别基于TensorFlow和PyTorch框架实现,在KG数据格式合适的情况下,同样具有良好的易用性。

Application

知识图谱补全和去噪是知识推理的两大基础应用.现有的知识图谱由于数据来源的不全面以及知 识获取的遗漏,不可能构建完备的知识图谱.通常,代表性的知识图谱中有 69%~99%的实体缺少至少一个属性信息三元组.例如,在 Freebase 中,93.8%的人没有出生地信息,78.5%的人没有国籍信息.解决办法之一就是通过知识推理方法,利用知识图谱中已有的知识去推理出新的事实(即隐含的知识),从而尽可能地对知识图谱进行补全.另一方面,就知识图谱自身而言,由于数据来源的噪声以及抽取过程的不准确,内部也存在噪声知 识和知识矛盾现象.例如在 NELL 中,采集到的知识正确率随着时间推移不断下降,第 1 个月后,正确率达到 0.9;第 2 个月后,正确率降为0.71.主要原因是知识导出的抽取模版不可靠,导致抽取错误的知识,错误的知识用于产生更多不可靠的模版,如此循环.NELL 也周期地使用人工监督移除不正确的事实元组,然而人工标注代价很高.这就需要通过知识推理方法,自动且高效地完成这一过程.

除了知识图谱补全与去噪,知识推理在垂直搜索、智能问答、机器翻译等领域也发挥了重要作用,在疾病诊断、金融反欺诈、数据异常分析等诸多不同的领域已展示出良好的应用前景.

在垂直搜索领域,在国外,Google 公司提出了 Knowledge Graph 与 Knowledge Vault,Facebook 推出了 Graph Search,微软推出了 Bing Satori;在国内,搜狗提出了知立方,百度推出了中文知识图谱搜索.知识推理能够更好地理解用户的搜索意图,提供接近“专、精、深”的垂直搜索,回答复杂的推理问题.例如 Google 的搜索,在 Google 搜索引擎输入查询,搜索引擎在利用知识图谱直接给出推理得到的精确回答的同时,在搜索结果的右侧显示该词条的深层信息.百度的搜索在知识图谱的支持下,也能更好地理解用户的搜索意图,类似地返回推理的精确答案,附带信息来源.

在智能问答领域,IBM 的 Watson、Google 的 Google Now、苹果公司的 Siri、亚马逊的 Alexa、微软的小 娜和小冰以及百度的度秘等是近期代表性的智能问答系统.这些系统基于知识图谱的知识推理,提供精确、简 洁的答案.例如,IBM 研发的超级计算机 Watson,2011 年,Watson 在美国知识竞赛节目“危险边缘 Jeopardy!”中上 演人机问答大战,战胜了人类冠军选手 Ken 和 Brad.节目中的问题覆盖面广,参赛者需具备各个领域的知识,能 够解析和推理隐晦含义、反讽与谜语等.这其中,面向知识图谱的知识推理发挥了重要作用.

System Structure and Analysis

System Overview

SystemOverview

该系统的架构如图所示,首先通过多渠道的获取非结构化文本数据,主要通过三个途径:1. 通过爬虫对某一专业领域的网页进行爬取,获取到相关文本数据。2. 提取书籍中的文本。数字化程度较高的书籍中的文本较容易获取,对于数字化程度低、格式混乱而导致的解析不佳的书籍通过OCR技术对其中的文本进行提取。3. 论文或期刊。此类文本的数字化程度较高,可以直接获取到其中的文本。在获取到非结构化文本数据后,使用nltk等nlp工具对其进行分句,将大段的文本拆开,以便于后续的数据标注和识别。

在标注平台中,需要根据情况确定实体类型和关系类型,然后对于数据进行人工标注。在标注过程中,尽可能提高标注数据的覆盖率,对每个范畴的一定量数据进行标注,使用标注后的数据对NER和RE模型进行训练,使NER和RE引擎能够正常工作。随后,可以使用引擎对非结构化数据进行识别,抽取知识,构建三元组,填充到知识图谱之中。

随着知识图谱的不断扩充,使用KGI引擎对实体之间隐含的关系,或指向不明的实体进行Link Predict任务,对知识图谱进行补全,同时KGI引擎还可以尝试发现图谱中存在的错误,对其进行错误发现,在后期还可以使用该引擎对KG进行噪声处理,以便更好的支持下游任务。在上述基础上,可以基于KG构建下游的应用,比如信息检索、知识问答和聊天机器人等,目前KG的应用场景在医疗、金融反欺诈等的领域较多,但KG的潜力非常大,可以对当前更多的场景提供更好的支撑。

System Detail

SystemDetail

在上上图的架构下,可以细化为上图结构,在此设计中,对不同功能的服务分块独立运行,以保证系统的稳定性。对于NER/RE/KI服务的具体结构如下图所示:

bert_online

当拥有了命名实体识别、关系抽取和知识推理的基本能力后,可以提供不间断的线上服务,增强该系统的线上能力,以此来更高效的构建知识图谱。对于任意的输入源,均可以提供预测服务,预测文本中的实体和实体类型或实体之间的关系,并且对于可信的输入源,可以将非结构化文本中的知识抽取出来,构建三元组,以补充知识图谱。在一定程度上开放KGI的链接预测能力,用来验证KGI引擎的效果。

如图结构所示,对于客户端与系统使用HTTP进行通信,所有流量转发到一个代理服务器上,代理服务器使用socket与模型客户端进行通信。模型客户端的作用是给模型服务器下发任务,同时对于模型服务器返回的数据进行转发,模型客户端的功能比较固定,升级频率低。同样,模型客户端和模型服务器也是用socket进行通信,模型服务器通过线程通信的方式将任务下发给worker,worker调用模型,做出相应的响应(命名实体识别、分类、关系抽取、链接预测)。模型服务器将请求和响应的数据记录在数据库中,对于可信来源的数据,将用来构建知识图谱。同时,数据库中的数据可以给标注提供丰富的语料,在进行标注后对原有模型进行训练,使模型各方面的能力得到增强,增强后的模型可以对原有模型进行替换,以达到更好的效果。

System Analysis

随着计算机的算力不断提升和云计算的普及,计算和存储成本逐渐降低,算力不再成为遏制系统发展的关键因素。但新问题又随之而来,那就是安全性问题。KG系统主要为下游服务做支撑,一旦该系统安全性出现问题则会波及下游业务,造成不可预估的损失。例如,在KGE的链接任务,假设正确的三元组为(h,r,t),当前任务为(h,?,t)或(h,r,?)。对KGE模型进行攻击会导致此类问题得到非预期的结果,如(h,p,t)或(h,r,p),从而完全改变下游服务的结果。所以为了保证模型安全,线上业务的数据安全也是至关重要的,避免训练数据被投毒,从而导致模型不再安全。

在本设计中,使用了大量的开源组件,故开源组件的安全性直接关系到整个系统的安全性。存储KG的图数据库,使用的是Neo4j数据库,目前针对图数据库底层安全性的研究还处于初步阶段,但在实际使用中,GraphQL也存在类似SQL注入的问题,即在代码中接收外部参数未进行预处理直接进行拼接。Neo4j数据库同时提供了Web管理的界面,通过管理界面对命令进行解析,对图数据进行操作和显示,功能较丰富。但此类提供外界访问的Web系统安全性不容忽视,一旦被入侵,就成为入侵整个系统的跳板。本设计同样使用了大量机器学习开源代码,通过阅读代码发现,相比于传统开发人员,机器学习开发人员安全意识薄弱,代码规范较差,不安全的类型转换、代码/命令拼接等危险操作比比皆是。机器学习模型是整个系统的核心,模型安全直接影响整个系统的根本安全,所以所有与机器学习模型相关的服务均在一个单独的服务器中,通过云上vpc只允许数台服务器与其通信,外部不可访问。

对于上述情况,解决方法如下:1. 敏感的组件应做好网络隔离,坚决不允许外网访问。2. 应做好开源组件的更新与升级,由于开源组件每次更新代码都是公开的,所以一旦修补安全性问题,可以快速被黑客感知,从而利用该漏洞对未升级的系统进行攻击。3. 提高开发人员的安全意识,使用DevOps规范开发流程,在系统架构初期需要安全相关人员介入。只有保证了线上服务器的安全,才能保证机器学习模型和数据的安全。

Conclusion

本文提出了一个知识图谱系统和知识图谱推理系统的设计,在该设计中,各个模块相互独立,能够随着知识图谱的不断扩大而进行升级。同时,在知识图谱构建的不同阶段,对机器学习的模型应该有不一样的选择,以便能够节省人力和算力。知识图谱在不断扩建和学习中也应该得到不断的修正和增强,为了达到这个效果,本设计使用了基于神经网络的知识图谱推理引擎,为了能够达到知识图谱不间断自学习的效果。未来的工作方向:

  1. 打通知识图谱系统中的数据孤岛和数据流,进一步加大自动化的程度。
  2. 对于知识图谱的底层结构以及NER/RE/KGI模型进行进行更深入学习和研究,使其能够在模型层面上优化,发挥更大的作用。
  3. 针对组件的安全问题进行排查并且对开发流程进行进一步的规范,同时对机器学习模型安全方向做一定的研究和储备,以保证系统信息安全、数据安全。

Reference

  1. ZHANG Zhongwei, CAO Lei, CHEN Xiliang, et al. Survey of knowledge reasoning based on neural network. Computer Engineering and Applications, 2019, 55(12):8-19.
  2. Guan SP, Jin XL, Jia YT, Wang YZ, Cheng XQ. Knowledge reasoning over knowledge graph: A survey. Ruan Jian Xue Bao/Journal of Software, 2018,29(10):2966-2994
  3. Eberts, Markus and Adrian Ulges. “Span-based Joint Entity and Relation Extraction with Transformer Pre-training.” ArXiv abs/1909.07755 (2019)
  4. Sorokin, Daniil & Gurevych, Iryna. (2017). Context-Aware Representations for Knowledge Base Relation Extraction. 1784-1789. 10.18653/v1/D17-1188.
  5. Bach, N., & Badaskar, S. (2007). A Review of Relation Extraction.
  6. Han, Xu & Cao, Shulin & Lyu, Xin & Lin, Yankai & Liu, Zhiyuan & Sun, Maosong & Li, Juanzi. (2018). OpenKE: An Open Toolkit for Knowledge Embedding. 139-144.
  7. 朱木易洁,鲍秉坤,徐常胜.知识图谱发展与构建的研究进展[J].南京信息工程大学学报(自然科学版),2017,9(06):575-582.
  8. Yankai Lin, Zhiyuan Liu, Maosong Sun, Yang Liu, and Xuan Zhu. 2015. Learning entity and relation embeddings for knowledge graph completion. AAAI Press, 2181–2187.
  9. Antoine Bordes, Nicolas Usunier, Alberto Garcia-Durán, Jason Weston, and Oksana Yakhnenko. 2013. Translating embeddings for modeling multi-relational data. In Proceedings of the 26th International Conference on Neural Information Processing Systems - Volume 2 (NIPS’13). Curran Associates Inc., Red Hook, NY, USA, 2787–2795.
  10. Fan, M., Zhou, Q., Chang, E., & Zheng, T.F. (2014). Transition-based Knowledge Graph Embedding with Relational Mapping Properties. PACLIC.
  11. Toutanova, K., & Chen, D. (2015). Observed versus latent features for knowledge base and text inference.
  12. Yang, B., Yih, W., He, X., Gao, J., & Deng, L. (2015). Embedding Entities and Relations for Learning and Inference in Knowledge Bases. CoRR, abs/1412.6575.
  13. Zhen Wang, Jianwen Zhang, Jianlin Feng, and Zheng Chen. 2014. Knowledge graph embedding by translating on hyperplanes. In Proceedings of the Twenty-Eighth AAAI Conference on Artificial Intelligence (AAAI’14). AAAI Press, 1112–1119.
  14. 王昊奋,丁军,胡芳槐,王鑫. 大规模企业级知识图谱实践综述[J]. 计算机工程.
  15. Mai, Gengchen & Janowicz, Krzysztof & Yan, Bo. (2018). Combining Text Embedding and Knowledge Graph Embedding Techniques for Academic Search Engines.
  16. Chah, N. (2017). Freebase-triples: A Methodology for Processing the Freebase Data Dumps. ArXiv, abs/1712.08707.
  17. Quan Wang, Bin Wang, and Li Guo. 2015. Knowledge base completion using embeddings and rules. In Proceedings of the 24th International Conference on Artificial Intelligence (IJCAI’15). AAAI Press, 1859–1865.
  18. Ehrlinger, Lisa & Wöß, Wolfram. (2016). Towards a Definition of Knowledge Graphs.
  19. Erik F. Tjong Kim Sang and Fien De Meulder. 2003. Introduction to the CoNLL-2003 shared task: language-independent named entity recognition. In Proceedings of the seventh conference on Natural language learning at HLT-NAACL 2003 - Volume 4 (CONLL ’03). Association for Computational Linguistics, USA, 142–147. DOI:https://doi.org/10.3115/1119176.1119195
  20. Nadeau, D. & Sekine, S. (2007), ‘A survey of named entity recognition and classification’, Linguisticae Investigationes 30 (1), 3–26.
  21. Lample, Guillaume & Ballesteros, Miguel & Subramanian, Sandeep & Kawakami, Kazuya & Dyer, Chris. (2016). Neural Architectures for Named Entity Recognition. 260-270. 10.18653/v1/N16-1030.
  22. Lev Ratinov and Dan Roth. 2009. Design challenges and misconceptions in named entity recognition. In Proceedings of the Thirteenth Conference on Computational Natural Language Learning (CoNLL ’09). Association for Computational Linguistics, USA, 147–155.
  23. Jiafeng Guo, Gu Xu, Xueqi Cheng, and Hang Li. 2009. Named entity recognition in query. In Proceedings of the 32nd international ACM SIGIR conference on Research and development in information retrieval (SIGIR ’09). Association for Computing Machinery, New York, NY, USA, 267–274. DOI:https://doi.org/10.1145/1571941.1571989
  24. Devlin, J., Chang, M., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. ArXiv, abs/1810.04805.
  25. Kumar, S. (2017). A Survey of Deep Learning Methods for Relation Extraction. ArXiv, abs/1705.03645.
  26. Shi, Baoxu & Weninger, Tim. (2017). Open-World Knowledge Graph Completion.
  27. Shi, Baoxu & Weninger, Tim. (2016). ProjE: Embedding Projection for Knowledge Graph Completion.
  28. Dettmers, T., Minervini, P., Stenetorp, P., & Riedel, S. (2018). Convolutional 2D Knowledge Graph Embeddings. AAAI.
  29. Zhang, Hengtong & Zheng, Tianhang & Gao, Jing & Miao, Chenglin & Su, Lu & Li, Yaliang & Ren, Kaili. (2019). Data Poisoning Attack against Knowledge Graph Embedding. 4853-4859. 10.24963/ijcai.2019/674.
  30. Cai L, Wang ST, Liu JH, Zhu YY. Survey of data annotation. Ruan Jian Xue Bao/ Journal of Software, 2020, 31(2):302−320 (in Chinese). http://www.jos.org.cn/1000-9825/5977.htm
⬆︎TOP