旅游顺承事理图谱的构建及应用研究

2022-03-16 00:10王翊臻云红艳李正民
关键词:数据可视化

王翊臻 云红艳 李正民

摘要:为了给用户提供更直观、高效、智能的旅游信息检索方式,基于模式匹配法识别、抽取显式顺承关系,构建旅游顺承事理图谱,设计图谱应用系统。该系统采用B/S架构,基于Flask框架,能够完成基于城市、计划时长的旅游路线查询。实验结果表明,顺承关系抽取准确率为82.84%,基于D3.js的图谱可视化查询能丰富用户的旅游检索模式。

关键词:事理图谱;顺承关系抽取;模式匹配;数据可视化

中图分类号:TP391         文献标志码:A

随着人们生活水平的提高以及中国旅游业的迅猛发展,人们对旅游需求日益增加,互联网上积累的旅游出行领域相关信息也是越来越多,如知乎上有旅游的相关问答,携程等旅游门户网站提供景点信息和旅游攻略等。但是此类信息来源广泛且数据庞杂,用户很难快速准确地获得所需信息。因此,需要针对旅游出行建立一种更加直观、高效的信息检索方式。语义网络(Semantic Networks)于1960年提出,知识的组成形式先后经历了语义网络、本体、万维网、链接数据、知识图谱等几个阶段,期间涌现了大量关于本体和语义技术的研究与应用[1-2]。2012年谷歌团队提出知识图谱的概念,引起了学术界和工业界的广泛关注。在知识图谱的构建方面,国内外已经有了包括通用知识图谱和领域知识图谱的构建在内的诸多研究[3-5]。通过构建旅游领域知识图谱(例如CASIA-KB的中文旅游景点知识图谱)能够为用户进行信息检索提供一种更加直观、高效的方式。但知识图谱也存在一定的局限性,知识图谱中刻画的是静态的确定性事实,研究的是名词性实体、实体属性、以及实体之间关系,缺乏对事物的逻辑演化和发展过程的刻画能力。近些年在知识图譜的基础上,哈工大刘挺团队提出了事理图谱的概念[6-7]。事理图谱强调揭示事件之间的逻辑演化,研究对象主要是谓词性事件、事件间逻辑关系,其对信息检索结果的展示更加直观,更能揭示事物的演化过程。本文通过分析云南省旅游游记和攻略文本,对其中的显式顺承关系及事件进行抽取,构建旅游顺承事理图谱,并在此基础上实现事理图谱可视化查询功能,以期为用户提供更好的旅游信息检索体验。

1 旅游顺承事理图谱构建及应用系统框架

旅游顺承事理图谱构建及应用系统以Python作为开发语言,采用B/S架构,后端服务由Flask框架提供,前端通过Bootstrap框架构建界面,图谱使用D3.js(http:/d3js.org)完成可视化。如图1所示,系统采用分层的设计结构,自顶向下分别是:表示层、业务逻辑层、数据处理层。

(1) 表示层:用户和系统的交互层,包括可视化查询模块和智能问答模块,本文着重描述可视化查询模块。查询分为两类,分别是基于“目的城市”的查询和基于“目的城市+计划时长”的联合查询。根据查询的类别,系统将以不同的查询条件去图数据库中检索,最后将结果以图谱的形式进行可视化展示,同时辅以文字、图片等方式对图谱进行补充说明。

(2) 业务逻辑层:前后端交互的中间层,完成业务逻辑的处理。请求解析模块负责对表示层用户发来的post请求进行处理,根据请求参数调用不同函数,以不同的条件对数据层进行访问,将获取到的数据以json格式回传到数据封装模块。数据封装模块负责对数据进行去重等操作,并按照适合前端展示的形式精简数据结构,将其以json格式回传给表示层。

(3) 数据处理层:是整个系统的核心部分,包括数据获取、数据解析两部分。数据获取部分包括数据爬取模块、数据源的持久化存储,数据解析部分则包括数据预处理模块、图谱构建模块、图谱的持久化存储。数据爬取模块负责访问携程网上云南省相关的网页集合,爬取其中的游记及攻略文本信息,并作为数据源集合持久化存储在MongoDB数据库中。数据预处理模块负责对原始文本进行清洗、切分等预处理,去除噪音以减少抽取关键内容时的困难。图谱构建模块是旅游事理图谱构建的核心,包括如下任务:首先对于预处理完毕的文本数据,基于模式匹配法进行显式顺承关系的识别与抽取,识别其中的显式顺承关系,并抽取关系子句;然后针对关系子句进行事件抽取,得到顺承事件三元组。事件三元组作为事理图谱的基础结构,被持久存储到Neo4j图数据库中。

