知识图谱构建下的自动问答KBQA系统实战

AI人工智能2年前 (2022)发布 ash
586 0

知识图谱构建下的自动问答KBQA系统实战


知识图谱问答系统任务和意义

问答系统(Qusstion Answering System,QA System)在大家的日常生活中随处可见,2014年微软率先推出了小冰智能聊天机器人,直至现在越来越多如siri移动生活助手和智能音箱等的面市,问答作为一种信息获取方式愈发受到大众和厂商的关注和投入。 问答系统能够接受用户以自然语言形式描述的提问,并从大量的异构数据中查到或者推理出用户想要的答案。相比传统的信息检索系统,问答系统场景的核心在于用户的信息需求相对比较明确,而系统直接输出用户想要的答案,这个答案的形式可能是文档、结构化的表格或者推理加工的自然语言文本。

问答示例:

  1. 问题:阿根廷的首都在哪里 => 答案:阿根廷共和国的首都为布宜诺斯艾利斯。

  2. 问题:儿童安全锁怎么设置 => 答案:儿童安全锁位于各后车门的后边缘,各车门的儿童安全锁必须单独设置。

设置:

  • 左侧:逆时针转动锁定,顺时针转动解锁。

  • 右侧:顺时针转动锁定,逆时针转动解锁。

知识问答相比文本检索,减少了用户对检索文档内容的二次提取和推理的过程,会显著提升用户知识获取的体验。根据问答底层技术的差异,目前工程落地实现问答的技术路线基本分为基于知识图谱的问答(KBQA)、基于阅读理解的问答(MRC)和常见问题问答(FAQ)三种模式。三种问答的对比如下:

知识图谱构建下的自动问答KBQA系统实战

表1 常见的知识问答技术路线对比

FAQ和MRC不是本文介绍的重点,这里简要介绍。在FAQ中,重点是文本语义匹配的精度,如 用户的问题是“怎么加玻璃水”,而问答对库中的标准问句为“添加玻璃清洁液”,类似的泛化问题决定了常见的字符串相似度匹配无法解决,STS模型比如sentence-bert等双编码模型或者苏剑林老师的sim-bert等模型或者通过领域词典都可以解决类似泛化问题。MRC方面,基于百度dureader等中文阅读理解数据,在通用领域可以快速搭建一个MRC问答服务,但是垂直领域仍然需要标注数据来让模型的性能达到一个可以接受的水平。在垂直领域,针对MRC训练数据稀少的问题,可以从非结构化文本三元组标注的数据得到补充。如对于文本“北京,简称“京”,是中华人民共和国的首都,是全国的政治中心、文化中心,是世界著名古都和现代化国际城市。”,图谱构建过程中标注的三元组为(中国,首都,北京),构造的MRC问题即“中国的首都在哪里”,答案SPAN为“北京”的index位置。KBQA(Knowledge Base Question Answering)作为一种底层基于知识图谱的问答技术,相比传统的文本检索问答和FAQ(Frequently Asked Questions),基于垂直领域相对固定边界的知识图谱,可以结合业务提供一种高级的信息服务形式,通过确认、反馈等操作完成信息获取,现阶段下,无论是通用图谱还是领域图谱,业界对简单问答的效果都达到了一个比较好的水平,而在特定场景的领域图谱中,经过梳理,复杂问答特别是推理形式的问答也是可以达到一个比较可以好的效果。

基于知识图谱结构化关联知识的问答系统的业务价值包括:

  1. 知识的沉淀和高效复用,知识梳理更加明确直接,实现知识的瘦身和标准化;

  2. 返回的答案更能精准理解用户的意图,答案更加直接高效,避免二次推理加工;

  3. 对知识管理的维护更加方便,实体-属性-关系自然,方便增删改查;

  4. 特定业务场景下基于专家经验的复杂推理成为可能


智能问答系统技术架构

智能问答系统的整体基础框架图所示,一共分为据预处理模块、问句分析、 知识检索和答案生成四个部分。下面介绍达观知识图谱平台问答系统的一些具体的实践经验。

知识图谱构建下的自动问答KBQA系统实战

图1 智能问答系统的整体基础框架


01


问句预处理

除了常见的分词和词性标注外,还可以根据知识图谱中已有的模式、实体名称、关键属性值对问句进行纠错。如图所示,根据产品的别名就可以对问句中的产品别名进行纠错。

知识图谱构建下的自动问答KBQA系统实战

图2  基于知识图谱实体链接的Query纠错

实际场景下的领域知识图谱,更多的构建的是知识点的关联,即实体作为一个知识点,可能是一个短语或者一个语言片段,而在系统冷启动下,面对领域数据,通过句法分析提取出query中的短语,该候选短语也可以作为实体提及方便后续进行实体链接。通过中文树库(Chinese Tree Bank,Zhang Y., Zhou H., & Li Z. Fast and accurate neural crf constituency parsing,2020)限制短语的词性过滤重要的短语,如保留名词短语,通过短语提取可以避免单词、或者Ngram作为实体提及检索带来的巨大开销。我们采用HanLP自然语言处理包中的短语提取接口对query提取名词短语。


02


实体链接和词槽提取

实体链接(entity linking)就是将问句文本的某些字符串映射到知识库中对应的实体上。实体链接是问答系统的核心问题之一,实际应用中问答中的大部分badcase可能都是实体链接出现了问题,如果实体识别一旦出错,答案就很容易出现完全不相关。为了解决垂直行业数据冷启动的问题,我们结合精确链和模糊链接相结合的方式来提高实体链接的精度。

实体精确链接利用知识库中已有的知识点,将模式(schema)名称、实体名称、可遍历的枚举属性值集合构建字典树(即Trie树),通过Trie前缀树提取查询中的精确实体名称。

我们在实际使用的Trie树的过程中,也做了若干优化:

  1. 以query分词结果token作为基本粒度构建Trie树,即命中的实体提及必须是由1个或者多个token组成的,比如对于query“中国平安”,Trie树种存在人物名称“国平”,分词结果为[中国,平安],可以避免提取出 “国平”的情况。

  2. 我们对Trie进行了性能优化,通用的Trie都是以一个字典的嵌套层级结构,这种情况下往往存在数据稀疏的现象,即造成了内存消耗比较大,另一方面也降低遍历查询的效率,针对这些问题业界也有很多Trie树的变种,如DATrie(双数组字典树)、Radix Tree(基数树),我们使用Radix和普通Trie做了性能对比,在200万实体名称的数据规模情况下,Radix相比Trie可以减少一半的内存占用。

知识图谱构建下的自动问答KBQA系统实战

图3 Trie树和Radix压缩字符串对比

Trie树只能实现精确的根据实体名称的实体提及召回,而实际问答中用户的问题可能不包含完整的实体名称,这种情况下,需要根据NER模型抽取出Query中的实体,NER模型的候选结果和句法分析的候选名词短语构成模糊链接的词汇来源,并据此到ElasticSearch中进行检索,通过Es的文件检索,可以找到大部分具备和Query实体字符串相似的候选实体,通过可以对检索结果进行覆盖率、差异度、紧密度等各个维度对候选的结果进行相似性结果判断和过滤。除了使用NER去检索,业界也存在直接对图谱中的实体(描述)进行编码,使用向量检索去找到最相近的链接实体,感兴趣的读者可以参考相关文献和实践,在此就不再赘述。

知识图谱构建下的自动问答KBQA系统实战

表2 模糊链接相似性判断规则

除了实体链接,还需要对提取Query中其他的槽信息,具体的槽位信息和意图相关,比如对于“查询实体类型的总数”这个统计意图,槽位信息需要具体的实体类型(网点)、统计谓词(总数)。槽位从类型上可以分为模式槽信息(实体类型、关系类型、属性名)、属性条件槽(属性名、条件、条件值)、统计条件槽(统计谓语:总数、最大、最小、平均等)。属性条件槽、统计条件槽一般都属于复杂问题情形。对于类型名称、统计谓词,因为相对比较可枚举,也可以以类似字典树的方式从Query中提取。因为知识图谱中实体知识点粒度和相关组合等问题,会导致候选链接的结果会互相重叠。一般而言,链接到的实体提及越长,其语义也就越明确,可靠性也更高。因此我们采用最大区间覆盖优先的筛选方法,优先保留链接更大的结果。如下图所示,有限保留“Aegis分叉型覆膜支架及输送系统”的链接结果,而忽略“支架”、“覆膜”链接结果。

知识图谱构建下的自动问答KBQA系统实战
图4 多粒度下的实体提及识别

链接到多个实体提及或者槽需要进一步去除其中的歧义信息,例如Query:“平安银行的董事”,该问题为查询实体一度到达实体的问题,问题中的“董事”链接到董事(关系名称,企业->人物)和董事(人物名称)两个实体,对实体消岐的问题可以借助分类模型对Query 上下文进行分类判断,也可以借助知识图谱通过子图匹配的方法消除歧义。平安银行作为一个企业,通过董事关系可以查询一度实体;而董事作为一个人物,其一度的企业中无平安银行。通过槽位到子图的相关性打分,槽位组合[平安银行(企业),董事(关系名称)]比[平安银行(企业),董事(人物)]更加合理,优先选择更相关的组合作为槽提取的结果。


03


问答意图识别

KBQA的意图相比传统检索意图会更加的复杂,实际应用中,文本检索的意图一般定义为搜什么,可能会采用“玩具”、“外卖”、“电影”这种类别体系来区分, 比如“变形金刚的票价”其实搜的就是变形金刚的电影,而KBQA的意图因为答案的精准、直接特点,注定了KBQA的意图的粒度会更细、维度会更多,例如查询实体的属性、条件过滤的实体、统计类查询、对比查询等。

知识图谱构建下的自动问答KBQA系统实战

表3 常见的KBQA问答意图

问答意图可以通过模板匹配和基于神经网络的判别模型来识别。模板匹配通过系统内置的固定模板和自定义模板可以保证系统冷启动的基础问答效果。基于神经网络的意图判别模型需要在特定的图谱下大量的训练样本,例如使用fasttext等常见文本分类模型对Query进行意图分类。在垂直领域下,特别是用户的特定场景中,训练样本的生成和构造一直是一个较大的挑战,一种常见的方法就是配置问题模板,自动生成训练样本问题。比如对于意图“疾病的症状”,可以使用“${疾病名称|别名}的[症状|表现|症候]”模板,使用图谱的疾病实体,批量生成样本。分类模型相比模板匹配可以一定程度解决SPO一度问答问题的泛化问题。


结合问句分析的结果,从技术路线上主要可以分为基于检索排序的问答策略和基于语法解析的问答,基于排序检索的问答结合Query和问句分析的结果,找到图谱中若干个子图,然后对这些子图进行排序,返回Top结果作为答案;基于语法解析的策略则将Query转成成一个完成图查询语句,将执行该图查询语句的结果作为答案。


基于检索排序的问答策略

类似推荐系统的召回-排序两段策略,KBQA我们也可以利用问句分析的结果召回子图,然后计算Query和每个子图的相关性,返回Top子图。可以看出基于检索排序的问答策略回避了语法解析的难题,一般只需要问答-答案的标注数据采用端到端的训练即可,泛化能力较强。其中比较核心的问题在于档答案的表示形式。达观知识图谱问答系统结合知识图谱的模式,生成特定的答案文本形式。

