一种挖掘文本中实体间关系的方案设计
2021-04-09中国煤炭科工集团
中国煤炭科工集团 于 澄
企业在多年的运营过程中会留存大量的电子文档,这些文档多以非结构化形式存储在文件服务器,里面蕴含了大量的有价值信息。如何能够把可利用的信息从这些文档中挖掘出来并加以利用,是一个有价值的课题。本文论述了基于自然语言处理、弱监督学习等人工智能技术,设计一种可行的提取文本内实体关系信息的软件方案。
1 文本中实体关系识别的应用场景及主要内容
随着信息化、数字化技术的发展与应用,大部分企业基本实现了纸质文件向电子化文档的过渡。在企业中,大量电子文档作为企业运营的历史留存,形成了企业的知识库、经验库。而电子文档在企业中通常是以非结构化的电子文件形式存放在文件服务器或数据库中。企业管理者可以通过文本检索工具,设定搜索关键字,获取所需的相关信息。然而,使用检索工具的前提是,检索者须事先知晓所要检索的对象的称谓信息,如要检索“某某公司”相关的内容,则需要知道“某某公司”的全称作为关键字信息进行检索。但是面对海量的文档内容,检索者如何能够尽可能多的提取其中有价值的信息,包括已知检索对象和未知检索对象的信息,并把这些信息进行结构化的存储,以便后续更好的利用其价值,就成为了一个值得探究的课题。进一步讲,在商业领域应用较多的场景是,在海量文档库中识别出公司、机构等实体单位名称,并根据语境提取实体之间可能存在的关系,如股权关系、债券关系、客户关系等。
2 方案设计中应用的主要技术
随着计算机算法的发展,尤其是人工智能技术的逐步成熟,使得以往需要大量的时间成本和人工成本才能处理的文档信息提取工作,可以应用计算机软件辅助处理。本设计应用自然语言处理算法和监督学习算法以及其他较为成熟的软件工具组合,意图构建一个软件实现方案,一是能够替代人工操作,从文本中提取公司、组织机构名称等实体名称;二是通过软件算法,对一个句子中出现两个或两个以上实体的情况,根据上下文语境判断实体之间是否存在某种特定关系;三是将识别出的实体以及实体之间的关系,以结构化数据的方式存储在数据库中。这种用结构化的方式存储对象以及对象之间关系的方法,本质上就是在构建企业的知识图谱,是将来进一步挖掘信息价值的重要基础。
本方案的实现涉及到几个关键的技术。首先是需要在文本中对词语进行识别和提取,并对词语的性质进行识别和标注。例如“公司”一词需要被识别出来,并标注成名词词性,再如“收购”一词,需要被识别出来并标注成动词词性。其次,在识别出的名词基础上,要能够识别出名词组合,并判断出该名词组合是否是一个公司的名称。例如,“上海某某某新材料股份有限公司”,“北京某某科技集团有限公司”等。这个课题属于自然语言处理范畴,在行业内有多种NLP方案可以选择,如国外的有斯坦福大学的NLP,国内的有HanLP,清华、北大、复旦等大学研发的NLP等。这些NLP在分词、词性标注等方面总体来讲准确率和召回率不相上下,在对中文文本的处理上,各有优缺点,可以根据实际处理的文本的特点,经过实验对比后进行选型,本方案选用HanLP,可以达到良好的准确率与召回率,并提供友好的接口方便调用。
NLP可以解决分词和词性标注的问题,通常也自带组织机构名称的识别和标注功能,但是对于公司、机构名称识别的准确率和召回率普遍偏低,无法达到使用要求,因此需要另行设计方案,对公司、机构名称的进行识别。本方案采用规则表达式引擎和在线匹配技术,提高实体名称识别的准确率。前述提到,NLP的处理结果是把一个句子拆分成词的集合,并给每个词标注了词性。此外,公司、机构的名称,通常是以“公司”、“有限公司”、“集团公司”、“大学”、“研究院”等可以枚举的有限后缀作为结尾。因此,可以采用规则表达式技术对实体名称进行初步识别,例如,N(名词)+集团公司,也即截取“集团公司”向前直到第一个非名词为一个实体名称,再如,北京+N(名词)+研究院,则表示“北京”为前缀,“研究院”为后缀,中间部分是名词的字符串,为一个实体名称。如果此处规则条件限定的较为严格,则准确率较高,召回率会偏低。如果条件限定的较为宽松,则准确率较低,召回率提升。本方案中,采取较为宽松的规则设定提高召回率,用在线匹配的方式进一步识别、提取实体的完整名称。经过规则表达式技术处理后,产生出的候选实体名称,通常是不完整的,或者由于规则条件设定的较为宽松实际上并不是实体名称。如“某某某某科技集团有限公司”可能仅仅提取了“某某科技集团有限公司”。因此,本方案进一步引入在线匹配技术来提高完整提取实体名称的准确率。具体方法是,用候选实体名称通过在线接口,提交给在线企业查询平台或搜索引擎进行查询,在返回的结果页面中,如发现与候选实体名称相匹配的字符串,则继续匹配候选实体名称与该字符串前面的字符,直到字符不一致为止,则该字符串与前面若干相同的字符组合在一起就作为该实体的完整名称。如无法在页面中找到候选实体名称相同的字符串,则判定该候选实体名称不是公司、机构名称。通过上述方法,可以基本识别出文本中出现的公司、机构等实体名称,作为构建知识图谱的基础。
方案中第三个需要解决的技术问题是在一个句子中识别两个实体之间是否存在某类特定关系。解决这个问题需要用到机器学习算法,有几种可行的方案可供选择。首先是有监督学习算法方案,有监督学习算法,主要是通过特征工程识别、提取出影响判别结果的因素,然后通过大量的样本训练该模型,使其能够建立影响因素与判别结果之间的映射关系,再把这种映射关系模型应用到实际案例中去。但在实体关系识别方案中,应用监督学习算法存在较大的障碍。一是监督学习需要大量人工标注的样本进行训练,在样本文档数量有限,人工成本预算有限,而项目时间不充裕的情况,模型训练取得的效果不佳。因此本方案不采用传统的有监督学习算法,而考虑采用在其基础上进化改良的方案,即远程监督学习或弱监督学习算法。远程监督学习,主要利用知识图谱中已有的知识,对于训练样本进行标注,然后用该样本集对模型进行训练。但应用远程监督学习也存在较大的限制条件和缺点,在不具备较为完善的知识图谱的条件下,无法应用远程监督学习。此外知识图谱中的已有知识也可能对样本数据不适用,甚至产生误导的情况。因此,在缺乏完善知识图谱的前提下,应采取与弱监督学习算法相结合的方案提高识别的准确率与召回率。弱监督学习是有监督学习的另一个改良变种算法,它主要适用于缺乏训练样本的场景。弱监督学习首先是通过一定的规则产生样本数据(包括样本及其标记结果),这个规则可以是像远程监督学习一样通过从现有的知识库中获取样本的标记结果,也可以是通过由程序(标注函数)实现的若干条检验规则进行判别并对结果进行标记。用这些标注函数标记过的样本数据训练一个生成模型,令该模型学习标注函数的输出。生成模型训练完成后,可以用来标注大量的样本数据,接下来用这些样本数据训练一个强大的判别模型。最终就可以使用训练好的判别模型在生产环境中对真实数据中的实体关系进行判断识别。本方案使用斯坦福大学发布的弱监督学习框架Snorkel,进行数据处理和模型训练。
3 方案的具体设计及实现步骤
首先如果有已存在的实体关系的知识库,要把知识库导入数据库做结构化处理形成三元组形式,为后续标注样本数据做准备,如(x,y,M),x、y即指某实体,M即指它们之间存在的某类特定关系。第二步,对样本文档进行预处理,预处理是把文档拆分成一个个完整的句子,并给句子进行编号后存入数据库中。接下来,针对每一个句子,用NLP工具对其进行分词和词性标注。NLP的处理结果是针对每个句子生成两个有序集合,一个是词的集合,一个是相对应的词性的集合。这里不推荐使用NLP自带的实体名称识别功能,通常识别准确率和召回率都偏低。第四步,基于分词和词性标注的基础上,应用前述技术方案中描述的规则表达式和在线匹配的方法,识别句子中的实体名称。这一步的输出是,针对每个句子产生一个实体对,存入数据库中,如果句子中存在多个不同实体,则应用笛卡尔积的方式产生多个实体对,并关联该句子。第五步,针对每个实体对,提取实体前后若干词语以及相关的词性标注作为判别实体关系的特征,并将这些特征词集合存入数据库中。第六步,编写标注函数,并给样本打标。标注函数可以有多个,每个标注函数实现一种判定规则。规则可以是领域专家的知识的体现,也可以是现有知识库里关于相关实体对的已存在标注。使用标注函数给样本打标后,产生一组带标记结果的样本数据。接下来,基于标记过的样本数据,使用Snorkel框架数据编程构建因子图模型,也即构建生成模型。应用生成模型,对足够数量的样本数据进行打标。最后一步,使用标记过的样本数据,训练判别模型。判别模型主要是应用神经网络模型,尤其针对实体关系识别的上下文相关的特点,使用BLSTM,即双向长短期记忆模型,效果更好。模型训练完成后,就可以应用到生产环境中对真实数据进行实体关系识别的工作。
结语:本方案是通过若干步骤的组合,逐步从文本中识别出实体以及实体之间的关系。每一步对于整个方案提高准确率和召回率都起着至关重要的作用。在实际应用过程中,应根据文档的特点,对方法、规则、模型进行相应调整,从而达到最优效果。