知识库查询实现(知识库 易查询)原创
本文是NLP预训练模型在智能客服探索实践中的下篇,介绍了在受限的条件下,利用基于预训练模型实现的NLU等技术,实现面向常用问题集的自动问答的探索实践1业务痛点电力客服
本文是NLP预训练模型在智能客服探索实践中的下篇,介绍了在受限的条件下,利用基于预训练模型实现的NLU等技术,实现面向常用问题集的自动问答的探索实践1业务痛点电力客服知识库存储的是以自然语言表达的非结构化数据,以往的信息查询是基于传统的全文检索技术,通过关键词的字面匹配来刷选数据,然后人工进一步选择所需信息。
整个信息处理过程的智能化程度不高,人工工作量较大,因此客户期望实现一种自动问答系统,能够更准确地理解用户的查询意图,从而更精准地反馈需要的信息2技术实践自动问答的实现是系统工程,涉及会话管理、意图识别、答案获取、排序等系列流程。
本文主要从答案获取的角度介绍语义相似度、命名实体识别、机器阅读理解等NLU技术的应用根据数据的分布情况,我们尝试从三个角度获取答案:一是根据用户查询问句和问题集的语义相似度比较结果,找到目标问题对应的答案;
二是根据问句,直接从知识库答案集里可能包含最终答案的上下文中抽取出结果;三是推荐与用户查询意图相关联的知识点。如下图所示:
01语义相似度这里的语义相似度指文本匹配,即衡量文本之间的相似性在自动问答应用中,采用语义相似度技术,通过匹配和用户查询问句相同或相似语义的知识库问题,从而获得与问题关联的答案A.应用场景电力客服知识库的各个知识点由“标题/问题(Q)”-“答案(A)”组合构成,因此可以将用户查询问句和知识库问题集里的“标题”进行语义比较,只要找到了“标题”,就可以找到对应的“答案”。
这是典型的FAQ问答场景,技术实现的重点是语义相似度,通常有两种方式:一是“查询问题”和“知识库问题”之间的匹配;二是“查询问题”和“知识库答案”之间的匹配基于数据稳定性、实现难易程度等因素考虑,我们选择通过“查询问题”和“知识库问题”进行匹配。
B.实现常见的文本匹配策略有基于标准问-扩展问、问句模板、句向量、知识图谱等方式考虑到语料获取成本、投入时间等因素,我们在自动问答中采用基于句向量的语义匹配这种方式的优点在于句向量往往是基于大规模语料和复杂模型训练得出的,典型的如Word2Vec、Glove、BERT等,本身包含了较完整的语义特征,因此可以直接用于相似度比较,而不需要人工收集、配置扩展句或者匹配规则,在工程上有较大的优势;缺点是如果直接采用通用模型如BERT等,准确率和召回率可能无法满足工程要求。
在我们的实践中,文本匹配过程如下,首先,从用户问句中抽取“主体”作为关键实体;其次,筛选知识库“问题集”中包含“主体”的问句作为候选集;最后,采用BERT生成用户问句和候选集的句向量,应用余弦相似度作为度量指标,实现了问句匹配(“主体”抽取见下节《命名实体识别》介绍),其中句向量的生成采用腾讯肖涵博士开发的bert-serving-server 作为引擎。
值得一提的是,虽然理论上BERT的动态向量相比静态向量在语义表征上更有优势,但具体到文本语义匹配的实现上,在很多评测中BERT的成绩反而不如Glove的静态句向量,这是因为Bert没有专门为句子语义相似度任务进行优化(事实上我们已经应用针对语义相似度进行专门优化的预训练模型,实现了更准确的文本匹配,由于还没有最终完成,这个主题留待下次交流)。
此外基于BERT句向量计算的余弦相似度度量值本身是没有应用价值的,有意义的只是排序值:即不能通过cos (A, B) > 0.9,来判定A和B两个句子是相似的,而只能这样处理:如果 cosine(A, B) > cosine(A, C), 那么可以判定相比于C与A来说,B与A之间更相似。
动态词向量和静态词向量的一个主要区别在于多义词的编码处理上示例:“杜鹃”分别代表花和鸟,在word2vec里杜鹃被编码成同样的向量,而BERT会根据上下文语境生成两个不同的向量田野里到处是盛开的杜鹃山里传来了杜鹃的叫声
语义相似度比较应用示例:用户查询问句我们是如何评估一户多人口的数量基于句向量相似度的topN相似标题相似语句相似度一户多人口政策判断人口数方式17.904377一户多人口阶梯电量计算方法17.81724
一户多人口阶梯电价介绍17.465017......_02命名实体识别(NER)命名实体识别是信息抽取的核心任务之一,主要用于从文本中识别出具有特定意义或者指代性强的实体,通常包括人名、地名、组织机构名、日期时间以及其它自定义的专有名词等。
实际应用中实体这个概念可以很广,只要是业务需要的特殊文本片段都可以定义为实体在自动问答应用中,利用命名实体识别技术获取用户问句和问题集中包含的各类实体A.应用场景为了实现知识的有效管理和支撑上层自动问答等应用,我们基于知识库的问题集构建了知识结构图谱。
通过知识结构图谱,一方面可以实现知识的精准问答,另一方面可以实现关联知识的推荐为了从问题集里抽取出结构化的知识,需要借助于命名实体识别等技术实体模型定义为了简化实现,我们暂时只定义了粗粒度的实体模型,即“主体”-“事务”-“属性”三元组。
例如示例问题“电动汽车充电卡开具发票的方法”,可以拆解成三元组:“电动汽车充电卡”-“开具发票”-“方法”所有问题集中提取的三元组构成现有的知识结构图谱实体识别场景在我们的知识库应用中,有两个场景需要进行实体识别:
1) 知识结构图谱构建基于上述的实体模型定义,从知识库问题集中抽取出各类实体,并根据实体之间的关联关系,构建全局的知识结构图谱知识结构图谱可以应用于应答和知识推荐例如当用户查询“电动汽车充电卡如何开具发票”时,理想情况下将匹配到问题集中的标题“电动汽车充电卡开具发票的方法”,然后返回该标题对应的“答案”字段的数据,同时将与“电动汽车充电卡”相关的其它事务或者属性作为一个完整的知识视图推荐给用户。
实体抽取示例如下:
FAQ问答及推荐实现示例如下:
2) 查询问句语义解析从用户的查询问句中抽取出预定义类型的实体,将这些实体作为用户查询意图的主体在知识库应用中由于“事务”等实体的定义过于松散,不易梳理和识别,因此暂时仅抽取“主体”,并将其作为构建后端查询的关键条件。
A.实现常用的命名实体识别技术包括基于规则(如正则表达式)、基于词典、基于句法分析、基于传统机器学习HMM/CRF、基于深度神经网络如RNN/LSTM、BERT等由于现实条件的约束,在知识库的实践中不同阶段采用不同的实现方式:。
规则+人工在冷启动阶段,由于没有任何标注数据,通过数据分析,发现在“类别”中存在部分“主体”信息,因此采用规则+人工的方式,从原始数据中抽取了一批“主体”形成实体表基于句法分析冷启动阶段,除了上述规则外,还采用基于句法分析的方式从部分数据中抽取出“主体”。
基于句法分析的原理是通过提取句子的主谓宾作为核心结构,再进一步扩充状语等修饰语从而形成粒度较粗的短语作为实体句法分析的优点是可以采用无监督方式直接从文本中提取出短语结构,缺点是受限于分词、句式表达的多样性等影响,准确率不高。
因此我们仅仅将其作为冷启动阶段的一种辅助手段,用于减小人工处理的工作量示例:“电费记录纳入征信平台实施时间”通过句法分解处理,形成两个短语三元组“电费记录-纳入-征信平台实施时间”和“征信平台-实施-时间”。
如下是句法分析和语义依存分析图:
基于深度学习模型在我们的实践中,应用基于预训练模型的深度学习技术训练了“主体”抽取模型1) 模型NER本质上是序列标注任务,具体实现中我们采用“BERT+全连接层+CRF”作为模型结构,最后一层采用CRF而不是SoftMax,是因为CRF可以加入一些约束来保证最终的预测结果是有效的,这些约束可以在训练数据时被CRF层自动学习得到。
简单来说,就是减少学习到一些错误序列的概率,比如单独的I-x(没有B-X在前面),或者“B-m I-n”等
图1 序列标注任务模型架构(引用自论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》)
2) 数据集为了充分利用数据和增加数据表达的多样性,除了问题集的标题数据外,我们从“答案”数据中抽取了包含“主体”信息的部分句子作为样本数据因此总共获取了6000多条数据,按7:1:2比例分成训练集、验证集和测试集。
3) 训练语料生成训练语料采用典型的BIO标注方式,即将每个单词元素标注为“B-X”、“I-X”或者“O”其中,“B-X”表示此元素所在的片段属于X类型并且此元素在此片段的开头,“I-X”表示此元素所在的片段属于X类型并且此元素在此片段的中间位置,“O”表示不属于任何类型。
由于“主体”中存在一些专有名词,为了避免分词错误造成错误扩散,这里直接采用基于字符的标注方式为了自动化标注语料的生成,我们开发了一个小工具,能够基于前面收集的“主体”词典,生成不同格式的实体标注语料标注语料如下示例:
4) 语料转换/扩充如前所述,我们需要分别从“问题集”和“查询问句”中提取“主体”虽然两个任务的目标相同,但语境不同:问题集里的标题是经过人工专门整理过的,表达比较规范和紧凑,很少出现一些无实际语义的助词,比如“呢”、“什么”等;而用户查询问句一般较为随意,存在口语化等特点。
示例:标题表达查询语句表达 福建供电公司的地址福建供电公司在哪里电动汽车的分类我想知道电动汽车有哪几种类别电费计算规则电费是怎么计算的呢我们针对上述两种场景的特点,分别采用不同的语料,训练了两个模型。
由于我们只有比较规范的问题集数据,因此需要基于问题集的标题扩充出更多具有相同语义但不同表达方式的问句为了减轻人工扩充语句的工作量,我们引入了外部基于相似句(来源于百度相似问句)训练出来的相似句生成模型,用于自动扩充相似句。
值得注意的是,自动扩充的相似句并没有考虑到我们定义的“主体”的边界,因此生成结果中部分主体会被打散,因此需要过滤掉这部分数据相似问句自动扩充示例:
5) 模型评估在训练了7个epoch后,我们的NER模型达到一个局部最优值,在测试集上的测试指标如下:Precision0.89835recall0.92054F10.909316)模型应用示例由于样本量较少且各类主体分布很不均衡,构建测试集时并没有区分已知实体和未知实体。
为了展示效果,这里人工造了几个未知实体作为示例:输入语句输出实体雅迪电动车怎么卖雅迪电动车春天电驴如何充电17.8172403机器阅读理解(MRC)机器阅读理解是一种较新的QA方式,是让机器根据给定的文本,回答与文本相关的问题。
常见的阅读理解任务有四种类型:完形填空、多项选择、片段抽取、自由回答在自动问答应用中主要关注片段抽取任务,即从知识库文本数据中抽取一个连续的句子(或词组)作为问题的答案A.应用场景前面的讨论,不管是知识结构图谱的构建还是查询问句的相似度比较,数据源都是基于问题集里的各个“标题”。
“标题”本质上是对篇章或者文本段的一种概述,它表述的信息粒度是比较粗的,因此单纯地依靠对标题的解读无法有效地抽取出隐含在大段文本中的细粒度信息如下知识库数据样本示例里 “标题”数据只是定义了充电站的“类别”这个知识点,而有关“充电站”的更多细节信息隐藏在“答案”字段的数据里,如果用户希望了解“中型充电站的充电设备数量”,是无法通过“标题”获取到答案的。
有鉴于此,我们引入机器阅读理解技术,使用户能够直接针对文本段数据进行提问,得到“不少于3台”这个答案这种直接针对文本篇章的提问方式不需要预先配置“问题”-“答案”组合,因此可以省去大量的运营工作知识库数据样本示例:。
A.实现答案抽取包含两个主要步骤:数据预筛选和阅读理解即首先根据用户的查询问句,采用全文检索等技术从知识库中筛选出可能包含答案的内容,接着基于阅读理解模型从这些内容中抽取出问题的答案这里主要介绍机器阅读理解的实践。
1) 模型在实践中我们采用基于BERT的微调方式来训练阅读理解模型模型结构采用“BERT+全连接层+SoftMask”模型的输入为包含答案的文本段和问题,实现时我们直接将“问题”和“文本段”拼接成句子对作为输入,将“答案”在文本段中所在的位置作为预测结果。
图2 问答任务模型架构(引用自论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》)2) 数据集
由于没有现成的阅读理解任务的标注语料,因此选择百度开放的事实类阅读理解训练集(感谢百度)百度数据集共包含约21K问题,其中包括15K训练集,约1.4K领域内验证集和5K测试集数据集中的每个样本,是一个三元组 。
样本示例:
3) 模型评估在训练了16个epoch中后,模型取得局部最优值,在1.4K验证集上的评估指标如下:F10.83EM0.71注:测试集结果仅用于百度的比赛,比赛结束后没有继续开放评测4) 模型应用篇章段落示例:。
问题答案厦门岛有多大157.76平方公里我想知道厦门以前叫什么名字呢嘉禾屿厦门岛有几个内海湾两个厦门岛的内海湾叫什么名字五缘湾和筼筜港反例:上面的示例看起来效果还不错,这里举一个错误回答作为反例,以说明模型的局限性:
问题答案厦门最初是多大呢157.76平方公里3后记预训练模型本质上是一种迁移学习,它通过大规模语料的学习得到易泛化的多层语义,并将其作为底层特征应用到下游特定业务的任务上对于大部分NLP任务,底层的语义一般是通用的,因此预训练模型往往可以发挥较大的效用,这也在我们的知识库应用实践中得到了体现。
不只是BERT本文讨论的场景实现大部分都基于BERT,这仅仅是基于通用性的考虑,一般来说应用BERT至少可以达到baseline的成绩,实际上我们还有很多选择近年来业界包括微软、google、facebook、腾讯、百度、华为以及其它AI相关的公司都相续开放了各种不同预训练模型,这些模型从输入数据的处理、训练任务的设计以及所用的语料等都有各自的特点,往往可以在特定领域取得不俗的成绩,这些技术都值得我们去学习、研究和应用实践。
下图是清华大学整理的预训练模型的关系图(图发表时间大约是2019年10月份之前,由于技术发展很快,一些新的关键模型如GPT-3等没有被列入图中):
图3 浅色模式与深色模式预训练模型关系图(引自https://github.com/thunlp/PLMpapers,清华大学王晓智和张正彦同学整理)NLP工程应用的思考工程实践中机器学习/深度学习等所谓AI技术的应用往往会受到各种条件的限制,包括语料、性能、算力等方面的制约,归根结底就是投入产出比的问题,因此当“智能”不是核心能力,而只作为锦上添花的功能的时候,这些限制就会成为难以逾越的障碍,从而影响到系统的应用落地。
例如2012年我们就参考Alice开发了自己的AIML自动应答引擎,并实现了基础的“槽”(那时候应该还没有“槽”这个概念)配置、填充框架,但由于需要人工配置较复杂的问句模板和应答规则,使用麻烦且工作量大,最终没有多少实际应用。
随着近年来NLP相关技术的进步,业界的关注热点也从传统的基础任务如分词、句法分析等转移到了更贴近应用层的任务,如阅读理解、问题生成、文本摘要、自动纠错等,同时可借助的外部资源包括语料、算法、模型以及工具等越来越丰富,这些变化使得文本智能化的实现更为容易和贴合现实需求,因此我们总结了智能知识库的一些实践,抛砖引玉,以期促进后续更多智能应用的开展和落地。
【参考文献】1、《Unified Language Model Pre-training for Natural Language Understanding and Generation 》,Li Dong etc. ,arxiv.org ,15 Oct 2019
2、《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》,Jacob Devlin etc. ,arxiv.org,24 May 2019
文 | 黄映挺 朗新科技集团技术研发中心注:文章仅代表作者观点,欢迎转发和评论转发、转载、转帖等须注明“稿件来源:朗新研究院”违者朗新研究院将依法追究责任,谢谢!延伸阅读【行业论道】场景下沉 贴合实用 综合集成。
专题|电力营销发展方向的思路与建议(上篇)【电力现货】电力现货市场售电侧平台优化设计与实现中台|挑个项目来建中台【电力大数据】基于灰度算法的中长期电量预测方法设计|紧跟趋势!如何设计一个舒适的深色模式?
运营|从“内容营销”小谈电力的互联网运营新借鉴【新基建 新营销】电力营销精细化运营系列(一)
免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186