系统各层遵循“高内聚低耦合”的原则,以提高系统的稳定性和可扩展性。此外Flask作为一个轻量型的框架,非常适用于开发web服务的API,且与NoSQL数据库的配合优秀。持久化存储方面,传统的关系型数据库中实体与实体之间的关系通过外键实现,随着关系数量的增加,查询效率会大打折扣,因此采用NoSQL[8]类型的MongoDB数据库、Neo4j图数据库来分别存储数据源集合和图谱。

2 旅游顺承事理图谱的构建

2.1 数据源及获取

(1) 数据源:数据来源为携程网(https://you.ctrip.com/)。携程网的旅游攻略及游记版块中,包含诸多旅评人士、资深游客、本地向导的推荐玩法及路线,以及普通游客的旅行随笔。主要爬取云南省相关的旅游攻略及游记文本作为分析和实验的源数据。

(2) 数据爬取:采用Scrapy爬虫框架爬取数据。首先设定爬取的内容Item为网页地址(url)、文章标题(title)、正文内容(content);接着Spider向引擎发送请求,转经调度器向互联网发送请求,抓取数据;然后采用Xpath语句着重处理<div class=“ctd_content”>标签;最后将获取的数据交给管道,按爬取顺序存储在MongoDB数据库中。爬取的同时清洗其中空行、乱码及无效值等。最终共爬取云南省旅游攻略及游记文本32 580篇,筛选其中热门实用排名度最高、内容逻辑清晰的500篇文章作为实验文本。

2.2 数据预处理

由于爬取到的原始文本行文结构不够清晰,还需进行更细致的文本预处理操作。

(1) 文档切分:将原始文本切分成多个“段”,每段对应一个完整的行程安排。总体分两步:①按日程标志词,先切分成以“天”为单位的文本块;②再按行程标志词,将每“天”细化切分为以“行程”为单位的“段”。针对文本存在的标志词不统一问题,即不同文本中标志词的类型、英文大小写、数字不同,进行格式化操作:对诸如“DAY1”、“Day1”、“DAY01”、“第一天”、“第1天”等日程标志词,统一格式化为“DAY1”形式;对诸如“1.”、“1、”、“一、”、“第一站”等行程标志词,统一格式化为“1.”。

(2) 句子切分:对(1)中得到的每段“行程”再次进行切分,得到单独的句子,以“句”作为目前最小粒度单位。对每段“行程”文本,按“\\n\\r” 等换行符以及“”等结束标点进行切分,得到多个单句,至此文本切分完毕。

(3) 短句处理及数据增强:首先处理短句,对过短的句子(小于5个汉字字符,或小于12个英文字符),将其和前一句进行合并,避免过短导致意义不明。其次增强数据,将相邻的2句话合并到一起,作为1条新的文本数据存储到数据集中。同理再对相邻的3句话进行同样的操作,从而达到扩充数据多样性的目的。

2.3 基于模式匹配的显式顺承关系识别与抽取

顺承关系是指两个事件在时间上相继发生的偏序关系[7],包含顺承关系的文本中,各分句表示连续发生的事情或动作,分句有先后顺序。根据文中是否包含明显的顺承关系联接词,可以将顺承关系分为显式和隐式。显式顺承关系,意味着文本中包含明显的顺承关系联接词,是文本中较为容易识别和抽取的一类顺承关系;隐式顺承关系,则是指文本中没有用以表征顺承关系的联接词,但是暗含在语义中的一类顺承关系。

顺承关系抽取目前常用的方法包括:基于模式匹配的方法和基于深度学习的方法。基于模式匹配法的顺承关系抽取,需要设计具有领域适用性的模板和抽取匹配规则,这种方法抽取准确率高,但跨域适应性差,常用于特定领域的显式顺承关系的抽取;基于深度学习的顺承关系抽取,是将抽取任务看作事件检测和关系分类两个子任务,利用深度神经网络(如BERT[9])强大的表征学习能力,将文本中隐含的事件间关系识别并抽取出来。基于深度学习的方式使得抽取方法的适应性和工作效率都有了很大程度的提高,是近年来隐式关系抽取的一种主流选择[10]。但深度学习方法依赖于强有力的标注数据集,在现有语料库数据不足、标注不完备的情况下,很难构造出一个没有先验知识的高级深度学习模型。因此,本文主要聚焦于旅游领域文本中的显式顺承关系,基于模式匹配法对其进行识别与抽取。

2.3.1 研究思路 旅游领域显式顺承关系的抽取主要包括顺承关系子句的抽取和子句中事件的抽取[12]。首先根据句法模式和匹配规则抽取显式顺承关系句中的顺承前子句和顺承后子句,然后将顺承前、后子句中的事件分别按“动宾结构”这一事件定义抽取出来,最终形成顺承事件三元组<事件a,顺承,事件b>。显式顺承关系的抽取框架如图2所示。

2.3.2 显式顺承关系子句抽取 模式匹配法是通过定义在文本中表达的字符、语法或者语义模式,将模式与文本的匹配作为主要手段,来实现关系实例的抽取[11]。顺承关联词(或顺承提示词,Cue Phrase)则是文本中用来表征顺承关系的关联词,显式顺承关系的抽取直接依赖于是否存在顺承关联词。顺承关联词在句中用法的不同,使得句法模式更多样,句法模式的总结也是据此来完成。

经过汉语语言学者们的整理和研究,目前常作于研究和讨论的顺承关联词有15个[12]:“首先”“先”“然后”“接着”“后来”“从此”“于是”“从而”“最后”“终于”“就”“便”“才”“再”“又”。其用法见表1,其中Si指句子。本文在此基础上归纳了适用于旅游领域顺承关系抽取的4类顺承提示词,每类提示词及其对应的顺承句法模式见表2,其中Pi表示第i种句法模式。

为了更加方便和准确地识别出顺承关系句,抽取出句中的顺承前和顺承后子句,设计了与上述4種句法模式相对应的抽取匹配规则:

(1)规则1:if wi∈cue1 and wj∈cue2, then Si∈P1,

before p1={wi+1,…,wj-1} and afterp1={wj+1,…,wn}

(2)规则2:if wi∈cue2 and cue1si, then Si∈P2,

beforep2={w1,…,wi-1} and afterp2={wi+1,…,wn}

(3)规则3:if wi∈cue3 and cue1si, then Si∈P3,

beforep3={w1,…, wi-1} and afterp3={wi+1,…, wn}

(4)规则4:if wi∈cue4 and wi-1∈mark∪subject and cue1si, then Si∈P4 ,

beforep4={w1,…, wi-2} and afterp4={wi+1,…, wn}

其中,Si表示预处理后的文本语料集中第i个句子,wi表示句中第i个词,{wm,…,wn}表示句子中从第m个词到第n个词之间的文本内容(包括第m和n个词),mark表示句子中的逗号,subject表示句子中的主语,before表示顺承前子句,after表示顺承后子句。

2.3.3 显式顺承事件抽取 事理图谱中的事件,理论上是具有一定抽象程度的泛化事件,表示为抽象、语义完备的谓词短语或句子[7]。但游记文本内容形式多样,包含作者大量的心理活动和情感抒发,且大量句子省略主语,若以标准的“主谓宾”形式进行事件抽取,容易造成事件成分缺失,影响抽取效果。因此将旅游顺承事理图谱中的事件定义为“去丽江”这种“谓语触发词+宾语”的形式,亦即动宾短语。2.3.2节抽取到的顺承前、后子句此时仍保持着句子的形态,为了便于顺承事理图谱的构造,需要将子句中包含的事件分别抽取出来,组成事件三元组。具体包括两个任务。

①分词:分词对于非结构化文本的处理、语义分析等十分重要,是NLP必备的上游任务之一。本文采用pkuseg(http://github.com/lancopku/pkvseg-phthon)作为分词工具。pkuseg是北京大学语言计算与机器学习研究组研制推出的一套中文分词工具包,对于特定领域的个性化分词,如医药、旅游、小说等领域,可以提供比jieba(http://github.com/fxsjy/jieba)(结巴分词)、THULAC(http://thulac.thun/p.org)(清华大学自然语言处理与社会人文计算实验室)更高的分词准确率。

②依存句法分析:依存句法分析是通过分析语言单位内成分之间的依存关系揭示其句法结构。依存句法分析通过识别分词后的句子中各词的词性,将各词之间的句法关系通过依存结构展示出来[13]。采用哈工大研发的语言技术平台LTP(http://ltp.ai/)来完成依存句法分析相关操作。

例如,“第一站先去了纳帕海依拉草原,在依拉草原上还能看到远处的石卡雪山——石卡雪山是香格里拉附近可以攀登的雪山”是通过模式匹配得到的符合模式P1的显式顺承关系句;对其进行关系子句抽取后得到如下的两个子句“{ 去 了 纳帕海依拉草原 ,在 依拉草原 上 } ——P1——> { 能 看到 远处 的 石卡雪山——石卡雪山 是 香格里拉 附近 可以 攀登 的 雪山 }”;对两个子句分别进行分词、依存句法分析(顺承后子句的依存句法分析结果如图3所示),得到前后子句中包含的VOB(动宾关系)短语如下:前子句{去纳帕海依拉草原}、后子句{看到石卡雪山,雪山是};进一步做词性筛选,判断“谓语触发词+宾语”的词性是否符合“v+n”(动词+名词)的关系,排除“雪山是”,取符合的事件“去纳帕海依拉草原”“看到石卡雪山”分别作为前后子句的事件抽取结果。最终得到顺承事件三元组<去纳帕海依拉草原,顺承,看到石卡雪山>。

2.3.4 抽取实验效果与分析 针对500篇云南省旅游攻略及游记实验文本,进行分词、分句等预处理后,得到句子48 739句。根据2.3.2节所述的句法模式和抽取规则,逐句判断是否含有顺承提示词,对显式顺承关系句进行关系子句的抽取以及子句中事件抽取。抽取效果见表3。

其中匹配句子数是指与4种模式P1、P2、P3、P4分别相匹配的句子数目,有效匹配句子数是指该模式匹配得到的句子中能够表征顺承关系的句子个数,有效事件对数是指有效匹配的句子经过事件抽取后能够明确表征顺承关系(即符合事件定义及筛选条件)的事件对的数目,准确率=有效事件对数/匹配句子数。实验结果表明,本文采用的模式匹配法在云南省旅游攻略及游记文本的顺承关系抽取中平均准确率为82.84%,效果良好。

2.4 图谱的持久化存储

经过显式顺承关系识别与抽取后,得到顺承事件三元组<顺承事件a,顺承,顺承事件b>。利用Py2Neo,将三元组存入Neo4j数据库中:①通过网络套接字连接到Neo4j数据库;②解析三元组,将三元组中的顺承事件a/b、顺承关系数据转换成Node及Relationship对象;③通過create( )函数将节点、关系对象导入Neo4j中。事件对两两结合构成事件链,事件链交错相接构成整个图谱。

3 基于事理图谱的可视化查询功能

基于构建的旅游顺承事理图谱,设计实现可视化查询模块,为用户提供两种查询方式,分别是基于“目的城市”的查询和基于“目的城市+计划时长”的联合查询,并对查询结果进行可视化展示。

可视化查询功能的整体流程如图4所示。用户在浏览器端通过下拉列表选择确定的城市(必选)、计划时长(可选),点击搜索;业务逻辑层获取用户的请求,经由请求解析模块、数据封装模块的处理,将从Neo4j数据库查询得到的结果以json格式返回给前端;前端利用D3.js,将结果以图的形式渲染到界面,直观展示给用户,并辅以文字形式的行程推荐及时间安排对图谱进行补充描述。

本文采用D3.js中的力导向图作为可视化手段。D3.js(或称D3,指Data-Driven Document,数据驱动文档)是一个JavaScript库,本身是一个DOM操作库,能够以操作DOM树的方式向用户直观地展示数据信息。D3基于SVG(Scalable Vector Graphics,可缩放矢量图形)进行绘制,提供了大量的图形生成器,使绘制图形变得简单,图形缩放时不会损失精度。

基于D3.js的图谱可视化主要是将查询结果中的事件、关系按照图的形式进行绘制和渲染。

①创建SVG矢量图形,作为图谱可视化结果的容器;

②利用Ajax异步获取业务逻辑层返回的json格式数据,通过d3.json( )方法将其读取到内存中,节点属性包括[id, label, name],边属性包括[id, source, target, name];

③通过选择器(selector)选定SVG,设置节点的显示形式为圆(circle)、边的显示形式为箭头(arrow),同时动态设置节点的大小、边的长短、箭头方向。通过tick( )函数依次计算所有节点、边的位置坐标,通过mouseenter( )函数绑定光标移入后的高亮及虚化效果;

④将绘制结果渲染到SVG上,并导入div容器中。

图5展示的是选择“丽江”作为“目的城市”、选择“5~8天”作为“计划时长”进行查询得到的结果。图中左侧为图谱可视化,右侧为文字描述部分。图谱以“去#丽江”事件节点为中心,根据箭头走向连通多条完整事件链,每条事件链表征一个完整的行程。右侧文字部分是对图谱的详细补充,给定多个时长为5~8天的日程安排,供用户参考决策。

4 结论

本文采用模式匹配法,利用设计的抽取匹配规则实现显式顺承关系的识别与抽取,抽取准确率达到82.84%;同时将抽取到的顺承关系、事件,以<事件a,顺承,事件b>三元组的形式存入Neo4j图数据库中作为事理图谱的基础结构。在构建完成的事理图谱基础之上,设计实现旅游顺承事理图谱应用系统,基于D3.js技术为用户提供旅游路线可视化查询功能,帮助人们更好地梳理和检索旅游路线,辅助用户做出决策。

参考文献

[1]云红艳,贺英,郭振波,等.基于本体和Karma建模的数据集成研究与应用[J].青岛大学学报(自然科学版),2017,30(1):60-65.

[2]于小洋,云红艳,贺英,等.利用语义技术实现Web Service数据的快速集成[J].青岛大学学报(自然科学版),2017,30(1):79-84.

[3]蒋秉川,万刚,许剑,等.多源异构数据的大规模地理知识图谱构建[J].测绘学报,2018,47(8):1051-1061.

[4]林莉,云红艳,贺英,等.基于企业知识图谱构建的可视化研究[J].青岛大学学报(自然科学版),2019,32(1):55-60.

[5]AUER S, BIZER C, KOBILAROV G, et al. DBpedia: A nucleus for a web of open data[C]//6th International Semantic Web Conference/2nd Asian Semantic Web Conference, Busan, 2007: 722-735.

[6]刘挺.从知识图谱到事理图谱[R].上海:中国计算机学会青年计算机科技论坛,2017.

[7]丁效.事理图谱构建及应用[R].深圳:中国中文信息学会,2019.

[8]CATTELL R. Scalable SQL and NoSQL data stores[J]. ACM SIGMOD Record, 2011, 39(4):12-27.

[9]DEVLIN J, CHANG M W, LEE K, et al. BERT: Pre-training of deep bidirectional transformers for language understanding[DB/OL]. [2021-04-11] https://arxiv.org/abs/1810.04805.

[10] 王朱君,王石,李雪晴,等.基于深度学习的事件因果关系抽取综述[J].计算机应用,2021,41(5):1247-1255.

[11] 祝寒. 基于事理图谱的航空安全事故因果关系研究[D].天津:中国民航大学,2019.

[12] 周杨钰.留学生汉语顺承关联词的习得研究[D]. 上海:上海交通大学,2013.

[13] 李雪红,郭晖,闫泓涛.基于改进依存句法的微博情感分析研究[J].计算机与数字工程,2017,45(3):506-511.

Research on Construction and Application of Tourism Sequential Eventic Graph

WANG Yi-zhen,YUN Hong-yan,LI Zheng-min

(College of Computer Science & Technology, Qingdao University, Qingdao 266071, China)

Abstract:

In order to provide users with a more intuitive, efficient and intelligent travel information retrieval method, the explicit sequential relationships were identified and extracted by the pattern matching method. The tourism sequential Eventic Graph was constructed and the graph application system was designed. Using B/S architecture and Flask framework, the system can complete tourism route query based on city and plan-days. The experimental results show that the accuracy rate of sequential relationship extraction is 82.84%. The visual query based on D3.js can enrich users' tourism retrieval model.

Keywords:

Eventic Graph; sequential relationship extraction; pattern matching; data visualization

收稿日期:2021-04-28

基金項目:

国家重点研发计划 (批准号:2016YFB1001103)资助。

通信作者:

云红艳,女,博士,教授,主要研究方向为语义Web与本体工程、智能信息系统、大数据集成。E-mail:yunhy2001@163.com

1180501186312

猜你喜欢
数据可视化
移动可视化架构与关键技术综述
大数据时代背景下本科教学质量动态监控系统的构建
可视化:新媒体语境下的数据、叙事与设计研究
我国数据新闻的发展困境与策略研究
基于R语言的大数据审计方法研究
数据可视化概念研究
大数据背景下数据可视化方法研究
基于B/S结构的考试成绩分析系统
基于Hadoop的商业数据可视化分析模型的研究
用户数据统计挖掘与展示