开发者学堂课程【阿里小蜜中的机器阅读技术:挑战解法-阿里小蜜技术解析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/43/detail/966
挑战解法-阿里小蜜技术解析(二)
二、解决方法和实践小结
此处整体对上述提到的解决方案与实践做一个小结:
1.构建领域数据集及低成本解决模型冷启动;
2.利用前置检索缩小范围提高问答准确率;
3.把整个原始端到端的这种模型拆分问答为多阶段增强模型可控及灵活性。
DTD 原则: Define - Transfer - Decompose
整个抽象成三个原则就是 DTD 原则,Define 先去确认我们要适用的场景,同时再做一些 transfer 来去结合不同的任务、不同的领域使得在小数据场景下使用有更好的学习效果,再做一个 Decompose,就是把用于整个集成在一起的模型做一定的拆封,在每个阶段去分别加强它来达到更好的一个可控及灵活性。
除此之外分享一下除了前面在其他业务上做的落地的一些尝试,更多的扩展的场景首先是多语言,如下:
多语言- Lazada 印尼语平台规则
多语言-混合语言模型(Transfer)
这也是针对于整个活动的问答,如上是一个关于印尼语的平台规则的问答效果,其中尝试去做了一个多语言的突破。多语言的突破里面主要利用了混合语言模型去做整个跨语种的支持,首先众所周知不同语言之间可以有一些对齐的语言的词典,这种语言的词典表现为在一个语义空间里面,存在着像一些同义词这样的关系,设计过程中希望能把这些词都映射在同样的一个语义空间里,比如“狗和 dog”“月份和 January”“巴黎和 Paris”这样的词语其实表达的是同样的语义,在语义空间中把它们拉齐,如此虽然它字面的形式不一样,但在深层次、在高维的表示空间里,可以认为它依然代表着同样的一个具体的含义。基于这种统一的语义表示空间,需进一步的去构造一个需要的 Share Encoder,即一个共享的语言编码器,因为上述提到的更多只是在于词之间的对齐,句子是由词组成的,但是一个一个词去对齐不能很好地表示整个句子的意思,因此在此去做一个整体的共享语言编码器来实现语义的对齐,这里用到了不同于语言之间的一些单语模型 mono lingual corpus 去加强整个语言模型的构建,同时又引入了两个领域之间的 parallel corpus,即对其的语言数据,这种对齐数据可以更好的在语言空间上拉起两者的语义距离。构建了 Share Encoder 的好处是可以利用一些数据量更丰富的语言来训练在小语种情况下的一个模型表现,比如可以借助于英文语料去训练印尼语,同时,它可以提供一个很好的对于一些小语种去做 Zero-short 冷启动的场景,甚至在一些东南亚国家还存在着英文混杂着当地语言的混合语言现象,都可以通过 Share Encoder 混合语言的编码器去做一个很好的解决。
除了上述直接训练 Share Encoder 的方式,此处也同样使用了多语言模型的预训以及 BERT 去做进一步的机器阅读理解任务,如下:
多语言模型预训练- BERT
﹣多个数据集上性能 SOTA , Few - shot / Zero - shot Learning .
﹣训练耗时,模型在线服务成本高,特定领域效果一般
﹣结合 BERT 和知识蒸馏: logits 正则项/数据增广/简单学生模型
众所周知 BERT 在多个数据集上目前都是性能达到了最好,同时对于一些冷启动小数据的场景上有很强的一个泛化性,其缺点在于训练耗时,直接网上做线上部署服务成本比较高,而且在一些特定领域,由于它的域训练主要是在一些通用领域上,特定领域上的效果比较一般。因此在这里面主要是提出了结合 BERT 与知识蒸馏去做,比如可以去通过 BERT 在下一个任务上的微调去预测大量的 logits 正则项, 把它们作为一些老师的内容去让一些简单模型去做学习,对于这些简单学生模型或者简单模型来说,这个学习过程即常见的知识蒸馏,知识蒸馏的过程中往往还伴随着一些数据增广的一些方式,利用老师模型去扩充更多样的数据来让学生在场景中更多的维度做一个整体,更好的学习。
除了多语言这块,如下是多轮次的探索:
多轮次-从单轮问答到上下文对话
前面提到一个例子,对多轮次已经有了初步的体感,多轮次现在也是机器阅读理解领域中关注的一个主要问题之一,上图主要介绍 CoQA 这样的一个数据集,它是斯坦福大学提出来的基于对话式的机器阅读理解场景的一个数据。
图右提到 government 的一个竞选需要用到的相关材料,比如在整个竞选中“他是在哪里的?谁会支持他?他属于哪个政党?”在这个过程中,不可能每一句话都去完整地覆盖到这个问题的上下文,因此对于模型来说它需要去结合历史提过的问题以及相关的答案去把当前审核的信息做一个补充。
针对多轮次上下文的阅读理解,此处引入了 flow 结构:
基于 Flow 结构融合多轮信息
Flow 结构来自于 Flow QA 文章,其发表于2019年的 ICLR,在这篇文章里面提出了 Flow 的概念,Flow 相对于传统的文章编码多了一个维度,众所周知对于像rn这样的结构来说,它是将文章或者问题的词序列做了一一编码,Flow 结构引入了另外一个维度,在于多轮的这种轮次信息,作者认为这种文字在同一篇文章中的同一个单词上会有不同的一个信息,这种信息在不同的轮次之间流动的过程形成了一个 Flow 的结构。具体来说每一个单词在不同的轮次因为用户的问题关注点不同,所以与问题之间的一些关联程度或者 attention 之间也有差异,把这个差异性用序列模型建模出来,就是整个的一个 Flow 结构,将这个 Flow 结构引入到我们整体的文章建模与答案选择的环节,它可以有效的融入上文的一些相关信息,来对当前的问题做更好的补充。
除了多轮次、上下文的场景,还针对店小蜜商品详情页去探索了多模态的问答可能。
如图:
用户在淘宝的商家店铺里提到的问题可能是一个特别细节的、无法为当前的知识库所覆盖的问题,此时会根据提到的问题从商家商品所在的详情页中自动去截取相关的图片作为答案。在图中例子中,用户提到这款冰箱能否连接手机,我们会将其详情页中与手机冰箱以及互联的概念更好表现的图片最终选取返回给用户。这里涉及到了图文信息多模态的融合,同时详情页通常是多篇图片组成的,也是一个长篇幅的问答场景。
综上所述,已经陆续介绍了机器阅读的不同运用场景,它背后的技术以及形成的能力如下是整合的技术平台大图:
工业应用的机器阅读技术平台
最下面是整体机器阅读理解所沉淀的数据层,里面包含了通用的百科新闻以及针对领域的政策法规,零售场景的活动规则以及一些电器操作手册等等,还包括了具体的领域对话。
在之上形成了不同的算法模块,包括检索、问答、拒识、排序等等,基于这些模块对外输出了不同的技术能力。
主要分为两方面,一方面是多文档、多任务、多轮次、多语言、多模态、多领域这六种面向不同场景,不同类型的解决方案,同时对于不同的文本类型,比如纯文本可能包括长文档或多文档以及说明书的富文本,基于图片的多模态交互的这三种数据语言也可以作为一个阅读理解。
在这之上,沉淀了六大场景,包括活动规则,品牌政策,法规条款,办事指南,说明书,商品百科。
三、领域覆盖
在这些场景的具体产品化输出来支撑不同的渠道,比如阿里集团,微软的商家生态以及外部的企业生态,城市服务,以及海外业务等。
覆盖的领域,比如零售活动促销,政务税务相关的法规、政策、办事指南等,还有通用的百科型的、商品指南型的手册、说明等。