基本的主要流程如下:

  1. 使用问句分析的实体,如“陆德明”,查询该实体的一度属性、一度实体、一度关系属性等三元组信息,谓词的判断特别重要,因此我们考虑生成只包含实体和谓词的候选三元组,即将O置空,(“陆德明出生日期”、“陆德明就职”);

  2. 将候选三元组信息作为整个文本串进行语义编码,如“陆德明出生日期”、“陆德明就职浦东支行”,因为整个三元组JOIN成了一个字符串,所以对图谱的模式设计也至关重要,对于[陆德明,就职,浦东支行]这个SPO,如果将关系设计的开始结束实体颠倒过来,则生成的候选串就缺乏语义了(浦东支行就职陆德明语法明显不合理);

  3. 将Query同样进行编码,计算向量距离作为相关性打分的判断依据。对于Query的编码同样也需要考虑链接的实体和实体提及的差异,如“Aegis的工序”,需要将Aegis替换成知识库中的实体名称,如“Aegis分叉型覆膜支架和输送系统的工序”,其和候选串“Aegis分叉型覆膜支架和输送系统工艺”的相似度更高,不容易被拒识。

知识图谱构建下的自动问答KBQA系统实战

图5 候选答案SPO生成

在实际的SPO一度问答应用中,谓词即是最核心意图。对于“陆德明的生日是哪天”,陆德明的属性谓词“出生日期”作为正样本,其他实体属性”家庭住址”、关系属性“就职”等都可以作为负样本,标签为0。如此在足够的样本情况下,可以训练一个分类模型,作为上述第3)步中的匹配模型。

以上策略降低了工程上实现的复杂度,但是因为需要编码和存储候选答案的语义编码,同时可能还需要费力收集负样本去构建一个文本语义匹配模型,因此还有一种有意思的策略是基于Seq2Seq + True(前缀树,压缩知识库的答案集合,约束Seq2Seq编码)的实现方式,可以避免语义编码和文本意义匹配模型的训练步骤。

基本步骤包括:

  • 使用Trie树压缩存储三元组;

  • 构造训练集,训练Seq2Seq模型,下图是基于roformer-sim


