王良萸
(安徽工业大学计算机科学与技术学院,安徽 马鞍山 243032)
碳排放权交易(简称碳交易)是为促进全球温室气体减排,减少全球二氧化碳排放所采用的市场机制[1]。在全球气候变暖的背景下,建立完善的碳排放权交易机制对于温室气体减排的重要性已经得到世界各国的广泛认可[2]。随着我国碳交易市场的快速发展,遍布全国的各个碳交易试点积累了大量数据,其中包括具有确定形式和规则的半结构化数据和不包含特定格式的非结构化数据,它们多源异构,难以整合。因此,如何提供一个有效的数据管理方法,从碳交易领域的海量信息中提取有用的知识,成为亟待解决的难题。
近年来,知识图谱(Knowledge Graph)作为实现大规模信息语义集成与交互操作的新兴技术手段,引起了工业界和学术界的高度关注和研究热潮[3]。知识图谱将不同种类的信息连接在一起形成一个关系网络,以三元组的形式表示现实世界中的事实,并通过关联数据存储。与传统的信息集成方法相比,知识图谱能够从关系的角度分析问题,可以将知识直观地返回给用户,并具有语义推断能力。目前已被应用于医药、影视等领域。然而,基于知识图谱的信息集成技术和方法在碳交易领域还没有得到广泛的研究。本文提出一种碳交易领域知识图谱的构建方法,以碳交易领域的半结构化和非结构化数据为来源,从数据的抓取与预处理、命名实体识别、实体关系抽取、数据的转化与查询4个角度重点介绍了碳交易领域知识图谱的构建细节。实验表明本文所提出的方法能够从碳交易领域的海量数据中准确地获取三元组知识,并可以将其成果应用于碳交易领域的语义搜索等研究中。
知识工程领域内知识图谱这一概念由谷歌公司[4]在2012年正式提出,其本质是一种结构化的语义知识库,用于以图的结构来描述真实世界中存在的各种实体和概念,以及它们之间的关系。知识图谱可以分为通用知识图谱和行业知识图谱。通用知识图谱以常识性知识为主,强调的是知识的广度。行业知识图谱基于特定行业数据构建,强调的是知识的深度。
已有的一些著名通用知识图谱包括DBpedia[5]、YAGO[6]、Freebase[7]和Zhishi.me[8]。DBpedia使用固定的规则从维基百科的词条中抽取结构化信息,并以关联数据的形式发布,是LOD(Linking Open Data)项目的核心。YAGO通过融合维基百科和WordNet的分类体系建立了一个大规模本体,并在此基础上构建了一个高质量的知识库。Freebase的内容主要依靠人工构建,与维基百科的区别在于用户编辑的是知识而不是文章,Freebase是谷歌知识图谱的重要组成部分。Zhishi.me与DBpedia类似,通过固定的规则从百度百科、互动百科以及中文维基百科中抽取结构化信息,并对来自不同百科的数据进行对齐,建立了一个中文百科知识图谱。行业知识图谱的构建方法与通用知识图谱不同,目前关于行业知识图谱的研究较少,仅限于少数领域。例如,文献[9]在领域专家的帮助下建立了中医药知识图谱的概念模式,通过信息转化和信息抽取分别从关系数据库和文本数据中获取结构化知识,并对不同来源的信息进行集成得到中医药知识图谱;文献[10]采用本体建模的方法利用Protege工具构建出吉林地域的地理本体,在此基础上结合图数据库绘制出吉林地域知识图谱;文献[11]复用现有的知识本体构建自己的影视本体,从中英文2种不同的数据源中抽取结构化知识,并对抽取到的知识进行对齐与链接,最后通过实体匹配实现中英文影视知识的融合,得到双语影视知识图谱。上述行业知识图谱的构建需要领域专家的帮助或建立在已有的本体库上,但在碳交易领域由于数据结构复杂,没有确定的概念模式,人工构建本体代价昂贵。为此,本文从数据的角度出发,直接从碳交易领域的数据中抽取结构化知识,对于不同结构的数据采用不同的抽取方法,并对抽取的结果进行处理,以构建碳交易领域知识图谱。
碳交易领域知识图谱构建总体技术框架如图1所示,其构建流程为:1)使用网络爬虫技术从Web资源中获取碳交易领域的半结构化数据和非结构化数据。2)对于半结构化数据,通过自定义的Web数据包装器直接抽取其中的三元组知识;对于非结构化数据,预处理后使用BiLSTM-CRF模型识别出句子中的命名实体。3)对包含多个实体的句子集合通过依存句法分析得到实体之间的关系。4)将半结构化数据和非结构化数据中的三元组知识进行整合,转化为资源描述框架(Resource Description Framework, RDF)形式的关联数据,得到碳交易领域的知识图谱。此外,还构建了对知识图谱进行检索分析的查询模块。
图1 碳交易领域知识图谱构建总体技术框架
2.1.1 数据抓取
构建碳交易领域知识图谱需要大量的碳交易领域相关语料,本文的数据来源分为2个部分:非结构化的数据来自中国碳排放交易网和中国碳交易网等碳交易领域垂直站点;半结构化的数据来自百度百科、互动百科等中文百科类网站。对于语料的收集,使用基于Python Scrapy框架[12]的网络爬虫技术,分别对碳交易领域垂直站点和相关百科站点进行爬取,图2为详细的爬虫流程结构图。
图2 爬虫流程结构
爬虫系统首先以各站点给定的初始URL作为输入,然后通过数据解析模块对页面进行解析。数据解析模块包括页面链接解析器和页面数据解析器。其中,页面链接解析器负责将页面中所包含的文章URL或领域词条URL提取出来并保存到对应的URL库中,作为下一次页面请求的输入。页面数据解析器负责分析请求到的页面数据,根据定义的规则获取其中包含的信息。最后,将爬取到的数据存储在本地。
2.1.2 数据预处理
对于领域垂直站点中的文本信息,利用正则表达式编写模板,对文本中的网址URL和特殊符号等噪音信息进行过滤,去除其中的空格、制表符等格式符,并按句进行切分,作为下一步处理的语料。
对于百科网站中的词条信息,通过编写一系列规则,构造自定义的数据包装器,从页面中抽取三元组关系。例如,从信息盒(Infobox)中抽取信息,图3展示了百度百科“清洁发展机制”词条中的信息盒。
图3 词条Infobox示例
根据以上所示的信息,可以抽取到以下几组关系实例:
1)<清洁发展机制,中文名,清洁发展机制>
2)<清洁发展机制,外文名,CDM(Clean Development Mechanism)>
3)<清洁发展机制,出处,京都议定书>
4)<清洁发展机制,意义,减少温室气体排放量>
与此类似,本文还通过定义的HTML规则从页面中的列表、表格等结构抽取关系实例,将获得的结果去重后以三元组的形式存储在本地。
2.2.1 整体模型框架
命名实体识别是指从文本中识别出具有特定意义的实体,并标注其位置以及类型,为关系抽取等任务做铺垫。命名实体识别目前常用的方法包括基于规则的方法、基于统计机器学习的方法以及基于神经网络的方法。其中,基于规则的方法需要领域专家手工编写规则,构建规则的过程费时费力,系统可移植性差。基于统计机器学习的方法要求从文本中选取对任务有影响的各种特征,依赖高质量的语料库。与前2种方法相比,基于神经网络的方法可以自动提取特征,模型的训练是一个端到端的过程,所得到的模型可以直接在命名实体识别过程中使用。
基于神经网络的命名实体识别模型的优良效果在通用领域已经被证明[13-14]。本文采用BiLSTM-CRF学习框架用于碳交易领域的命名实体识别,在不依赖任何人工特征的情况下,通过网络训练得到碳交易领域实体识别模型。整体模型框架如图4所示,模型的第一层是look-up层,将以one-hot编码的输入向量映射为低维稠密的字向量(Character Embedding)。模型的第二层是BiLSTM层,将字向量作为BiLSTM的输入,自动提取句子特征,得到完整的隐状态序列。模型的第三层是CRF层,进行句子级的序列标注,将BiLSTM层的输出解码成一个最优的标记序列。
图4 BiLSTM-CRF模型结构
2.2.2 BiLSTM模块
长短期记忆网络(LSTM)[15]是循环神经网络(RNN)的一种特殊形式,解决了传统循环神经网络随着序列长度的增加而产生的梯度爆炸或梯度消失问题。LSTM模型通过特殊设计的3个门限组织,控制信息在传递过程中需要保留和遗忘的比例,使得模型可以有选择地保存上下文信息。因此,LSTM可以处理语句中的“长期依赖”问题[16]。LSTM的单元结构可以表示为:
(1)
其中,xt表示t时刻的输入,it、ft、ot分别代表LSTM单元的3个门限组织:输入门、遗忘门和输出门,Ct表示t时刻的状态,ht表示t时刻的输出。σ表示激活函数sigmoid,*表示元素之间的乘积,tanh表示双曲正切激活函数。Wi、Wf、Wo、WC表示隐藏状态向量ht和输入向量xt的权重矩阵,bi、bf、bo、bC表示偏移向量。
本文采用双向LSTM(BiLSTM)结构,能够同时利用过去和未来的上下文信息。BiLSTM模型将每个句子序列按照从前向后和从后向前2个不同的方向分别进行计算,得到2个不同的隐藏状态,然后通过向量拼接将2个隐藏状态连接起来得到最终的输出。
2.2.3 线性CRF模块
基于神经网络的方法只能靠隐状态传递上文信息,所以不能直接利用上文已经预测的标签。因其每个token标签针对的是独立的分类,故而可能导致预测出的标签序列是非法的。条件随机场(CRF)可以考虑整个句子的局部特征,通过线性加权组合来进行句子级的序列标注。本文在BiLSTM模块后接入CRF模块,用来处理BiLSTM的输出,得到全局最优的标记序列。
将一个句子(字的序列)x=(x1,x2,…,xn)输入到网络中训练,定义BiLSTM层的输出结果为矩阵P=(p1,p2,…,pn)∈Rn×k,其中n是字的个数,k是标签的种类。把pi∈Rn×k的每一维pij都视作将字xi分类到第j个标签的概率。对于一个长度等于句子长度的标签序列y=(y1,y2,…,yn),模型对于句子x的标签等于y的概率可以表示为:
(2)
矩阵A是转移矩阵,例如Aij表示由标签i转移到j的概率,进而在为一个位置进行标注的时候可以利用此前已经标注过的标签。因为要为句子首部添加一个起始状态以及为句子尾部添加一个终止状态,所以A的大小为(k+2)×(k+2)。
可以看出整个序列的概率等于各个位置的概率之和,而每个位置的概率由2个部分得到。一部分是由LSTM输出的pi决定,另一部分则由CRF的转移矩阵A决定。进而利用Softmax归一化得到在原语句x的条件下产生标记序列y的概率:
(3)
在模型训练过程中对于训练样本(x,yx)的对数似然函数:
(4)
模型在预测过程(解码)时使用动态规划的Viterbi算法[17]来求解最优路径:
(5)
实体关系抽取是指从原始文本中获取标记实体之间存在的语义关系。关系抽取可以分为限定关系抽取和开放关系抽取。限定关系抽取需要有预先设定好的关系集合,将关系作为类标签,把关系抽取作为一种分类问题;开放关系抽取没有预先定义的关系集合,通常是基于启发式规则依据短语的上下文结构从文本中抽取关系元组。在碳交易领域的实体关系抽取中,由于没有固定的关系模式,不能将其作为分类问题,所以本文采用启发式规则中依存的句法分析抽取实体之间的关系。
句法分析是指对词语和词语按照一定方式组合构成的句法结构进行分析。句法分析的一个重要方面是分析句子的依存结构,即通过分析语言单位内成分之间的依存关系来揭露其句法结构。简单来说,依存句法分析就是识别出句子中的“主谓宾”、“定状补”这些语法成分,并分析各成分之间的关系,其结果通常用依存树来表示[18]。在黄昌宁等人[19]提出的依存语法中关于依存关系的4条公理中指出:任何一个成分都不能依存于2个或2个以上的成分。由于命名实体必然会在句子的依存结构中作为一个语义成分出现,因此实体之间的关系特征也必然可以由相应语义成分之间的依存关系得到。例如:“汽车排放尾气,尾气含有二氧化碳。”,其依存句法分析如图5所示。
图5 依存句法分析结构
图5中,HED表示核心关系,SBV表示主谓关系,VOB表示动宾关系,COO表示并列关系,Root和wp分别表示句子的根节点和标点符号,n和v分别表示名词和动词。从图中可以看出,这个句子共包含3个实体:汽车、尾气和二氧化碳。其中,实体对<汽车,尾气>存在着“排放”关系,实体对<尾气,二氧化碳>存在着“含有”关系,而它们都具有SBV-VOB的依存句法关系组合。利用哈尔滨工业大学LTP-Cloud平台(https://www.ltp-cloud.com/demo/)对命名实体识别过程中包含多个实体的句子进行处理,共得到15种依存句法关系类型,如表1所示。
表1 依存句法关系标注集
在命名实体识别过程中,如果一个句子中有2个或2个以上的实体,则认为这些实体之间可能存在某种关系,并将该句子输入到依存句法分析器中进行分析。根据分析的结果,本文抽取出3种关系:SBV-VOB(主语谓语宾语关系)、VOB-ATT(定语后置动宾关系)和SBV-CMP-POB(含有介宾关系的主谓动补关系),并将关系抽取的结果以三元组的形式保存。
本文从碳交易领域垂直站点中爬取文章共85315篇,从百科站点中抽取三元组共683757条。实验从爬虫获取的文章中选取6274篇文章,涉及碳交易领域垂直站点各个子模块的内容,作为命名实体识别的实验数据。然后使用基于Python的jieba分词工具对清洗后的文本数据进行分词处理。为提高碳交易领域实体分词的准确性,在分词的过程中加入了人工构建的领域词典。对分词的结果采用BIO标注集进行标注,B、I、O分别代表实体的开头字符、中间或结尾的字符和其他非实体字符。
实验使用gensim的Word2vec[20]工具将输入文本转化为100维的字向量,作为BiLSTM-CRF网络模型的输入。模型参数的训练过程中,使用Adam算法[21]作为优化器,与随机梯度下降算法SGD相比,Adam算法对内存需求较小、速度更快,学习率设为0.001。为缓解模型可能存在的过拟合问题,在BiLSTM网络的输入和输出部分设置了值为0.5的Dropout。实验取80%的数据作为训练集训练模型,取20%的数据作为测试集对模型进行测试,实验评测采用常用的评价指标:准确率、召回率和F1值,实验结果如表2所示。
表2 实验结果 单位:%
为判别本文BiLSTM-CRF模型的性能,分别进行了LSTM模型、BiLSTM模型和BiLSTM-CRF模型的对比实验。根据表2的实验结果可以看出,无论是准确率、召回率还是F1值,BiLSTM-CRF模型都取得了最好的效果。主要是因为BiLSTM-CRF模型能够充分利用上下文信息和相邻标签的关系,从而可以获得全局最优的标签序列。
实验基于Python的pyltp模块开发了依存句法分析器,将命名实体过程中包含多个实体的句子保存并输入到依存句法分析器中,根据句子的依存句法结构抽取实体之间的关系,共获取561534条三元组知识。因百科中抽取的三元组和自由文本中获取的三元组之间存在大量重复部分,所以需要对其进行去重操作。将实体名称和关系/属性名称相同但目标实体名称/属性值不同的三元组合并为一条记录,去重合并后共得到1158491条三元组知识。
在得到碳交易领域的三元组知识后,本文以Java语言编写程序,通过Jena所提供的RDF API将txt格式的三元组知识数据转化为nt格式的RDF关联数据,完成碳交易领域知识图谱的构建,图6为转化后的部分结果。
图6 RDF格式数据
同时,实验使用Python语言开发了碳交易领域知识图谱的查询系统,通过调用Jena的fuseki服务,实现对关联数据的语义查询。查询系统根据定义的规则将查询条件转化为关联数据的标准查询语言SPARQL。例如,对于“实体”的查询,其对应的SPARQL查询语言为“SELECT ?p ?o where{实体 ?p ?o}”;对于“实体+关系/属性”的查询,其对应的SPARQL查询语言为“SELECT ?o where{实体 关系/属性 ?o}”。在查询条件框中输入实体名称“碳交易市场”,其对应的知识图谱如图7所示。也可以输入“碳交易市场 定位”等来获取更精确的结果。
图7 知识图谱查询界面
本文详细描述了一种碳交易领域知识图谱的构建方法,该方法使用特定的数据抽取框架,从网络资源中抓取碳交易领域的数据。其中,利用自定义的Web数据包装器和BiLSTM-CRF模型与依存句法分析器相结合的方法分别从半结构化和非结构化数据中获取三元组,并完成了三元组知识的关联数据转化与查询。实验结果表明,该方法可以高效地从互联网信息中抽取知识,可以从文本数据中准确地获取实体及其之间的关系,能够完成碳交易领域知识图谱的快速构建。由于本文的研究重点主要集中在知识图谱获取方面,缺少对知识图谱应用的考虑,在未来的工作中将进一步开展基于知识图谱的智能问答和可视化应用的研究,更好地满足碳交易领域知识服务的需求。