开发者学堂课程【阿里小蜜中的机器阅读技术:挑战解法-阿里小蜜技术解析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/43/detail/966
挑战解法-阿里小蜜技术解析(一)
内容介绍:
一、店小蜜活动规则中的解法
二、解决方法和实践小结
三、领域覆盖
一、店小蜜活动规则中的解法
首先基于领域扩展困难以及数据标注收集困难问题,如下图是店小蜜活动规则中的解法:
多任务—店小蜜活动规则
之前提到最开始是把店小蜜作为一个回答用户关于官方活动的问题,对于每一个在淘宝平台上开店的商家来说,他们有自己的一些活动,那其和之前的场景都是一种规则性的阅读理解场景,但是其区别在于它面向了多个行业同样也是高频变动的。在此处,把机械的能力复用在店小蜜活动专区的一个场景中,可以发现通过左边对于活动的一些结构化与非结构化规则性的配置,右边机械阅读会直接抓取相关的内容作为回复。在此过程中为了达到快速的能力复用以及数据标注的介绍。
多任务——领域数据结构复用,减少数据标准
在此利用了多种多样的数据,包括了点击日志和人工知识去丰富不同的问法信息,以及对问题和答案的语义做一定的关联性建模,但这些数据相比机器阅读任务本身会更加容易收集,可以看到如上右图,在整个机器阅读理解 Benchmark 数据集上面,通过其他任务的数据引入,准确率从83提升到95,其背后的一个模型原理是基于深度神经网络的模型迁移原理,
如下图:
对于一个做图像分类或者识别的网络来说,它是有一个多层的 CNN 结构来堆叠,最终完成一个具体的任务,它从底向上,也就是说从最初的输入即靠近输入的这一端到输出的那一端,它的不同层次会关注不同的特征,比如最底层它会关注一些边缘、颜色,在更上层它会有一些简单的一些形状,乃至去组合成更复杂的一些物体,再把这些物体结合出来,作为整个场景的分类。
在14年 ins 有一篇文章提出在整个模型的不同层次中具有不同的特征迁移能力,简而言之就是其底层的特征即使是面对不同的任务也可以快速的复用起来,任务a上用到的模型的底层特征可以直接复用在任务 b 上,不需要做额外的微调,而越接近于上层,即输出层,越与这个任务有关,越需要在新的任务上去做一定的调整优化。
基于这种神经网络的多层可迁移性,小蜜在文本匹配上也探索了相关的迁移学习任务,这个工作是发表在2017年 wsdm 上,
如下图:
小蜜在文本匹配迁移学习的探索
去做一个跨领域的短文本匹配的迁移学习,其中主要分为两种领域,原领域和目标领域,原领域是一个已经具有了大量标注数据的匹配场景,而目标领域仅仅具有少量的数据标注,在上图左边描述了一种最简单的共享结构,就是原领域和目标领域都去共享网络中的一部分,然后通过原领域的数据去整个训练的网络,再同时去预测在原领域中和目标领域中分别两个领域的匹配结果。
在这个基础上面,又引入了更加复杂的结构,像上图右边所示,原领域本身和目标领域有一些领域的共通性,这些共通的知识可以作为一些通用的内容抽取出来,在这里面我们是使用了一些共享的结构 shared、neural network,即中间灰色的这一层。在左边是其领域之间独有的、特有的一些领域知识,此处会利用一些独立的参数、不会共享的层次来对其做建模。
当这种领域参数共享以及不共享同时存在于整个框架中时,其实就做出了一个领域的迁移,它的迁移会针对于领域之间的相似性知识而同时去建模领域之间不同的知识来对整个任务去做一个互相的借鉴学习,达到了在目标领域这种少数场景里更好的学习效果,具体效果可参照相关的论文。
再回顾机器阅读本身,此处把机器阅读整个做了一个层次的抽象,如下图:
利用跨领域/跨任务数据共同学习
最下面一层就是熟知的 Embedding Layer ,它把文章和问题中的单词字符映射成了不同的高维向量,再上一层就是 Encode Layer 去对这些向量/序列去做一个更进一步的编码,基于这些编码,要去做attention,即黄色的这一层,再去基于 attention 去最终建模和预测答案的起始位置,即 Model Layer 、Ouput Layer,基于机器阅读的多层的模型结构,复用了前面提到的神经网络的层次迁移性,在最底层的 Embedding Layer 上引入了 Chatlog, 即用户的问答日志去做一个共同的学习。
这块数据的数据量非常大,可以认为是一个海量的规模。在上层的编码引入了 QQ Pair ,即用户的问题和知识点标题的一些匹配信息,以及用户在问答过程中的对于推荐问题的一些点击信息,它也有非常大量的数据。再之上利用了知识库中人工编辑的问题和知识内容之间的 QA Match之间的语义关系数据,它相对来说没有那么多,但是对于整个电小蜜的体量来说,因为已经有非常多的商家在通过店小蜜提供服务,所以说数据规模也还是比较大中等的。再到上面可能仅仅只需要针对 mrc 本身这个任务来提供一个少量的标注,即可以达到一个比较好的效果。
除了多领域多任务的学习,接下来是另一个挑战,即当文档过多是怎么去处理的,此处展示的是一个关于政务办事问答的的应用场景,如下图:
多文档-政务办事问答
如上图可看到其中主要是关于政府去做一些具体的事项、办理相关的一些材料文件时需要用到的一些内容条款它是一种条款性。比如上图是一个关于养犬许可服务指南相关的规定介绍,用户可能会问“这个在哪里可以办理?需要多长时间?我需要去准备什么样的材料?”它的一个典型特点就是民众对于政务往往有非常多需要办理的事务,不单单是个人,可能还有一些公司级的,就导致了对于每个省来说,可能需要有百万级办事的文档库规模来去支撑整体的政务办事问答。那在此整体做了一个 Pipeline 链路,如下图:
工业系统——完整的文答 Pipeline 链路
用户的问题首先会去提取一些相关的关键词,比如图上是关于3M 的
一个活动的优惠,里面核心的一些活动词或者办事的事项名称会提取出来,在文档库里做一个大规模召回,召回之后的话针对召回的文档再去做一个粗排,粗排出来的结果会基于机器阅读模型做一个精细化的答案提取,再把提取到的答案与用户的完全问题再做一个精细化排序,来返回最合适的答案。
在其中它与传统的 pipeline 式的结构稍微的区别是在于把整体的文章排序,段落排序,其最终的答案排序做了一个联合学习。这个工作也是发表在 AAAI 2018 鼎会上的一篇论文,如下图:
层叠式阅读理解过程
上图可看到前置的检索整体缩短了阅读的范围,同时会带着问题去在缩小范围后的每个候选段中阅读,去寻找相关的答案,但是不同的段落独立寻找之后,又会去把整体不同段落里面的答案统一拿出来做一个整体的可信度对比,如此可以防止在过长或者过短段落上答案最终得到的分值,分布不一致导致的不可比问题,最终综合考虑选取全局的最优结果。可以看到上图左边黄色的部分在不同的模型上,所有的参数都是共享的,共享去学习,如此不会引发前一个步骤出现了错误而累积导致影响下一步的环节。接下来是整个流程在业务数据上的表现,如下图:
性能与准确率表现
可以看到折线图主要是代表了一个模型的响应时间,柱状图是表示模型在数据集上的一个准确程度。用的是F1指标,图中随着文章长度的增长,即横轴部分,改进模型实现这一块整个的响应时间仅仅做了少量的一个增加,而原始的虚线会成倍的去增长,同时,在这个包含了这个检索式的模型之中,F1 也会随着文章长度的增加而仅仅做一些少量的衰减。而原始没有检测的文章、文章检索的模型会表现出一个很大的性能损失。同时前面提到有一个整个的答案后排序的过程,
融合后置排序进一步增强可控
在此也同样用到了 Multi-Task Training,即多任务学习的能力,同时我们还利用了 Wide & Deep Ensemble 整个去做一个引 example,Deep 端是上述提到的各种各样的一些深度学习模型,Wide 端可以结合一些业务上面需要的可解释性比较好的特征,比如问题的类型、问题答案的长度、之间的一些相似度、以及外部的一些语义知识和意图知识去做一个整体的引 example。在 Wide & Deep 结合的框架下面,通过引入额外的答案后排序阶段,可以看到在部分活动场景能减少将近60%的错误答案,同时可以保留超过90%的正确回复来进一步提高模型的准确率。