作者简介
鞠建勋,携程度假AI研发团队资深算法工程师,主要负责携程度假自然语言处理相关的AI项目。硕士毕业于南京大学,有五年的自然语言处理经验,专注于自然语言处理和知识图谱方面的应用和算法研发。
随着互联网和大数据的发展,数据呈现爆炸式增长的态势。知识图谱以其强大的语义处理能力和开放组织能力,为大数据时代的知识化组织和智能应用奠定了基础。
旅游行业作为综合性行业,包含交通、游览、住宿、餐饮、购物、文娱等多个环节,每个环节都有着海量的数据,并且有着相当庞大的应用场景。
同时,旅游领域的数据有着领域范围大,涉及知识面广,知识层级多的特点,比如一个简单的团队游产品就会和飞机、酒店、景点、火车、汽车、餐厅等等多个实体产生关联。对于旅游行业,尤其是互联网旅游行业,如何构建和应用一个旅游领域的知识图谱成为一个非常有价值的问题。
本文将从旅游领域知识图谱的特点,知识图谱的构建,知识图谱的应用三个方面介绍知识图谱在互联网旅游行业的应用。
一、旅游领域知识图谱的特点
如上图所示,曼谷三日游是一个旅游产品,它包含泰国航空、曼谷阿玛丽水门酒店、大皇宫、皇宫酒店等子产品,每个子产品都有自己不同的数据属性和架构。
泰国航空,包含航班号、出发时间、出发地点、到达时间、到达地点等数据;曼谷阿玛丽水门酒店,包含酒店房型、酒店价格、酒店地址、酒店设施等信息;景点包含门票、地址、景点类型等信息;而餐厅有着菜品、价格、地址等重要信息。
如果这个旅游产品的信息采用传统数据库进行存储,需要多张数据表进行存储,不便于对于复杂数据的整合,也不便于进行一些涉及多领域的推理,而且一旦涉及到复杂的查询,就需要多张表的关联,不利于知识的快速获取。
为了解决上述问题,我们构建一个图数据库去存储这些产品的数据。当数据以图的形式存在,就可以发现很多路径存在于两个事物之间,通过路径的跟踪以及一些图的算法就很容易得到一些事物之间的关系。这个图数据库就构成了一个旅游领域的知识图谱。
我们把图数据库中的泰国航空、曼谷阿玛丽水门酒店、大皇宫、皇宫酒店、曼谷、泰国等等设为节点,并称之为实体;把他们之间的关系设为节点和节点之间的边;而把航班号、酒店房型、地址等信息称之为实体的属性。
例如,游客想知道,大皇宫属于哪个国家,通过“大皇宫”->[所属城市]->“曼谷”->[所属国家]->“泰国”的“实体->关系->实体”递推关系就可以很容易找到答案;而传统数据库需要专门为查询国家写一套解决逻辑。又例如,我们想查询一下大皇宫附近的酒店价格,可以通过“大皇宫”->[附近酒店]->“xx酒店”->[价格]->“xx元”的关系找到答案;而传统数据库则需要多张表的联合查询才有可能完成这个查询。
此外,知识图谱还有强大的语义概括能力和语义抽象能力。我们可以把实体的类型抽象成Class(类别),也叫做本体,通过本体与本体之间的关系来完成一些推理或语义分析。
比如我们把大皇宫归于“古代建筑”这个类别,同时定义“古代建筑”属于“建筑”的子类,“建筑”则有“高度”的属性,那么大皇宫也有“高度”的属性。我们不需要给每个子类定义一些通用属性,而只要通过继承父类的属性就可以完成定义。
二、旅游领域知识图谱的构建
旅游领域知识图谱的构建,来自于企业数据和外部数据的融合。
首先,构建一个旅游领域的知识图谱,需要企业内部数据作为基础,因为企业内部数据是和企业产品息息相关的,而产品是一切应用的基础。
旅游产品中的信息大部分作为基础数据存在,比如酒店房型,酒店地址等等,我们需要这些信息来构建酒店的知识图谱。而对于一些变化非常频繁的数据,则不会导入到知识图谱中,比如售卖数量等等。我们把这类知识图谱统称为行业知识图谱,它具有高深度和专业性的特点。
此外,我们还需要用到外部数据作为补充,比如我们经常会用到wiki上的常识信息来补充知识图谱,我们把这部分知识图谱称为通用知识图谱。
通常常识信息不会存储在企业内部数据库,且具有非常大的广度,比如大皇宫的面积有多大,高度有多高等等。这些常识信息对于产品售卖可能没有太大作用,但对于回答客户的问题或提供搜索依据是有很大帮助的。
通用知识图谱的广度和行业知识图谱的深度相结合,可以互相补充,形成更加完善的知识图谱。
外部数据经常会以大段文本的形式存在,因此我们需要从文本中抽取关系。通常采用自然语言处理的NER方法去提取文本中的实体,结合句法分析、远程监督等传统方法来提取实体与实体之间的关系。
如下图所示,我们可以抽取出刘氏庄园这个景点名,同时可以抽取出兴义这个目的地名,也可以挖掘出它们之间的“位于”关系。那么这段文本中的“刘氏庄园”->[位于]->“兴义”这条知识图谱数据就成功被抽取出来了。
知识图谱的存储可以选择RDF数据库,或者图数据库。RDF数据库是W3C标准的以三元组的形式存储的知识图谱,有标准的推理引擎,易于进行推理和关系发现;而图数据库则以节点和边的方式存储知识图谱,节点和边都可以带属性,没有标准的推理引擎,但图数据库的遍历效率高,性能更好,更适合企业级的海量数据。
当构建好旅游领域的知识图谱之后,可以对知识图谱进行补全。比如大皇宫的所属城市是曼谷,而曼谷是泰国的一个城市,假如缺失了“大皇宫”->[所属国家]->“泰国”这条关系,我们可以通过关系补全来把这条关系加入知识图谱。关系补全的方法有很多,如TransE、TransH和TransR等,本文就不一一阐述了。
三、旅游领域知识图谱的应用
知识图谱的应用很广,结合知识图谱和旅游领域的特点,旅游知识图谱可以应用在以下几个方面:
1、旅游问答机器人
通常问答机器人不擅长去“寻找”答案,而是需要人来提前“设定”好答案。但有了知识图谱之后,这种情况会得到一些改变。
基于知识库的问答系统我们称之为KBQA(Knowledge based Question Answering),而知识图谱是知识库的一种。KBQA更擅长回答“what”“when”“where”问题,只要捕捉到问句中的实体和关系,就可以在知识图谱中“寻找”到相应的实体以及它的属性,而通过实体的属性可以解答大部分的“what”“when”“where”问题。
目前有很多问答模型利用知识图谱来解答问题。通常把实体和关系作为一种特征,参与问句意图的计算。我们首先解析问题的语义特征,提取问题中的实体和关系,然后将实体与关系映射到知识图谱中,把知识图谱中对应的实体属性返回作为答案,或者将知识图谱中的实体、关系、属性作为特征,参与下一步的模型计算。
2、旅游内容推荐
旅游产品非常多样化,所以很依赖推荐。我们往往会抓住旅游产品和用户的浅层特征去推荐,而忽略了一些深层次的特征。当用户和某个知识图谱实体产生关联,我们可以用知识图谱去补充用户特征。
如上图所示,当我们通过数据挖掘发现用户A的兴趣点是海岛和五星级酒店后,我们可以通过知识图谱关联出相关的团队游产品。知识图谱提供的信息可以作为推荐系统的一个重要维度,参与下一步的计算,为精准推荐增加一块砝码。
3、旅游内容搜索
旅游产品的数量很多,因此对于搜索的要求很高。对于一些复杂的搜索语句,知识图谱可以利用自身的推理能力搜索出深层的答案。
例如,用户在搜索框输入“大皇宫附近的酒店”,知识图谱可以通过“大皇宫”->[附近酒店]->“xx酒店”搜索出相关的酒店。如果用户在搜索框输入“大皇宫附近酒店的价格”,知识图谱可以通过“大皇宫”->[附近酒店]->“xx酒店“->[价格]->”xx元“搜索出酒店的价格属性。知识图谱利用了图数据库的优势,非常方便地进行图遍历,加强了搜索引擎解决复杂搜索的能力。
四、总结
知识图谱在旅游场景还有很多其他应用,本文就不一一列举了。
知识图谱这项技术还处于发展阶段,还有很大的提升空间,结合日益增长的旅游市场,我们非常看好知识图谱应用于旅游领域的前景。我们相信,未来的知识图谱还会有更多的应用和更多的技术,为互联网旅游行业的发展添砖加瓦。