(参考:https://github.com/ZhuiyiTechnology/roformer-sim)

的Seq2Seq架构

知识图谱构建下的自动问答KBQA系统实战
图6 基于reformer-sim的seq2seq框架

最后在解码的过程中,通过Trie限定decode的输出范围,从而保证输出的三元组答案一定在库中。关于Seq2Seq + Trie的具体实现方式可以参看KgClue的一个baseline实现

(https://github.com/bojone/KgCLUE-bert4keras)


基于语法解析的问答策略

复杂问句因为往往需要从一个多实体多关系的子图推理而来,因此一般采用将问句通过语法分析的方式转换成特定的查询语句或者查询解析树(原理类似SQL的执行计划)。相比简单的一度属性关系查询,复杂的问答包括多跳问题、约束问题、统计问题等。

知识图谱构建下的自动问答KBQA系统实战

表4 复杂KBQA类型示例

因为是需要将Query转成查询语句,一般深度学习的做法是使用如BART等生成模型,生成对应的查询语句。这里介绍一下史佳欣团队KQA Pro(https://github.com/shijx12)的处理思路。通过将自然语言问题表示为基本函数组合而成的KoPL函数,函数运行的结果即为答案。KoPL中的函数包含FindALL、FilterSTR、Count等函数,函数存在相互输入输出的依赖,一个KoPL程序就是一个有向无环图。整个推理过程分为生成骨架和生成参数两个部分。骨架指定了执行的类型和顺序,参数指定了每个函数具体操作的输入。基于BART的KQA Pro的baseline目前可以达到90%左右,人类是97%。

知识图谱构建下的自动问答KBQA系统实战

图7  骨架解析器和参数解析器

基于Seq2Seq的生成查询语句实际落地过程中,往往由于人力、算力、可维护等各个角度,图谱的完整性刚开始阶段不是特别的好,缺乏足够多质量较高的训练样本,因此基于深度学习的方法很难直接就可以发挥作用。对于复杂推理问答仍然需要一套灵活可配置的接口定义,可以方便对规则和模板等进行管理。参考KoPL的设计,将基础查询封装成基础算子,可以快速配置出如下图所示的一个复杂意图。

知识图谱构建下的自动问答KBQA系统实战




垂直领域的问答应用


01


基于概念知识图谱的使用手册问答

概念图谱与实体图谱不同,它的实体是由一个个概念组成的,相应的概念和概念之间存在一定的语义关系。对于制度、手册类的场景,层次分明但很难提炼具体实例的场景比较适合构建概念图谱。概念图谱是将隐形的知识体系化、鲜明化,更好地捕捉到用户搜索的隐含意图,从而达到更精准反馈用户想要知识的目的。如下是将汽车使用手册拆分成分类层、原始概念、组合概念、意图层,实现知识最小粒度拆分的同时,满足复杂组合的意图解析。最后通过达观自然语言处理技术将手册进行知识结构化,并构建知识图谱。

知识图谱构建下的自动问答KBQA系统实战

图8 基于组合概念的汽车手册知识图谱

在知识问答处理过程中,根据用户输入问句,解析原子级最小颗粒度的概念,逐层推理出最可能的组合概念,也就是用户的真实意图,从而实现更加精准的意图分析和答案推荐。


02


基于失效知识图谱的根因关联

达观工业知识图谱从“人机料法环”等角度,将设备、人员、故障案例、工艺工序等数据构建知识图谱。输入失效模式、位置、现象等信息,通过智能问答语义分析引擎,可以将查询生成与之最匹配的子图,通过子图可以匹配到根本原因实体,如果子图链接不精准,支持对子图进行修改,子图越丰富,链接到的原因也就越精准。同时可以返回图谱关联的案例相关人员、相关排查解决措施等快速提高解决故障的效率。


知识图谱问答系统面临的困难

知识图谱问答系统总体上可以分为Pipeline和端到端两种方案,端到端的深度学习模型首先需要一个足够完整的图谱和基于这个图谱产生足够多的样本数据,而在实际项目中比较困难。相比较而言,实际落地过程中,Pipeline的方式会更可行,可以方便对每个过程或者步骤进行控制和定向优化,如添加业务词典去提高实体链接的精度等等。


中文知识图谱复杂问答目前很难自动化就获得一个较好的base效果,目前业界或多或少都会采用模板库的方式来解决特定问题。在垂直领域特定的图谱模式下,通过KBQA和推理可以体现出足够深度的专家经验,同时辅助一定结构化的数据降低图谱构建和维护的成本,这会是体现知识图谱问答价值的方式之一。



参考文章:


  1. https://huggingface.co/uer/roberta-base-chinese-extractive-qa


  2. https://zhuanlan.zhihu.com/kb-qa


  3. https://mp.weixin.qq.com/s/nN0aSXQN_IyjIJ1mRT5s3w


  4. https://mp.weixin.qq.com/s/8vz32-tLU6U1oYPErhbW0Q


  5. https://www.infoq.cn/article/ochiwf5rkuabdxm5s28x


  6. https://www.kexue.fm/archives/7427


  7. http://thukeg.gitee.io/kqa-pro/


  8. https://mp.weixin.qq.com/s/F-_qyHTsPtlrK77JgWidoA


作者简介

文辉,达观数据联合创始人,主要负责达观数据知识图谱方向产品和技术研发。同济大学计算机应用技术专业硕士,曾任职盛大文学数据中心和阅读集团数据中心核心研发工程师,负责智能推荐系统、数据挖掘和分析、分布式大数据平台、分布式爬虫系统的研发工作,在知识图谱、搜索推荐、自然语言处理、分布式平台架构设计等方面具备充足的研发和实践经验。

© 版权声明

知识图谱增强下的智能推荐系统与应用-于敬

AI人工智能2年前 (2022)发布 ash
0 0

知识图谱增强下的智能推荐系统与应用-于敬

随着互联网技术的迅速发展,尤其是移动互联网的兴起,新产生的信息呈现爆炸式的增长。为了更好地解决信息获取中的信息过载(Information Overload)和长尾问题(Long Tail),推荐系统应运而生,目前基本上已经成为了各种产品的标配功能。推荐系统是信息过滤系统的一个分支,它可以自动地挖掘用户和物品之间的联系。具体来说,它试图基于用户本身的多维度属性数据(如年龄、地域、性别等)以及行为数据的反馈(如点击、收藏、点赞、购买等),结合物品自身属性数据(如标题、标签、类别、正文等),以预测用户对待推荐物品的评分或偏好。从用户的角度来看,推荐系统是基于用户个人的兴趣偏好进行千人千面的自动推荐,则有助于缓解信息过载问题。从物品的角度来看,其自身属性及对应的交互行为差异,通过各种推荐方式是可以触达到对其更感兴趣的用户群体中,缓解了曝光不足带来的长尾问题。从企业的角度来看,推荐系统带来了更好的产品交互方式,达到了沉浸式体验的效果,从而进一步提升了用户的黏性,并最终大幅度提升了转化收益。

知识图谱增强下的智能推荐系统与应用-于敬
图1 达观智能推荐系统

在智能推荐ToB企业服务领域,达观数据已经有了10余年的推荐技术沉淀和上千家客户的行业应用实践经验。早在2012年的时候,由达观数据创始人陈运文博士带领团队参加了在伦敦举办的EMI数据黑客竞赛并获得了国际冠军,该竞赛主要是围绕音乐推荐场景,如何基于用户听歌行为等数据进行分析挖掘来对预测用户兴趣偏好并进行歌曲推荐。经过激烈鏖战,由他们开发的智能推荐系统对500万听歌用户的数据进行建模,根据每个用户的个性化兴趣偏好从数十万首歌曲库中为每个用户生成千人千面的歌曲推荐结果,推荐精度力克包括来自剑桥大学、牛津大学、密歇根大学等等的300多支参赛队伍,一举获得冠军。达观智能推荐基于前沿的人工智能和大数据分析挖掘技术,经过多年的产品打磨和持续的行业应用探索,累计服务客户数量达到了上千家。

(https://www.datagrand.com/products/recommend/)




基于过滤思想的推荐方法

经过多年的推荐系统理论发展,已经产生了三代主要的推荐系统。第一代推荐系统(1995-2005),主要包括三种方法:基于内容过滤的方法、基于协同过滤的方法和混合方法,技术上主要是规则统计和机器学习。第二代推荐系统(2003-2014),主要是基于时间、位置、用户组评分等特征上下文,对这一代推荐系统的研究目前仍在进行中。第三代推荐系统的研究更侧重在基于表示学习的语义模型以及在推荐过程中会有较多的关于知识组件的使用。


01


基于协同过滤的推荐方法

协同过滤方法(Collaborative Filtering,CF)是一种传统的推荐方法,体现的是群体智慧,它基于用户的兴趣偏好和与物品的历史交互行为进行推荐。这种方法可以分为基于记忆的方法和基于模型的方法。而基于记忆的方法可以分为两类:基于用户的(User-based CF)和基于物品的(Item-based CF)。基于内存的方法最流行的算法是KNN算法,该算法使用了一些传统的相似性度量,如 Pearson、Spearman、Cosine、Jaccard 等。另一方面,在基于模型的方法中,最常用的是矩阵分解(MF)及其变体(NMF、SVD)。目前,又出现了一些新的基于模型的协同过滤方法,如贝叶斯、基于聚类的、基于规则的和基于图的推荐方法。

协同过滤主要存在两个问题:当用户与物品之间的交互很少时用户数据的稀疏性,以及冷启动问题(新用户和新物品)。另外就是是传统的推荐技术没有利用推荐场景中的诸多语义信息、关键字关系和层次结构。


02


基于内容过滤的推荐方法

基于该方法的推荐系统通过学习和用户过去偏好的物品在内容特征方面比较相似的新物品进行推荐。这类方法可以分为基于案例推理(case-based reasoning)和基于属性(attribute-based)的技术。基于案例推理的技术主要是推荐与用户过去喜欢的物品高度相关的物品。相比之下,基于属性的技术基于将物品属性与用户属性相匹配来进行推荐结果生成。大多数基于内容过滤的推荐系统使用的模型包括:关键字匹配或向量空间模型(VSM)、基于词频-逆文档频率(TF-IDF)加权、主题建模等。

基于内容过滤的推荐方法,推荐出来的物品具有较高的文本相关性,同时可以很好的解释推荐结果,但是推荐出来的结果往往惊喜度较差,同时文本特征较为稀疏时也会影响相关性的计算。


03


基于人口统计信息过滤的推荐方法

该方法的主要思想是具有某些共同个人属性(性别、年龄、国家等)的用户也具有共同偏好这一事实。基于此,这些系统可以通过根据人口统计属性对用户进行分类来生成推荐结果。当物品的信息量很有限时,这些方法特别有用。该方法的一个优点是它不需要用户对基于内容和协同过滤方法所必需的物品进行评分或者有交互反馈。

然而,这种类型的推荐方式的主要问题,一是由于涉及安全和隐私问题,为用户收集完整的信息是不切实际的;二是该方法向相关人口统计群体的用户推荐相同的商品,个性化程度受限。


04


基于上下文感知过滤的推荐方法

该类推荐系统结合场景上下文信息进行推荐。这种方法假设当前推荐场景的上下文是用一组预定义的可观察属性定义的,其结构不会随着时间的推移而发生显着变化。所谓的上下文信息主要包括时间、位置或者其他人(如朋友、亲戚或同事)。这些上下文信息为推荐结果的生成提供了额外的信息,相对于仅考虑用户或者物品自身信息,会有更多的补充。


05


基于知识过滤的推荐方法

该类推荐系统主要是基于领域知识考虑如何推荐以满足用户的兴趣偏好。这些系统应该使用三种类型的知识:关于用户的知识、关于物品的知识以及关于物品与用户需求之间对应关系的知识。总体上来说,该方法主要是依靠知识图谱来为推荐系统更多的辅助信息以提升推荐精准度。后面会展开来详细介绍。


06


混合过滤的推荐方法

这些系统通常将协同过滤与内容过滤或协同过滤与任何其他推荐方法相结合进行推荐。结合的目标是利用每种方法的优势以提高整体系统性能和推荐效果。目前,一些关于混合方法的工作包括基于深度学习方法、贝叶斯网络、聚类、潜在特征和图结构等等。

近年来,基于深度神经网络的方法,如 DNN 、Wide & Deep、DeepFM在排序学习(Learn to Rank,LTR)方面取得了令人瞩目的表现。这些方法遵循嵌入(Enmbedding)和多层感知机(Multilayer Perceptron,MLP)范式,其中大规模稀疏特征首先嵌入到低维向量中,然后连接在一起输入多层感知器以学习特征之间的非线性关系。先进的LTR方法发现了从用户的历史行为中提取用户兴趣以进行排名的有效性。具体来说,DIN(Deep Interest Network)使用注意力机制从用户对候选物品的历史行为中学习用户兴趣的表示。DIEN(Deep Interest Evolution Network)使用循环神经网络来捕捉用户兴趣的演变。DMT(Method Deep Multifaceted Transformers)利用多个转换器对用户的不同行为序列进行建模。


总体上来说,推荐算法是推荐系统的核心元素。基于协同过滤的推荐方式是以交互数据中用户或物品的相似性对用户兴趣偏好进行建模,而基于内容过滤的推荐方法则主要是利用物品的内容特征。基于协同过滤的推荐系统已被广泛应用,因为它们可以有效地捕获用户偏好,并且可以在多种场景中可以快速方便的实现,而无需像基于内容过滤的推荐系统中提取各种特征。然而,基于协同过滤的推荐方法存在数据稀疏和冷启动问题。为了解决这些问题,已经提出了很多类型的混合推荐系统来统一交互级相似性和内容级相似性。在这个过程中,也探索了多种类型的辅助信息,例如物品属性、评论数据、用户的社交网络等等。实践证明,混合推荐系统通常可以获得更好的推荐结果,并且近年来越来越受欢迎。


知识图谱概述

知识图谱(Knowledge Graph,KG)是一种描述实体或概念并使用不同类型的语义关系将它们连接起来的结构。2012 年,Google提出术语“知识图谱”来指代语义知识在网络搜索中的使用,目的是提高搜索引擎的能力,增强用户的搜索体验。在“知识图谱”一词流行之前,DBPedia和其他链接数据集是由语义Web技术和Berners-Lee提出的链接数据设计问题生成的。如今,KG已经在业界获得了广泛关注并进行了大规模的系统应用。

在过去的数年中,越来越多的语义数据遵循关联数据原则,通过将来自不同主题领域的各种信息(如人、书籍、音乐、电影和地理位置)连接到一个统一的全球数据空间中来发布。这些异构的数据相互联系,形成了一个巨大的信息资源库,称为知识库。已经构建了几个典型的知识库,包括YAGO、NELL、DBpedia、DeepDive等学术项目,以及微软的Satori、谷歌的Knowledge Graph等商业项目。使用来自知识库的异构连接信息有助于深入了解单个领域的数据难以发现的问题。

以下是部分知识库介绍:

  1. Freebase是一个非常实用的并且可拓展的元组数据库系统,旨在成为世界知识的公共存储库。它的设计灵感来自广泛使用的信息社区,如语义网和维基百科。Freebase 中的数据是结构化的,通过协作创建的方式生成。它支持高度多样化和异构的数据,并具有高可扩展性。Freebase 目前包含125000000+ 元组、4000+类型和 7000+属性。MQL (Metaweb Query Language)作为一种对数据执行查询和操作的语言,通过基于HTTP协议的图查询(graph-query)API可以实现对Freebase的读写操作。MQL为Freebase中的元组数据提供了易于使用的面向对象的接口,它的产生旨在促进通过协作方式创建基于 Web 的面向数据的应用程序。

  2. DBpedia是从111种语言的维基百科版本中提取结构化数据来构建的一个大规模多语言知识库。从英文版维基百科中抽取的最大DBpedia知识库包含4亿多条事实数据,用于描述370万种事物。从其它的110个维基百科版本中抽取的DBpedia知识库总共包含14.6亿事实数据,描述1000万种额外事物。DBpedia将27种不同语言版本的维基百科信息框(infoboxes)映射到一个单一的共享本体中,该本体由320个类和1650 个属性组成。这些映射是通过世界范围内的众包工作创建的,从而可以很好的融合来自不同维基百科版本的知识。该项目定期发布所有DBpedia知识库以供下载,并通过本地DBpedia章节的全球网络提供对111种语言版本中的14 种语言版本的SPARQL查询访问。除了定期发布之外,该项目还维护一个实时知识库,该知识库会在维基百科中的页面发生更改时进行更新。DBpedia设置了2700万个RDF链接,指向30多个外部数据源,从而使来自这些源的数据能够与DBpedia数据一起使用。

  3. YAGO是由德国马普研究所研制的链接数据库。YAGO主要集成了Wikipedia、WordNet和GeoNames三个来源的数据。YAGO建立在实体和关系之上,目前包含超过 100 万个实体和 500 万个事实,1.2亿条三元组知识,包括 Is-A 层次结构以及实体之间的非分类关系,事实已自动从Wikipedia中提取并与 WordNet统一。YAGO将WordNet的词汇定义与Wikipedia的分类体系进行了融合集成,使得YAGO具有更加丰富的实体分类体系。YAGO还考虑了时间和空间知识,为很多知识条目增加了时间和空间维度的属性描述。

知识图谱本质上是一种基于图的数据结构,是一种揭示实体之间关系的语义网络。通俗来讲,就是把不同种类的信息连接在一起得到的一个语义关系网,知识图谱以结构化的方式描述客观世界,沉淀背景知识,将信息知识表示成更接近人类认识世界的形式,已经被广泛应用于搜索引擎、智能推荐、智能问答、语言理解、决策分析等领域。

知识图谱增强下的智能推荐系统与应用-于敬
图2 达观知识图谱功能展示

达观知识图谱,是达观数据公司面向各行业知识图谱应用而推出的新一代产品,其整合了知识图谱的设计、构建、编辑、管理、应用等全生命周期实现,基于客户的多源异构数据整合构建知识中台,可以实现从业务场景出发到生成图谱、再到实现基于图谱的应用,显著提高了各行业中知识图谱的落地效率和效果。


知识图谱和推荐系统

传统的推荐系统更多的是将用户和物品之间的显式或隐式反馈作为输入,这带来了两个问题:

  1. 在实际场景中,用户和物品之间的交互信息特别稀疏。例如,一个在线购物应用可能包含数十万的商品,而用户实际购买的商品数量可能仅有数百。使用如此少量的行为反馈数据来预测大量未知信息会显着增加算法过拟合的风险。

  2. 对于新用户和新物品的推荐,由于缺乏历史交互信息,系统推荐的精准度就会受到极大的负面影响。解决稀疏性和冷启动问题的一种常见方法是在推荐算法的输入中引入额外的辅助信息,例如用户属性、项目属性和上下文信息等等。

近年来,将知识图谱作为辅助信息引入推荐系统已经成为了工业界和学术界的研究热点。KG一方面可以提供丰富的领域知识作为补充信息来克服协同过滤和基于内容过滤的推荐方法所面临的问题;另一方面,推荐系统可以使用 KG 中存在的语义关系来提高其准确性并增加推荐物品的多样性。具体来说,KG 推荐利用了代表用户的实体、要推荐的物品及其交互之间的联系。推荐系统使用各种连接来识别目标用户可能感兴趣的物品集合。因此,复杂的关系表示为基于KG的推荐系统提供了额外的有价值的信息,以在节点之间应用推理来发现新的连接。相反,一般来说,基于特征向量的经典推荐方法会忽略这种连接,这可能会导致整体的推荐性能欠佳,尤其是在数据稀疏的情况下。


融入知识图谱的推荐系统

KG是一个异质图,节点表示实体,边缘表示实体之间的关系。物品及其属性可以映射到 KG 中,以表征物品之间的相互关系。此外,用户及其信息也可以集成到KG中,这就使得用户和物品之间的关系以及用户偏好可以更准确地捕获。

一般来说,基于KG的推荐方法,第一步需要构建KG,可以是物品知识图谱(Item Knowledge Graph,IKG),也可以是用户物品知识图谱(User-Item Knowledge Graph,UIKG)。

  1. 关于IKG。在IKG中,物品和他们关联的实体(如物品属性)作为节点,而边可以表示物品的属性级关系(如品牌、类别等),也可以表示为用户相关的关系(如“都浏览”、“都购买”)。

  2. 关于UIKG。在UIKG中,用户、物品和他们相关的实体都是节点,边可以表示用户和物品之间的关系(如点击、收藏、购买等)。

以IKG的构建为例,物品首先映射到外部 KG 以找到它们的关联实体,然后从 KG 中提取关联实体的多跳邻居,并形成推荐系统的子图。当然也可以不需要依赖外部KG,可以基于所提供的数据中的辅助信息来构建KG。

可解释的推荐系统是近年来的另一个热门研究方向。一方面,在推荐结果呈现的实现如果可以向用户提供适当的推荐解释,则用户可以相对更好地接受推荐结果。另一方面,也可以更深入地了解推荐算法。与传统的推荐系统相比,基于知识图谱的推荐系统呈现了连接用户和物品的多种实体和关系,并且能够很好地展示推理过程。

基于知识图谱的推荐方法,按照如何应用知识图谱数据,可以分为三类,分别是基于嵌入的方法、基于连接的方法和基于传播的方法。


01


基于嵌入的方法

基于嵌入(Enbedding-based)的方法主要思想是使用KG中大量的事实知识来进一步地丰富用户和物品的多维度表示,其中主要包括两大基础模块,一个是图嵌入模块,用于学习KG中实体和关系的表示,也就是需要应用知识图嵌入(Knowledge Graph Embedding,KGE)算法将KG编码为低秩嵌入,KGE算法可以分为两类:平移距离模型,如TransE、TransH、TransR、TransD等,以及语义匹配模型,如 DistMult。

另外一个是推荐模块,基于学习到的特征用于预测用户对物品的偏好。基于这两个模块在整个推荐框架中的关联方式的差异,基于嵌入的方法可以进一步细分为两阶段学习的方法、联合学习的方法和多任务学习的方法。该类方法面临的挑战包括如何使用合适的KGE方法以获得实体的嵌入表示以及如何将学习到的实体嵌入表示集成到推荐模块中。

知识图谱增强下的智能推荐系统与应用-于敬

图3 DKN框架



(1)两阶段学习方法


两阶段学习方法是指分别对图嵌入模块和推荐模块进行训练。第一步,使用KGE算法学习实体和关系的嵌入表示,接着,将预训练好的图相关嵌入连同其它的用户特征和物品特征输入到推荐模型进行用户兴趣预测。图3是用于新闻推荐的DKN(Deep Knowledge-aware Network)两阶段学习框架图。在第一阶段,提取新闻标题中的实体并将其映射到 Satori KG以挖掘新闻之间的知识级关系。DKN 通过将用KCNN学习到的句子的文本嵌入表示和通过TransD将新闻内容中的实体的知识级嵌入二者结合来对新闻进行建模。为了捕捉用户对新闻的动态兴趣,通过引入注意力机制,聚合用户的历史点击新闻的嵌入来学习用户的表示。


两阶段学习方法易于实现,其中 KG 嵌入通常被视为后续推荐模块的额外特征。另一个好处是可以在没有交互数据的情况下学习 KG 嵌入,因此,大规模交互数据集不会增加计算复杂度。此外,由于KG通常是稳定的,一旦学习好了嵌入表示,就没有必要频繁更新嵌入表示。但是,通过 KGE 模型优化的实体嵌入更适合于图内应用,例如 KG补全。由于 KGE 模块和推荐模块是松耦合的,因此学习到的嵌入也可能不适合后续的推荐任务。

知识图谱增强下的智能推荐系统与应用-于敬

图4 CKE推荐系统流程



(2)联合学习法


另一个趋势是以端到端(end-to-end)的训练方式联合学习(Joint Learning)图嵌入模块和推荐模块。这样,推荐模块可以指导图嵌入模块中的特征学习过程。CKE(Collaborative Knowledge Base Embedding)统一CF框架中的各种类型的辅助信息,包括物品的属性级特征、文本特征和视觉特征。属性级特征用TransR编码以从KG中学习结构知识,而文本特征和视觉特征用自动编码器进行提取。这三个特征学习模块的目标函数加上推荐模块共同学习模型参数。


联合学习方法可以进行端到端的训练,并且可以使用 KG 结构对推荐系统进行正则化。然而,在实际应用过程中,需要对不同目标函数的组合进行微调。

知识图谱增强下的智能推荐系统与应用-于敬

图5  MKR框架及交叉压缩单元示例



(3)多任务学习法


最近的一个研究方向是采用多任务学习(Multi-Task Learning)的策略,在KG相关任务的指导下训练推荐任务。动机是用户-物品交互二分图中的物品及其在 KG 中的关联实体可能共享相似的结构。因此,物品和实体之间低级特征的转移有助于促进推荐系统的改进。MKR(Multi-task feature learning approach for Knowledge graph enhanced Recommendation)由一个推荐模块和一个KGE模块组成。这两个模块不是将 KG 嵌入输入到推荐模块中,而是独立的,并通过交叉压缩单元进行连接以共享知识。推荐模块被训练以估计用户对候选物品的偏好,而KGE模块被训练来估计给定头部实体和三元组中的尾部实体表示。具体来说,推荐模块基于MLP以获得最终用户表示。最终的物品表示由L层交叉压缩单元及其在KG中的相关实体来进行细化。使用非线性函数估计用户对候选物品的偏好程度。


通过应用多任务学习策略,有助于防止推荐系统过拟合,提高模型的泛化能力。然而,与联合学习方法类似,它需要努力在一个框架下集成不同的任务。

综上,尽管两阶段学习方法易于实现,但学习到的实体嵌入可能不适合推荐任务,联合学习方法通过端到端训练学习优化的实体嵌入,多任务学习方法通过从KG相关任务中转移知识进一步提高模型的泛化能力。但是,它需要大量的实验来找到不同目标函数的最佳组合。


02


基于连接的方法

基于连接(Connection-based)的方法利用图中的连接模式来指导推荐。相关的大多数工作都使用UIKG来挖掘图中实体之间的关系。探索KG中的连接信息有两种主要方法。第一个方向是利用图中的元结构,包括元路径和元图,来计算实体之间的相似度。基于元结构的相似性可以作为用户和物品表示的约束,也可以用于预测用户对交互历史中相似用户或相似物品的兴趣偏好。第二种解决方案是将用户-物品对或物品-物品对之间的连接模式编码为向量,可以集成到推荐框架中。这种方法也叫基于路径嵌入的方法。这种方法的挑战包括:1)如何为不同的任务设计合适的元路径;2)如何对实体之间的连接模式进行建模。


(1)基于元结构的方法

基于元结构(Meta-structure based)的方法的一种实现是利用不同元路径中实体的连接相似性作为图谱正则化项来约束用户和物品的表示。其动机是基于元路径的实体相似度越高,则在潜在空间中越接近。

目标函数如式(1)所示:

知识图谱增强下的智能推荐系统与应用-于敬

其中LRec表示推荐系统的目标函数,常见的选择是矩阵分解。相似性约束LSim指导用户嵌入和物品嵌入的学习。为了度量图中实体之间的连接相似性,通常使用PathSim, 如式(2)所示:

知识图谱增强下的智能推荐系统与应用-于敬

其中Pm~n是实体m和n之间的一条路径。通常使用三种类型的实体相似性,具体如下:(a)用户-用户相似度,目标函数如式(3)所示:

知识图谱增强下的智能推荐系统与应用-于敬

其中||Ui-Uj||F表示矩阵 Frobenius 范数, ɵ=[ɵ1,ɵ2,…..ɵL]表示每个元路径的权重,U=[u1,u2,…,um]表示所有用户的潜在向量,S[1-(i,j)]表示用户i和j在元路径中的相似度得分。如果用户共享基于元路径的高相似性,则用户-用户相似性会迫使用户的嵌入在潜在空间中接近。

(b)物品-物品相似度,目标函数如式(4)所示:

知识图谱增强下的智能推荐系统与应用-于敬

其中 V=[v1,v2,…,vn]表示所有物品的潜在向量.与用户-用户相似度类似,如果物品的基于元路径的相似度很高,则物品的低秩表示应该是接近的。

(c)用户-物品相似度,目标函数如式(5)所示:

知识图谱增强下的智能推荐系统与应用-于敬

如果基于元路径的相似度很高,则用户-物品相似度项将迫使用户和物品的潜在向量彼此接近。


除了以上三种相似度的方法以外,基于元结构的方法也可以利用实体相似度来预测用户对未评分物品的兴趣,这可以作是KG中的偏好融合。

综上,上述方法首先从交互矩阵及其基于元结构的相互相似性中学习用户和物品的潜在向量,然后基于增强的表示进行预测。也可以直接使用相似用户评分的加权集合来预测对未评分项目的偏好。基于元结构的方法是可以解释的,因为这些手动设计的元结构通过匹配候选物品与交互物品或目标用户之间的元结构来为推荐系统提供更多参考信息。


基于元结构的方法易于实现,大多数工作都是基于模型复杂度相对较低的MF技术。然而,元路径或元图的选择需要领域知识,并且这些元结构对于不同的数据集可能会有很大差异。此外,在某些特定场景下可能不适合应用基于元结构的方法。例如,在新闻推荐任务中,属于一个新闻的实体可能属于不同的域,这使得元路径设计变得困难。



(2)基于路径嵌入的方法

基于元结构的方法的一个问题是连接模式没有明确建模,这使得很难学习用户-物品对和连接模式之间的相互影响。但是,基于路径嵌入的方法可以显式地学习连接模式的嵌入。通过学习连接UIKG中的用户-物品对或IKG 中的物品-物品对的路径的显式嵌入,以便直接建模用户-物品或物品-物品关系。以UIKG中的关系建模为例,假设KG中有K条连接ui和Vj的路径,路径p的嵌入表示为hp,则可以通过式(6)获得ui和Vj之间交互的最终表示:

知识图谱增强下的智能推荐系统与应用-于敬

其中g(∙)是从每个路径嵌入中汇总信息的函数,常见的选择是最大池化操作或加权求和操作。然后,ui和Vj的偏好可以通过式(7)建模:

知识图谱增强下的智能推荐系统与应用-于敬

其中f(∙)是映射用户-物品对之间的交互表示以及用户-物品对嵌入到偏好分数的函数。

推荐结果可以通过检查每个元路径的权重来解释。较高的元路径权重意味着目标用户和候选物品之间的这种关系在做出决策时更重要。

基于路径嵌入的方法将用户-物品对或物品-物品对的连接模式编码为潜在向量,从而可以考虑目标用户、候选物品和连接模式的相互影响.此外,大多数模型能够通过计算合适的路径并选择显著路径来自动挖掘连接模式,而无需预定义的元结构的帮助。因此,它很可能捕捉到富有表现力的连接模式。但是,如果图中的关系很复杂,则图中可能的路径数量可能会增长到很大。随意实际上,不可能利用大规模 KG 中每个实体对的所有路径,这可能会阻碍模型的性能。

综上,基于连接的方法在很大程度上依赖于连接模式。但是元路径的表示能力是有限的,这阻碍了传统的基于元结构的方法的性能。基于路径嵌入的方法进一步克服了基于元结构的方法的另一个缺点,即需要领域知识和人工配置路径。这些方法枚举可能的路径并显式建模用户-物品对或物品-物品对之间的关系。然而,基于路径嵌入的方法在一定程度上牺牲了可扩展性,因为这些模型相对复杂,在枚举路径和学习表示时需要更多的计算。


03


基于传播的方法

基于嵌入的方法利用知识图谱中的语义关系来丰富用户和物品的表示,但难以捕捉实体之间的高阶关系。基于连接的方法使用图中的连接信息来指导推荐,但是,通过将复杂的用户物品连接模式分解为单独的线性路径,不可避免地会丢失信息。为了充分利用 KG 中的信息,基于传播的方法集成实体和关系的表示以及高阶连接模式,以实现更个性化的推荐。基于传播的方法的主要想法是嵌入传播,其中常见的实现方式是基于 GNN 技术。这些方法通过聚合KG 中多跳邻居的嵌入表示来细化实体表示。然后,可以使用用户和潜在项目的丰富表示来预测用户的偏好。

根据在消息传播过程中细化的实体类型产的差异可以进一步的进行细分为三类。这种方法的挑战包括:

  1. 如何为不同的邻居分配适当的权重

  2. 如何在不同的关系边上传播消息

  3. 如何提高模型的可扩展性


(1)用户嵌入表示的细化


根据用户的交互历史细化用户嵌入表示。先是构建IKG使用多个关系将交互物品和候选物品连接起来。则用户可以表示为他们交互物品及其多跳邻居的组合。具体来说,交互历史中的物品被选为传播过程的种子。然后,沿图中的链接提取多跳三元组集合S[k-ui](k=1,2,…,H),其中S[1-ui]是三元组集(eh,r,et),头部实体是用户ui的交互过的物品列表。学习用户表示ui的过程可以表述为如下两步:

(a)通过聚合三元组集合S[k-ui](k=1,2,…,H)的每一层中的实体来计算用户的嵌入表示o[k-u]。

(b)合并o[k-u](k=1,2,…,H),得到最终的用户嵌入表示ou。

由于传播过程是从用户交互过的物品开始,到远邻结束,这个过程可以看作是在IKG中逐层向外传播用户的偏好。因此,这些方法可以解释为沿着 KG 中的路径从历史兴趣中传播用户的偏好。


在这些方法中,边权重在IKG 中是明确的。因此,可以选择连接候选物品和交互项目的显著路径,并作为推荐结果的解释。尽管这些工作同时利用了实体嵌入和高阶连接信息,但只有用户嵌入表示在传播过程中得到更新。



(2)物品表示的细化


上面介绍了通过在图中向外聚合实体来优化用户嵌入表示。另一种方式是通过聚合项目Vj的多跳邻居N[k-u](k=1,2,…,H)在IKG中向内的嵌入表示来学习候选物品Vj的高阶表示。在向内传播过程中,采用图注意力机制,其中不同邻居的权重是由用户和关系来确定的。主要是考虑到用户对不同的关系是有不同的偏好的,从而可以确定KG的信息流。

每一轮传播过程表示为如下两步:

(a)通过式(8)聚合实体ei的近邻:
知识图谱增强下的智能推荐系统与应用-于敬

(b)使用h—1阶邻居嵌入和自嵌入更新实体的h阶表示,如式(9)所示:

知识图谱增强下的智能推荐系统与应用-于敬

其中e[0-i]代表实体的初始表示,e[h-i]代表实体的h阶表示,它是实体初始表示和来自h跳邻居的表示的混合。聚合函数将N个邻居映射到向量∈Rd,更新函数g(∙)是一个非线性函数:Rd ⨉ Rd → Rd。通过迭代地重复这个过程H次,候选物品的表示则包含了来自H跳邻居的信息。

综上,通过IKG中的向内传播来细化物品的嵌入表示。然而,类似于在 KG 中向外聚合的用户细化,只有一种类型的实体被细化。


(3)用户和物品表示的细化


在UIKG中的传播过程中,用户、物品及其关联实体都连接在一个图中,用户-物品对之间的交互作为一种关系。用户嵌入和物品嵌入可以在传播过程中使用其对应的邻居进行细化,如式 (8) 和 (9) 所示。


与IKG中的传播类似,UIKG中边的权重也是由用户确定的。因此,这些模型可以通过检查连接目标用户和候选物品的显著路径来为推荐结果提供解释。由于用户被合并为一种类型的节点,因此解释更加直观,因为每个交互物品的贡献都是可用的。通过将用户纳入KG,可以更大程度地探索高阶连接模式。缺点是图中的关系越多,会带来不相关的实体,可能会误导用户在聚合过程中的偏好。

综上,基于传播的方法通常计算成本高。随着图变大,模型变得难以收敛。为了提高效率,可以使用更快的图卷积运算,并且通常在每一层中应用邻域采样。但是,随机抽样不可避免地会导致信息丢失,无法充分挖掘图中的知识。


04


基于KG的推荐方法总结

通过上述基于嵌入方法、基于连接方法和基于传播方法的介绍,可知基于嵌入的方法是最灵活的方法。一方面,使用KGE模块对KG进行编码相对容易,并且学习到的嵌入可以自然地融入到用户表示或项目表示中。而在基于连接的方法中,在图中定义元路径或元图可能很繁琐。对于基于传播的方法,需要仔细设计聚合和更新部分。另一方面,基于嵌入的方法适用于大多数应用场景,因为外部知识通常在不同的任务中可用。相反,在基于元结构的方法中,元路径对于不同的应用场景通常是多种多样的,并且不能泛化到新的数据集。此外,对于特定场景,如新闻推荐,很难定义元路径并应用基于元结构的方法。同时,基于路径嵌入的方法和基于传播的方法都不适用于具有大规模数据集的推荐场景,因为在枚举路径和邻居时计算复杂度可能会变得很大。此外,路径的质量和数量对于基于连接的方法至关重要,因此,稀疏数据集可能无法提供足够的路径来挖掘此类方法的关系和模型兴趣。然而,基于嵌入的方法和基于连接的方法都未能充分探索KG中的信息。近年来,随着GNN技术的发展,基于传播的方法已成为一种新的研究趋势。此外,基于连接的方法和基于传播的方法都可以用KG中的路径来解释,而基于嵌入的方法解释起来不太直观。


基于KG推荐的可解释性

KG中包含有大量的辅助信息可以用于推荐结果的解释,主要有以下几种方法:


01


关系嵌入的注意机制

这种方法主要应用于基于嵌入的方法。注意力机制应用于KG中实体之间关系的嵌入。从不同关系的注意力权重,可以得到每类物品属性对目标用户的意义。因此,这种技术可以为推荐提供偏好级别的解释。


02


定义元路径或者元图

所选物品与目标用户或交互物品之间的关系可以分解为若干元路径或元图的组合。通过将元路径或元图转换为可理解的规则,系统可以提供解释。


03


路径嵌入的注意机制

对于路径嵌入方法,连接目标用户和候选物品的特定路径的权重可通过注意力机制获得。每条路径的权重可以代表每条路径对用户的相对重要性。因此,可以根据图中的显著路径来提供解释。


04


UIKG中的强化学习

通过使用强化学习技术在UIKG中训练代理,可以挖掘连接用户物品对的实际路径。它可以直接显示KG中的推理过程,而不是为已经选择的推荐结果寻找事后解释。因此,推理过程对于目标用户来说是精确且值得信赖的。


05


提取边缘权重

基于传播的方法需要在聚合过程中为每种类型的邻居分配用户特定的权重。边权重控制图中实体之间的信息流,可以反映KG中每种关系的重要性。此外,KG中实体之间的边权重也可以从注意力权重或学习关系矩阵中获得。因此,可以通过找到连接候选物品和目标用户的显著路径或多跳邻居中的交互物品来生成解释。


未来展望

通过前面的介绍可以知道,基于KG的推荐系统在推荐精准度和推荐结果可解释性方面具有诸多优势。在学术界和工业界也已经提出了很好的模型以充分利用KG中的辅助信息进行个性化精准推荐。但是在一些方向上依然还有很多工作值得深入研究,主要体现在:


01


动态推荐

尽管具有GNN或GCN架构的基于KG的推荐系统取得了良好的性能,但训练过程非常耗时。因此这样的模型可以被视为静态偏好推荐。然而,在某些场景下,例如在线购物、新闻推荐等,用户的兴趣会很快受到社交事件等的影响。在这种情况下,使用静态偏好建模的推荐可能不足以理解实时兴趣。为了捕捉动态偏好,利用动态图网络可能是一种解决方案。


02


跨域推荐

在跨领域推荐的也有一些研究进展,主要是交互数据在各个领域是不平衡的。例如,在亚马逊平台上,图书子集大于其他域。通过迁移学习技术,可以共享来自具有相对丰富数据的源域的交互数据,以便在目标域中进行更好的推荐。


03


知识增强语言表示

为了提高各种 NLP 任务的性能,有一种趋势是将外部知识集成到语言表示模型中,使知识表示和文本表示可以相互提炼。将知识增强文本表示策略应用于基于文本的推荐任务中,可以更好地进行表示学习,以提供更准确的推荐。


参考文献



[1] Bollacker K, Evans C, Paritosh P, et al. Freebase: a collaboratively created graph database for structuring human knowledge[C]//Proceedings of the 2008 ACM SIGMOD international conference on Management of data. 2008: 1247-1250.


[2] Lehmann J, Isele R, Jakob M, et al. Dbpedia–a large-scale, multilingual knowledge base extracted from wikipedia[J]. Semantic web, 2015, 6(2): 167-195.


[3] Suchanek F M, Kasneci G, Weikum G. Yago: a core of semantic knowledge[C]//Proceedings of the 16th international conference on World Wide Web. 2007: 697-706.


[4] Bordes A, Usunier N, Garcia-Duran A, et al. Translating embeddings for modeling multi-relational data[J]. Advances in neural information processing systems, 2013, 26.


[5] Wang Z, Zhang J, Feng J, et al. Knowledge graph embedding by translating on hyperplanes[C]//Proceedings of the AAAI conference on artificial intelligence. 2014, 28(1).


[6] Lin Y, Liu Z, Sun M, et al. Learning entity and relation embeddings for knowledge graph completion[C]//Twenty-ninth AAAI conference on artificial intelligence. 2015.


[7] Ji G, He S, Xu L, et al. Knowledge graph embedding via dynamic mapping matrix[C]//Proceedings of the 53rd annual meeting of the association for computational linguistics and the 7th international joint conference on natural language processing (volume 1: Long papers). 2015: 687-696.


[8] Yang B, Yih W, He X, et al. Embedding entities and relations for learning and inference in knowledge bases[J]. arXiv preprint arXiv:1412.6575, 2014.


[9] Zou X. A survey on application of knowledge graph[C]//Journal of Physics: Conference Series. IOP Publishing, 2020, 1487(1): 012016.


[10] Q. Guo et al., “A Survey on Knowledge Graph-Based Recommender Systems,” in IEEE Transactions on Knowledge and Data Engineering, vol. 34, no. 8, pp. 3549-3568, 1 Aug. 2022, doi: 10.1109/TKDE.2020.3028705.


[11] Chicaiza J, Valdiviezo-Diaz P. A comprehensive survey of knowledge graph-based recommender systems: Technologies, development, and contributions[J]. Information, 2021, 12(6): 232.


[12] Choudhary S, Luthra T, Mittal A, et al. A survey of knowledge graph embedding and their applications[J]. arXiv preprint arXiv:2107.07842, 2021.


[13] Gao Y, Li Y F, Lin Y, et al. Deep learning on knowledge graph for recommender system: A survey[J]. arXiv preprint arXiv:2004.00387, 2020.


[14] Wang H, Zhang F, Xie X, et al. DKN: Deep knowledge-aware network for news recommendation[C]//Proceedings of the 2018 world wide web conference. 2018: 1835-1844.


[15] Zhang F, Yuan N J, Lian D, et al. Collaborative knowledge base embedding for recommender systems[C]//Proceedings of the 22nd ACM SIGKDD international conference on knowledge discovery and data mining. 2016: 353-362.


[16] Wang H, Zhang F, Zhao M, et al. Multi-task feature learning for knowledge graph enhanced recommendation[C]//The world wide web conference. 2019: 2000-2010.


作者简介

于敬,达观数据联合创始人,搜索推荐图谱产品团队的总负责人。同济大学计算机硕士,上海市青年科技启明星、上海市五一劳动奖章、上海市职工优秀创新成果奖、ACM CIKM算法竞赛国际冠军等奖项荣誉获得者。国际计算机学会(ACM)会员、中国计算机学会(CCF)高级会员、上海计算机学会(SCS)会员。曾先后在盛大创新院、盛大文学和腾讯文学从事技术研发工作,在智能推荐、搜索引擎、机器学习、大数据技术等领域有丰富的研究和工程经验,拥有十余项授权专利。

© 版权声明

一文详解BERT模型实现NER命名实体抽取

AI人工智能2年前 (2022)发布 ash
0 0

一文详解BERT模型实现NER命名实体抽取

在自然语言处理和知识图谱中,实体抽取、NER是一个基本任务,也是产业化应用NLP 和知识图谱的关键技术之一。BERT是一个大规模预训练模型,它通过精心设计的掩码语言模型(Masked Language Model,MLM)来模拟人类对语言的认知,并对数十亿个词所组成的语料进行预训练而形成强大的基础语义,形成了效果卓绝的模型。通过 BERT来进行实体抽取、NER的方法是当前在NLP和知识图谱的产业化应用中最常用的方法,是效果与成本权衡下的最佳选择。本文详细讲解使用BERT来进行实体抽取,看完本文就会用当前工业界最佳的模型了。


什么是实体抽取?


实体是一个常见的名词,《知识图谱:认知智能理论与实战》一书将其定义为:


实体(Entity):是指一种独立的、拥有清晰特征的、能够区别于其他事物的事物。在信息抽取、自然语言处理和知识图谱等领域,用来描述这些事物的信息即实体。实体可以是抽象的或者具体的。




在实体抽取中,实体也成为命名实体(Named Entity),是指在实体之上会将其分门别类,用实体类型来框定不同的实体。图1是一些常见的“实体”的例子,比如“城市”类型的实体“上海”,“ 公司”类型的实体“达观数据”等。

一文详解BERT模型实现NER命名实体抽取

图1 实体示例

实体抽取(Entity Extraction,EE)的目标就是识别一段文本中所包含的实体,在其他语境中,也被称之为“实体识别(Entity Recognition,ER)”、“命名实体识别(Named Entity Recognition,NER)”,这些不同的名词在大多数情况下所指代的意思是一样的。

举例来说,有一段文本:



达观数据







同济大学



联合共建的“



知识图谱与语义计算联合实验室



”正式揭牌成立

识别出其中的蓝色部分,并标记为“机构”类型的实体,就是实体抽取。实体抽取的过程通常可以分为是两个阶段:

  1. 识别出所有表示实体的词汇

  2. 将这些词汇分类到不同实体类型中

在传统的命名实体识别任务中,通常有人物、机构、地点等。而在知识图谱中,实体类型可以有数十种,甚至数百种。对于知识图谱来说,将各种文本中的实体抽取出来是最基本的任务,有许多方法都致力于解决这个问题。

一文详解BERT模型实现NER命名实体抽取
图2 实体抽取案例

众所周知,实体抽取的复杂程度十分之高,这不仅仅有上图中的这样复杂的文档的原因,语言本身的理解也存在重重困难,有些场景下即使是人类也会出现不解之处。比如语言中隐含着专业的背景知识,隐形或显性的上下文语境,同样的文本表达着完全不同的概念,而相同的概念又有多变的语言表达方法等等。这些综合的原因使得理解语言成为了人工智能皇冠上的明珠,而从文本中抽取实体则不可避免地要理解语言,实体抽取的效果则依赖于对语言理解的程度。

一文详解BERT模型实现NER命名实体抽取
图3 语言理解困难重重

历史上,用来进行实体抽取的方法包括基于规则的方法、机器学习方法、深度学习方法和弱监督学习方法等几大类,每类方法中都有很多种不同的算法,具体的算法内容可以参考《知识图谱:认知智能理论与实战》第三章《实体抽取》(P78~136)。


BERT介绍

BERT 是英文“Bidirectional Encoder Representations from Transformers”的缩写,是Google开发的一种基于Transformer的深度学习技术,用于人工智能领域的文本预训练。BERT 由Jacob Devlin和他在 Google 的同事于 2018 年创建,并在论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》中发布。在2019 年,谷歌宣布已开始在其搜索引擎中使用 BERT,到 2020 年底,它几乎在搜索查询中都使用了 BERT。在2020 年的一篇论文《”A Primer in BERTology: What We Know About How BERT Works”》中提到“In a little over a year, BERT has become a ubiquitous baseline in NLP experiments and inspired numerous studies analyzing the model and proposing various improvements. The stream of papers seems to be accelerating rather than slowing down, and we hope that this survey helps the community to focus on the biggest unresolved questions.”自从 BERT 出来以后,也引导了至今炙手可热的“大模型”浪潮。其本质就是“预训练”+“微调”:

一文详解BERT模型实现NER命名实体抽取


图4 BERT模型,来自参考文献[2]

对于普罗大众来说,人工智能的标志性事件当属AlphaGo,号称人类最难的智力游戏败于机器,可是街头巷尾的谈资。

在自然语言处理领域,BERT在当时的自然语言处理领域可谓掀起轩然大波,总结起来有:

  1. 在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人成绩,首次两个衡量指标上全面超越人类,并且还在11种不同NLP测试中创出最佳成绩。


    关于 SQuAD数据集和评测参考https://rajpurkar.github.io/SQuAD-explorer/,当前是2.0版本。

  2. 谷歌团队成员Thang Luong表示,BERT模型开启了NLP的新时代

  3. 证明了通过大规模语料集预训练的技术,能够大幅度提升各类文本阅读理解的效果,也因此,“大模型”自此兴起

  4. Masked LM(见下图)通过学习masked的词,不仅让模型学会了上下文信息,还学会了语法syntax、语义semantics、语用pragmatics等,并能够很好地学会部分领域知识

  5. 预训练模型越大,效果越好;对应的,成本也会越高。相比于单任务模型来说,无监督的预训练模型成本要大1000倍以上

  6. 学术界传统上认为,在一些很难处理的文字阅读理解任务上,计算机有望能够全面超越人类

一文详解BERT模型实现NER命名实体抽取

图5 掩码语言模型

掩码语言模型的提出则来自于Google 的更早些的一篇论文《Attention Is All You Need》(下载地址:https://arxiv.org/pdf/1706.03762.pdf) 所提到的 Transformers 模型(见下图)。但 BERT 与 Transformers 略有区别,使用的是其编码器部分,这点从BERT 的论文标题也可以看出来。事实上,当前炙手可热的大模型中(如 GPT-3等),几乎都依赖于 Transformers 的模型结构,特别是其中的自注意力机制。《知识图谱:认知智能理论与实战》一书 P123~130的“BERT 模型详解”一节则对结合代码实现该BERT 的模型结构进行详细的解析,通俗易懂,非常适合阅读来深入理解BERT 模型。上述两篇论文则提供了更多的实验对比素材,深入阅读有助于了解BERT 为何会在当时引起轰动,以至于在NLP领域引领风骚数年。

一文详解BERT模型实现NER命名实体抽取
图6 Transformer模型结构

此外值得一提的是,Google最初 发布的 BERT 模型有两种配置:

  1. BERT BASE:12 个编码器,带有 12 个双向自注意力头;

  2. BERT LARGE:24 个编码器,带有 16 个双向自注意力头。

这两种配置结构类似,Large版本要比Base版本“更大”,效果自然更好,同时使用时资源要求也更高。本文以Base版本示例,以使得在一张显卡上即可完成。换成 Large 版本不用改变任何代码,但因为网络更大,可能需要更高级的显卡或多卡来支持模型的训练。


语料准备

本文采用“MSRA实体抽取数据集”,并使用BIO标记方法来标记,数据集在GitHub 上有很多,也可以GitHub官网下载。


(https://github.com/wgwang/kgbook/tree/main/datasets/NER-MSRA)

MSRA数据集中,实体类型有三种:

  1. LOC:地点类型

  2. ORG:机构类型

  3. PER:人物类型

一个例子为:

1 O

、 O

中 B-ORG

国 I-ORG

作 I-ORG

协 I-ORG

和 O

现 B-LOC

代 I-LOC

文 I-LOC

学 I-LOC

馆 I-LOC

负 O

责 O

人 O

在 O

巴 B-PER

金 I-PER

家 O

中 O

介 O

绍 O

文 B-LOC

学 I-LOC

馆 I-LOC

新 O

馆 O

设 O

计 O

模 O

型 O

。O

从上述例子可以看出:1.“中国作协”是组织机构(ORG)类型:


  • B-ORG

    标签:因为它是一个

    机构实体

    的开始

  • I-ORG

    标签:因为它是一个

    机构实体

    的延续

2. “现代文学馆”和“文学馆”是地点(LOC) 类型:


  • B-LOC

    标签:因为它是

    地点实

    体的开始

  • I-LOC

    标签:因为它是

    地点实体

    的延续

3.“巴金”是任务(PER) 类型:


  • B-PER

    标签:因为它是

    人物实体

    的开始

  • I-PER

    标签:因为它是

    人物


    实体

    的延续

4.其他词被分配

O

标签:因为它们

不是任何实体

使用 BERT 来进行实体抽取的话,需要将语料进行处理,转化成列表的形式(train_data和test_data,对应于原始的train.txt 和test.txt),列表的每一个元素是一个键值对元组,键为文本列表,值为标签列表。如下图所示:

一文详解BERT模型实现NER命名实体抽取
图7 数据样例


用BERT进行实体抽取

这里使用最流行的 PyTorch 框架来实现。首先是引入相关的库。


一文详解BERT模型实现NER命名实体抽取

这里选择的是Google发布的模型bert-base-chinese

(https://huggingface.co/models 提供了大量的模型供使用,包括各种专业的预训练模型,比如面向金融领域 FinBERT,面向医药领域的 MedBERT等等)

BERT_NAME = ‘bert-base-chinese’


转化为torch能够使用的数据集

一文详解BERT模型实现NER命名实体抽取

再用如下代码将torch 的 dataset转化为按微批提取的 dataloader:

一文详解BERT模型实现NER命名实体抽取

到此,数据准备完成,后面就可以使用数据集来训练模型和测试模型效果了。


构建模型

在本文中,我们将使用来自HuggingFace的预训练 BERT 基础模型。既然我们要在token级别对文本进行分类,那么我们需要使用BertForTokenClassificationclass。

BertForTokenClassificationclass是一个包装 BERT 模型并在 BERT 模型之上添加线性层的模型,将充当token级分类器。基于BertForTokenClassificationclass来创建基于 BERT 的实体抽取模型非常简单,见下面代码:

一文详解BERT模型实现NER命名实体抽取

通过如下代码即可实例化一个用BERT进行实体抽取的模型:

model = BertModel(len(label2id)+1)


训练

我们的BERT模型的训练循环是标准的PyTorch训练循环。在训练模型中,需要使用 GPU,否则会非常耗时。GPU建议使用nvidia的显卡提供,1080ti及其更高版本皆可。

model = model.cuda()

由于BERT已经使用了大规模语料训练并得到了通用的语义表示,通常使用的话,仅需要重新微调最上面一层即可。为此,需要冻结其他不需要训练的层的参数。下面代码实现了这个逻辑:

一文详解BERT模型实现NER命名实体抽取

接下来就是常见的深度学习训练方法了,这里使用AdamW优化器,其他优化器也可以根据需要进行选择,具体的参考PyTorch的官方文档。

lr = 0.00005

optimizer = torch.optim.AdamW(optimizer_grouped_parameters, lr=lr)

下面是具体的训练代码:

一文详解BERT模型实现NER命名实体抽取


在测试数据上评估模型

现在我们已经训练了用于抽取实体的BERT模型。在前面数据集准备中还有测试集,这里可以使用测试集来看效果:






一文详解BERT模型实现NER命名实体抽取

另外,上述的效果评估是比较简单的,实际应用中还可以使用更为精细的评估方法,比如按所抽取的实体来评估的方法。更多的用于评估实体抽取的方法可参考《实体抽取:如何评估算法的效果?》 一文。


(https://mp.weixin.qq.com/s/STS8N1PBML_2BvkO5NfiXg)


结论

本文介绍了全面介绍了如何使用BERT进行实体抽取,并给出了代码实例。通过本文,读者可以很方便地“依瓢画葫芦”实现一个基于BERT模型的实体抽取程序,从而学会工业界中最好用的实体抽取模型,并将其应用到学习或工作当中。

具体来说,本文内容包括:

  1. 介绍了什么是实体抽取

  2. 介绍了什么是 BERT

  3. 用代码实例介绍了如何使用 BERT 进行实体抽取的完整过程,这包括四个内容:

  • 准备数据

  • 构建模型

  • 训练模型

  • 测试模型效果


参考文献


  1. Ashish Vaswani etc., Attention Is All You Need, arxiv: 1706.03762, 2017

  2. Jacob Devlin etc., BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, arxiv:1810.04805, 2018

  3. Anna Rogers etc., A Primer in BERTology: What We Know About How BERT Works, arxiv:2002.12327 2020

  4. 王文广,  知识图谱:认知智能理论与实战, 电子工业出版社, 2022






作者简介

王文广,达观数据副总裁,高级工程师,《知识图谱:认知智能理论与实战》作者,曾获得上海市计算机学会科技进步奖二等奖和上海市浦东新区科技进步奖二等奖,专注于自然语言处理、知识图谱、图像与语音分析、认知智能、大数据和图分析等方向的技术研究和产品开发。现在是上海市人工智能标准化技术委员会委员,上海科委评审专家,中国计算机学会(CCF)高级会员,中文信息学会(CIPS)语言与知识计算专委会委员,中国人工智能学会(CAAI)深度学习专委会委员。申请有数十项人工智能领域的国家发明专利,在国内外知名期刊会议上发表有十多篇学术论文。曾带队获得国内国际顶尖算法竞赛ACM KDD CUP、EMI Hackathon、“中国法研杯”法律智能竞赛、CCKS知识图谱评测的冠亚季军成绩。在达观数据致力于将自然语言处理、知识图谱、计算机视觉和大数据技术产品化,以OCR、文档智能处理、知识图谱、RPA等产品服务于金融、智能制造、贸易、半导体、汽车工业、航空航天、新能源、双碳等领域。

© 版权声明

RPA界面元素智能自适应定位与操控技术-金克

AI人工智能2年前 (2022)发布 ash
0 0

RPA界面元素智能自适应定位与操控技术-金克

什么是RPA?RPA(Robotic Process Automation,机器人流程自动化)是通过特定的、可模拟人类在计算机界面上进行操作的技术,它可以按规则自动执行相应的流程任务,代替或辅助人类完成相关的计算机操作,从而节约人力成本,提高生产效率。

从RPA的定义就可以看出,对计算机界面的操控是RPA的核心之一。要实现对计算机界面的操控,就必须用到RPA界面元素定位和操控技术。


元素定位与操控技术

界面元素是指用于构建系统或应用程序的所有图形用户界面部分,例如窗口、输入框、按钮等。通过显示器、键盘、鼠标等计算机外部设备,人能够实现在指定输入框输入文本、点击指定按钮等操作,和操作系统以及业务系统进行交互。同样的,RPA要代替人完成这些操作,就需要能够定位和操控这些界面元素。

界面元素定位与操控方法有很多,主要区别在于是否使用GUI(Graphical User Interface, 图形用户接口)自动化技术。非GUI自动化技术有:绝对坐标定位、图像匹配定位、基于消息操作、模拟键鼠操作等。GUI自动化技术有:Win32、MSAA、UIA、JAB、SAP、Citrix Virtual Channel、RDP Virtual Channel、Selenium、Chrome Extension等。通常来说,GUI自动化技术能获取到的界面元素的信息更多,支持的操作也更多,但同时局限性也更大,一种GUI自动化技术往往只支持几个界面元素框架,实际使用起来也会更困难。

下面列举几种常用的自动化技术并给出优缺点分析。


01


绝对坐标定位

绝对坐标,是指屏幕中固定的坐标位置,当界面元素总是处于屏幕中固定坐标位置时,就可以使用绝对坐标来进行定位。这个方法非常简单方便,在特定场景下非常好用。但是一般要求屏幕分辨率和应用窗口大小固定,而且无法保证定位到的界面元素是否正确。


02


图像匹配定位

图像匹配,在待匹配图像中寻找与目标图像相似性高的单个或多个目标,并获取目标的坐标位置。图像匹配可以和绝对坐标定位相结合,先使用绝对坐标定位,再用图像匹配做校验;也可以先划定屏幕中的某个区域,在此区域内进行图像匹配,以达到提高准确率、加速匹配过程的目的。

图像匹配的方法非常多,模板匹配使用空间二维滑动模板进行匹配,将目标图像在待匹配图像中滑动;特征匹配提取图像的特征,再生成特征描述子,最后根据描述子的相似程度对两幅图像的特征之间进行匹配;深度学习也可用于图像匹配之中,例如,使用OCR技术可以定位到包含指定文本的图像。


03


基于消息操作

这里的消息指的是操作系统的消息。Windows 是一个消息驱动的系统,Windows的消息提供了应用程序之间、应用程序与Windows 系统之间进行通信的手段。通过对应用程序窗口发送特定的消息,可以实现对指定界面元素的点击输入等操作。

RPA界面元素智能自适应定位与操控技术-金克
图1 Windows消息机制


04


模拟键鼠操作

模拟键鼠可分为消息模拟、API模拟、驱动模拟三种。消息模拟基于windows的消息机制,向目标窗口发送键鼠消息。API模拟就是用Windows提供的API实现模拟输入。驱动模拟就是通过驱动程序,在系统内核里面操作I/O端口,给连接键盘的集成电路发送指令,让它产生一个按下按键的信息,这样你的模拟输入对于所有程序来说就是从一个真实的设备发出的。


05


Win32 API

Win32 API是微软第一代应用程序可访问API。Win32 API出现在.NET之前,是底层的Windows API。它支持MFC、VB6、VCL、简单的WinForms等窗体。

Win32自动化技术基于HWND(窗口句柄),一般需要通过 FindWindow、 EnumWindows 来查找目标窗口的句柄,然后再调用其它 API,例如 GetWindowText、GetWindowRect等来获取窗口属性,以此来定位目标元素。定位到目标元素之后,可以通过Win32 API实现对目标元素的操控。例如使用SetWindowText来设置显示的文字,使用SetActiveWindow来激活窗口等。


优点


  • 对标准Windows控件支持良好


缺点


  • 过于底层,调用复杂

    。例如:Win32 API查询窗体需要逐层获取窗体句柄进行遍历查找


  • 技术落后,用途不广

    。例如:Win32 API对新UI框架以及自定义控件的支持很差。


06


MSAA

MSAA(Microsoft Active Accessibility)是微软第二代应用程序可访问API。MSAA旨在帮助辅助技术产品与应用程序(或操作系统)的标准和自定义用户界面元素进行交互。它支持WFC、VB6、VCL、WinForms、WPF等窗体。

MSAA 主要基于 COM 技术。提供信息的应用程序被称为 Server;获取信息的应用程序被称为Client。首先Client调用AccessibleObjectFromWindow传入Server窗口的HWND。

然后AccessibleObjectFromWindow函数向Server发送WM_GETOBJECT消息。Server创建并实现了IAccessible,之后通过LresultFromObject 把IAccessible 返回给Client。最后Client调用IAccessible定位和操作Server中的界面元素。


优点


  • 相较Win32 API更简单易用

    。使用者只需要和 IAccessible 进行交互,也不需要直接使用windows消息来操作目标元素。


  • 相较Win32 API支持了部分自定义控件

    。前提是开发人员在实现自定义控件的同时实现了 IAccessible 的接口。


缺点


  • 功能不全

    。MSAA技术的初衷是为了方便残疾人使用Windows 程序,对自动化来说还是不够,仅支持对界面元素的一些基本操作。


07


UIA

UIA(Microsoft Active Accessibility)是用于替代MSAA的应用程序可访问技术。和MSAA不同,UIA技术的初衷是提供UI的可访问性。它支持MFC、WinForms、WPF、Store apps、Qt等窗体。


UIA定义了全新的、针对UI自动化的接口和模式。分别是支持对界面元素进行遍历和条件化查询的TreeWalker和FindAll。定义了读写UI元素属性的UIA Property, 包括Name、 ID、Type、ClassName、Location、 Visibility等等。定义了UI元素行为的UIA Pattern, 比如Select、Expand、Resize、 Check、Value等等。还引入了UIA Event接口,可以让测试程序在某些事件发生后得到通知,比如新窗口打开事件等。

RPA界面元素智能自适应定位与操控技术-金克
图2 UIA架构图


优点


  • 支持的UI框架更丰富

    。例如WPF和Silverlight中的子窗口和控件并不是传统的HWND,所以Win32 API和MSAA无能为力,而UIA可以直接支持这两种程序。


  • 兼容传统的Win32和MSAA模式

    。前面提到过,UIA技术的内部实现可以多样化。针对传统程序,UIA可以在内部实现中借用MSAA的接口和直接调用Win32 API。


  • 高度抽象,易于使用

    。例如执行点击按钮操作, UIA 统一归类于Invoke, 无论是Win32、 WPF还是Silverlight按钮,都可以通过Invoke实现点击,不用关心具体实现方式是模拟键鼠还是调用Windows API。


缺点


  • 编码过程复杂

    。对于一个UI窗口,里面可能有几十个子控件或者子窗口。在编写测试代码的时候, 如果对这些子元素的获取,操作不能简化, 势必导致代码冗繁,难以维护。


08


JAB

JAB(Java Access Bridge)是一项在Microsoft Windows动态链接库(DLL)中公开Java Accessibility API的技术,使实现Java Accessibility API的 Java应用程序对Windows系统上的辅助技术可见。

要使用JAB技术,需要在启动Java程序前配置好所需的JAB环境。Client需要事先加载WindowsAccessBridge.dll获取Server提供的接口,通过FindWindow获取窗口句柄,用IsJavaWindow来判断筛选出Java程序的窗口。拿到窗口后,可以根据窗口句柄获取虚拟机编号vmID 和根节点ac。之后就可以使用vmID和ac,通过之前Server提供的接口,来获取子节点界面元素的vmID和ac、获取界面元素的信息、以及调用界面元素支持的点击输入等方法。

JAB技术的初衷也是为了方便残疾人使用,因此对自动化技术的支持并不好。


RPA界面元素智能自适应定位与操控技术-金克
图3 JAB架构图


09


SAP

SAP 提供了 Scripting Engine 来进行用户界面自动化。SAP Scripting Engine 是一套基于 COM 的接口,提供了 SAP 全面的脚本化支持。


10


Citrix Virtual Channel

Citrix 提供了 Virtual Channel 的机制来满足 Client 和 Server 之间的通讯需求。利用 Virtual Channel,我们可以向 Citrix 虚拟桌面发送任意指令、获取业务所需信息。Citrix 是基于 ICA (Independent Computing Architecture) 协议来实现的。

RPA界面元素智能自适应定位与操控技术-金克
图4 Citrix Virtual Channel


11


RDP Virtual Channel

RDP (Remote Desktop Protocol) 是微软开发的一套远程桌面协议。RDP 也提供了 Virtual Channel 机制来满足 Client 和 Server 之间的通讯需求。


RPA界面元素智能自适应定位与操控技术-金克
图5 RDP Virtual Channel


12


Selenium

Selenium是一个开源的Web自动化测试工具,它支持所有主流的浏览器,可以实现打开浏览器,获取网页界面元素数据,保存网页截屏等操作。

RPA界面元素智能自适应定位与操控技术-金克
图6 Selenium执行过程


13


Chrome Extension

Chrome 浏览器插件是允许开发者自定义用户使用体验的一种技术。可以利用 Web 技术,如 HTML、CSS、JavaScript 来自定义浏览体验。


智能定位与操控技术

从之前的介绍可以看到,系统和应用程序的界面元素框架种类繁多,不同应用程序需要的自动化技术不尽相同,例如Chrome浏览器需要使用Web自动化技术、Oracle ERP需要使用Java自动化技术、SAP需要使用SAP自动化技术;同一种应用程序在不同操作系统上,自动化的实现方式也有所差别,例如大多数RPA产品都依赖Windows的.Net框架来操控应用程序,在Linux等操作系统上完全无法使用。

以Chrome浏览器为例,多数RPA产品会选择使用开源的Selenium来实现对Chrome浏览器的自动化操控。Selenium是一个著名的Web应用测试工具,它提供了丰富的API接口,可以非常方便的被Python、Java等语言调用,同时也存在驱动版本必须和浏览器版本严格对应,以及容易被网页检测到等缺点。Selenium无法用于操控其他应用程序,因此需要单独为浏览器设计一整套自动化控制模块。较为成熟的RPA产品通常会选择自研浏览器插件,用插件实现相同的功能。自研浏览器插件可以将浏览器和其他应用程序的自动化接口进行统一,但是遗憾的是,很多RPA产品并没有这么做。将浏览器作为特例或许会方便熟悉网页测试技术的开发者快速上手,但对于不熟悉相关技术的开发者,无疑增加了巨大的学习成本。

由于上述原因,RPA流程开发需要考虑流程共涉及几种自动化技术,会在几种操作系统上运行。RPA开发人员不仅需要了解业务系统的每一部分使用了何种自动化技术,在开发中选用正确的模块,还需要了解流程会在哪些操作系统上运行,为每种操作系统开发一个单独的流程。随着RPA涉及业务系统的范围扩大,以及国产操作系统的普及,流程开发成本将大幅提高。

RPA界面元素智能自适应定位与操控技术将这些自动化技术进行了统一,对不同操作系统做了兼容。在RPA流程开发过程中不需要区分自动化技术,同一流程可以在不同操作系统中直接运行,能大幅降低开发成本。


智能定位与操控的技术实现

RPA界面元素智能自适应定位与操控技术融合了当前主流的自动化技术,通过高度抽象实现不同自动化技术的统一调用,通过基于规则的自动化技术切换器实现不同自动化技术的智能切换。

RPA界面元素智能自适应定位与操控技术-金克
图7 智能元素捕获器架构图

以捕获和操作使用JAB自动化技术的Java应用程序为例。使用者先用界面元素分析器捕获目标元素,此时根据鼠标点击的位置,界面元素分析器可以获得目标元素所在的窗口以及窗口所属的应用程序并拿到窗口和应用程序的信息。根据这些信息,自动化技术切换器将根据规则选择最合适的自动化技术。在这个例子中会智能切换到JAB自动化技术。接下来,界面元素分析器会调用“获取指定位置下的目标元素”这个方法获取目标元素,该方法的底层实现基于JAB自动化技术,该目标元素所具有的属性和支持的方法也都是通过JAB自动化技术得到的。这些属性和方法也是抽象的,通过JAB自动化技术获取到的属性role会被映射为标准的control,通过JAB自动化技术获取到的方法Click会被映射为标准的Invoke。使用者想要实现点击目标元素,只需要按照统一的规则调用Invoke方法即可,不需要关心该方法底层是如何实现的。

定位目标元素还存在一个很常见的问题,目标元素的属性和在UI中的位置偶尔会发生变化。例如有些窗口标题会带版本号,一旦更新应用程序就会发生变化。当这些发生变化时,就有可能定位失败。为了更好地定位元素,用户界面被抽象为了一个文档对象模型(Document Object Model),支持使用CSS语法和XPath语法的元素选择器定位目标元素,元素选择器是一段文本,包含了元素的属性和层级关系,支持模糊匹配。

RPA界面元素智能自适应定位与操控技术-金克
图8 DOM 结构

文档对象模型常用于操纵HTML和XML数据,它将整个文档抽象为逻辑上的对象,然后定义了访问和操作这些文档的方法。文档对象模型独立于任何系统平台和编程语言,使用文档对象模型提供的方法,可以构建文档、导航其结构以及添加、修改或删除元素和内容。用户界面也可以抽象成一个文档对象模型,形成一个树结构,每个界面元素都是用户界面树的一个节点,每个节点都是一个抽象的元素对象,有相同的属性和方法。在界面元素分析器和应用程序的通信过程中,跨系统兼容的自动化技术切换器会根据获取到的应用程序信息按照规则自动切换,对接相应的自动化技术接口,用获取到的界面元素信息来构建抽象元素对象以及文档对象模型。

在元素分析器界面,可以看到用户界面树的整体结构和每个界面元素的各种属性,通过定位语句,可以定位到满足定位语句的目标元素。定位语句采用自研语法解析技术,同时支持CSS语法和XPath语法,支持按属性精准匹配、前缀匹配、后缀匹配和模糊匹配,支持描述元素间的后代关系、父子关系和兄弟关系,自由度极高,适应用户界面变化能力强。捕获元素后会自动生成适合的元素选择器,使用者也可以在此基础上手动修改以提高定位的灵活性和准确度。

RPA界面元素智能自适应定位与操控技术-金克
图9 Windows元素捕获器

RPA界面元素智能自适应定位与操控技术同样支持国产操作系统,国产操作系统大多是基于Linux改造的,借助Qt-at-spi技术,可以通过Linux的调试接口获取到图形界面上应用程序的界面元素。针对不同的国产操作系统,具体实现细节有所区别。通过封装,实现了各国产操作系统和Windows操作系统接口的统一。

RPA界面元素智能自适应定位与操控技术-金克
图10 UOS元素捕获

目前RPA界面元素智能自适应定位与操控技术已兼容WIN32、UIA、MSAA、JAVA、SAP、Chrome、IE、Firefox、X11等多种自动化技术。借助自动化技术智能切换方案,使用过程中选择器会智能切换自动化技术。切换方案同时支持自定义配置,可以应对特殊场景的需求。达观全能界面元素选择器的可拓展性很强,新的自动化技术可以通过公共接口无缝接入,改造和升级都十分方便,不会影响现有的RPA流程。

RPA界面元素智能自适应定位与操控技术同时兼容多种操作系统,包括Windows7 SP1以上的主流Windows操作系统、MAC系统、国产麒麟、统信、中科方德系统等。RPA流程可以轻松在这些系统间迁移,相同应用程序的同一界面元素定位语句完全相同,相同操作的底层实现会根据当前运行的系统自动切换。相比之下,其他RPA产品多是基于Windows的Net框架实现的界面元素定位和操控,无法迁移到其他操作系统中运行的。


未来展望


01


兼容更多自动化技术

目前,还有一些自动化技术没做到兼容,例如Citrix虚拟化应用、RDP远程桌面等。这些场景下仍然需要开发者采用相应的技术,做针对性开发。后续RPA界面元素智能自适应定位与操控技术将加入对更多自动化技术的支持,进一步优化RPA开发者的体验。


02


兼容更多操作系统

当下,国产操作系统发展迅速,麒麟、统信、中科方德等国产操作系统的市场越来越大,后续在这些国产操作系统上开发和运行RPA流程的需求也会越来越多。除此之外,移动设备上也有一些运行RPA流程的需求。兼容这些操作系统也同样在开发计划之内。


03


开发基于图像的自动化技术

虽然大多数应用程序都支持自动化技术,但仍有少数应用缺乏相关支持。达观全能界面元素定位和操控技术将依托公司的自研AI能力,开发图像自动化技术来解决这一问题。该技术会将用户界面按照不同层级进行智能分割,提取出不同层级的图像作为元素对象,通过图像技术构造用户界面树并提取出元素对象的属性信息。这一技术将彻底解决应用程序不支持自动化技术的问题,真正做到通用且无侵入的定位和操控界面元素。


作者简介

金克:达观数据技术副总裁,负责达观数据RPA产品团队组建和研发。在加入达观之前,联合创立“飞语云通讯”并担任CTO,在系统工程开发、大规模并发网络、Go语言程序设计等方面有丰富的经验,先后在格尔软件,爱克发医疗,盛大创新院,飞语等公司就职,有十余年的软件开发经验,带领团队参与了信息安全,医疗影像,云存储,支付和计费系统、云通讯平台等的研发工作。2021年上海“张江工匠”获得者。

© 版权声明

相关文章

暂无评论

暂无评论...