找回密码
 会员注册
查看: 23|回复: 0

细数vivoChatbot中的那些深度模型

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
72653
发表于 2024-10-5 11:50:06 | 显示全部楼层 |阅读模式
JEEK容易脸红的编程大神提到Chatbot,大家第一反应就是Siri,Cortana和Google Assistant。总的来说,Chatbot具备疑难解答,情感陪护等能力。在机不离身的今天,Chatbot更是手机不可或缺的配置。Chatbot主要由语义理解,对话管理,对话生成三部分组成。本文主要介绍对话生成,首先介绍它的发展历程,第二部分介绍vivo对话生成技术的探索,第三部分是总结。1发展历程Chatbot对话生成的发展历程如下图所示。检索式是通过搜索排序,给出机器回复,这种需要离线整理出大量的QA数据。优点是机器回复具有丰富的信息量,但是和用户问句的贴合度会差些。生成式是根据机器翻译的原理,生成回复。优点是和用户问句的贴合度很强,但含有的信息量不足。混合式综合两者的优缺点,在贴合度和信息量上更平衡。Fig.1 技术演进评价方法分为客观评测和主观评测。客观评测方面,检索式系统关注排序质量,主要是有准确率和召回率,MAP,NDCG等,生成式系统关注生成文本的质量,有PPL,BLEU等方法。线上指标主要有会话轮数CPS(Conversaton-turns Per Session)。主观评测方面,大致有以下几个指标:通顺性,恰当性,相关度,新颖性,一致性。通顺性指的是内容符合语法规范;恰当性指内容不涉及色情反动等信息;相关性指回复内容和用户问句语义相关;新颖性是更高一个级别的指标,期望回复内容多一些信息量,能够吸引用户的聊天兴趣;一致性主要指人格,比如对于同一个问题“你叫什么名字”,第一次回答“我叫小明”,第二次回答“我叫小v”,这样就违背了一致性。1.1 检索式Fig.2 Learning To Rank主流程[1]一般的检索系统都包含检索和Rerank两个过程。检索模块负责从海量数据库中召回相关候选,一般通过lucene或ElasticSearch服务实现。Rerank模块负责对检索的结果计算相似度并重新排序。从早前的svm等模型发展到现在深度排序模型,对开发者的使用门槛降低了很多。之前需要复杂的特征结构,包括同义词,短语,词性等方面的匹配,现在只需要输入自然语言文本,只要数据够多,就可以获得不错的效果基线。排序模型主流都是基于Learning To Rank方法进行学习的,流程如Fig.2所示。训练过程类别有三种:Point-wise,Pair-wise,List-wise。这些是基于优化目标区分的,不在这里展开。虽然检索式系统能够提供很好的效果,但由于检索库是离线准备的,一方面对用户的人设,情绪不能灵活适配,另一方面构建大而全的检索库维护成本也很高。1.2 生成式生成式对话是继检索式对话后的另一解决方案。由于能生成贴近用户问句的机器回复,并且在线系统架构简单,近些年成为学界研究的热点。目前主流框架是Encoder-Decoder,研究集中在两大块,提升生成语义质量和接入更多外部信息。接入外部信息可以让生成回复更吸引用户,具体的外部信息见Fig.3。Fig.3 生成模型的一些热点研究方向1.3 混合式混合模式,指的是将检索和生成融合在一起work,类似于多个模型的集成。融合模式有很多种,第一种是阈值控制,即利用阈值控制走那个模式,例如AliMe Chat[2]。第二种[3]是检索作为生成的输入,即利用编码器将用户问句和检索的数据一同编码再送入解码器,这个好处是可以生成更平滑更相关的对话文本。第三种[4]是通过检索候选文档,并从候选文档里提取出对话文本,该方法提取的对话文本噪音较小。2技术探索vivo的Chatbot对话生成也遵循着从检索到生成的演进,下面分别介绍这两块的探索历程。检索式Fig.4 检索系统主流程如Fig.4所示,先通过检索引擎从QA库中检索出相关候选,再通过匹配算法计算post和候选posts的相似度,进而排序出最相关的候选post。下面按照主要节点进行介绍:QA库QA库是检索系统的核心之一,高质量并且覆盖面广的QA库就可以提供很好的基础效果。闲聊领域的QA库可以建设到上亿量级。检索层的目的就是从海量的QA库中挖掘出和用户Post最相关的一组 。QA库的高质量体现在Post和Response语法正确,同时Response要保持和Post的主题相关。语法正确方面,除了传统的语言模型打分之外,我们还根据数据特点做了一些定制。由于Post是通过语音转写引擎(ASR)来的,难免会有一些问题,比如,问句容易中断,夹杂一些语气词。我们想到了一个根据句法分析的方法,提取共现依存结构,这个就过滤掉很多由ASR产生的垃圾问句。主题相关方面,我们利用了无监督方法:QA共现词,即根据大语料集通过互信息计算共现词对的概率,再根据阈值截取出固定数量的共现词对。这个共现词对就可以用来计算Post和Response的相关度了。共现词出现的次数越多,主题相关度越高。Match层Match层是计算候选 和用户post之间的匹配程度。为求简化,我们匹配目标是 (分别指用户post和候选post)。我们最开始研究的是用深度模型做Match,即深度match。第一个尝试的深度模型是DSSM。DSSM[5]Fig.5 DSSM网络结构这个模型的特点是分别对postuser和postcand进行单独编码,编码方式是MLP。最后对编码结果计算余弦相似度。考虑到新词会出现的OOV问题,我们没有采用word级别而是选用char级别作为输入。该模型没有考虑到语序信息,类似一个词袋模型。比如“我帮过你”和“你帮过我”模型就无法区分。同时对于否定词和反义词也不敏感。比如“我喜欢运动”,”我不喜欢运动”,相似度也很高。为了快速解决业务中的这些问题,我们加入了传统文本匹配方法,即浅层match。浅层match中,最开始想到的是基于编辑距离方法,字面上越相似,语义越相相近,但是高精度下的召回率很低。为了提高相似post的召回,我们把词与词间的硬匹配改成了软匹配,匹配置信度[0,1],软匹配策略采用了词林,hownet,预训练词向量模型[6]。我们在精度为90%下,比较了正例(相似post)召回率,见Tab.1:Tab.1 软匹配策略对召回率的影响从结果上看,词向量的召回能力最好,反倒是加入hownet的召回变差了。这给我们的启示是单看两个词间的相似度很难决定两个post的相似度。为此,我们加入词在当前post的重要程度,这个作为词间匹配的权重,具体是通过统计词的idf值来实现。同时我们也增加一些trick:针对新词,我们选用当前句中最大的词权重赋值,这样可以避免误匹配;针对否定词和反义词我们在浅层匹配也做了对应得分惩罚策略。但测试过程又发现了其他问题,“vivo最好的手机”和“vivo最薄的手机”,两句话中的词都是一些idf值很小的词,这样只有一个词不一样,匹配度自然也很高。其实idf权重是全局的,不能完全反映词在不同post中的重要性。怎样描述不同post的重要词,我们想到了词性。在上面的例子中,“最好”和“最薄”才是两句话的核心词,但同时它们也是修饰词。于是我们又新增另一个维度的特征:具有相同词性的词相似度。对于上面的例子,在修饰词词性上两者的词相似度为0,这样最后post间匹配度很低了。浅层match虽然解决了很多badcase,但其召回能力毕竟有限,我们需要泛化能力更强的深度模型。为了解决DSSM的上下文无感问题,我们尝试了Transfomer:Transformer[7]Fig.6 Transformer结构我们使用了它的编码层。编码层利用self-attention机制考虑到上下文信息,同时加入位置embedding,对postuser和postcand的表示大大增强。相比于rnn,它的运算速度会快很多。在我们的任务里面,除模型之外,训练语料也是效果的重要保证。通过人工标注的训练语料积累速度慢而且成本高。我们注意到学术上预训练模型的优异表现,预训练模型是基于大量语料训练的产物,这也是对我们任务的一个补充资源。Bert[8]Fig.7 Bert模型结构相比于GPT、ELMo,Bert采用了双向Transformer结构,并且用了Masked LM和Next Sentence Prediction两种方法分别捕获词语级和句子级别的表示。Bert训练有fine-tuning和no fine-tuning两种模式,在自己的数据集上验证后效果差别不大,如Fig.8所示。同时我们也发现no fine-turning模式训练收敛速度要快很多,这也很好解释,更新的参数少了很多。Fig.8 有无 fine tuning的效果对比为了对比上面三个模型的效果,我们在测试集上做了验证:Fig.9 三种算法的效果对比从Fig.9所示ROC曲线来看,Bert > Transformer > DSSM。虽然Bert效果很好,但在线响应速度却是最慢的,这也是亟待解决的问题。融合层浅层匹配的精度高,深层匹配的召回高。能否做到1+1 > 2,我们在融合层进行了尝试。融合的方法是最简单的得分权重融合。融合后保持精度达到95%,测试召回率。从结果上看,融合后效果优于单个模块,这也验证了我们的想法。Fig.10 召回率随融合权重的变化曲线生成式检索式系统依赖的是大规模的QA库,由于前期业务系统积累的有效数据并不多,线上问句的检索命中率并不高。我们开辟了第二战场,从生成式方向入手,希望生成模型能够对那些长尾问句给出相关的回复。我们第一个尝试的是经典的seq2seq Attention模型:seq2seq Attention[9]Fig.11 seq2seq Attention的网络结构这个模型是在seq2seq上做改进的,经典的seq2seq在解码过程中并不会考虑输入序列x中词对解码的贡献度存在高低区别,而利用attenton机制,可以在解码中动态计算序列x中词的贡献度,从而精确解码出目标词。Tab.2是其生成的样例。Tab.2 seq2seq Attention的生成效果从样例来看,高频问句能够给出不错的回复,但长尾问句就容易得到安全回复“我也是这么想的”。为了提高生成的多样性,我们首先尝试了Beam search技巧,通过Beam search,可以获取top n个候选回复。然后设置一些排序规则给出最优候选。虽然能降低安全回复出现的概率,但由于仅作用在预测过程,没有从根本上解决问题。同时候选越多,预测耗时越久。生成安全回复的原因大致如下:首先训练语料中的安全回复频率就很高,其次有意义的回复多种多样,特别是有些相似的post会对应多个语义完全不同的回复,这样使得模型更偏好学习安全回答来降低惩罚,因而很容易导致模型仅拟合到局部最优解。如果加入其它loss,能否干预寻找最优解过程,于是我们通过提高QA共现词的生成概率来干预。QA共现词指经常成对出现在问句和回复中的词对,比如。我们尝试的是memory嵌入,参考的是ECM。ECM[10]Fig.12 ECM网络结构ECM是通过某个情感极性控制生成与之匹配的文本。情感嵌入共有三个部分,情感极性的embedding,隐层情感memory,外部情感memory。外部memory通过使用类型选择器达到干预生成情感词的目的。受此启发,我们将QA共现词也存储在外部memory中。实验结果显示,虽然长尾问句生成的相关性提高了,但生成的通顺度却降了很多,容易生成多个主题。分析后发现QA共现词对虽然是高频的,但同一个词容易混入多个主题,比如,分别对应喊叫、生病两个主题。后续一方面我们会将主题信息嵌入到编码过程,提高主题的感知能力,另一方面考虑加入对抗学习,让判别器的reward干预生成模型的训练。3总结我们回顾了对话生成的发展历程,以及vivo在检索式对话和生成式对话上的探索。但一款优秀的ChatBot,除了提供闲聊能力还要和人一样,具备人设,常识推理,情感交互等能力。未来我们会继续在以下几方面提升和探索:闲聊能力上,继续扩充QA库,同时改进检索模型和生成模型,并探索两类模型融合的方法;常识推理上,我们会接入常识知识库,依靠检索的知识生成贴近用户表达的回复;个性化上,探索如何在回复中嵌入人设信息;情绪交互上,让机器人能够感知用户情绪,并作出积极回应。参考文献[1]http://kubicode.me/2016/02/15/Machine%20Learning/Learning-To-Rank-Base-Knowledge/[2] Minghui Qiu et al. AliMe Chat: A Sequence to Sequence and Rerank based Chatbot Engine. ACL 2017[3]Yiping Song et al. An ensemble of retrievaland generation-based dialog systems. arXiv preprint arXiv:1610.07149, 2016[4] Jinhyuk Lee et al. Ranking Paragraphs for Improving Answer Recall in Open-Domain Question Answering. ACL 2018[5]Huang P S, He X, Gao J, et al. Learning deep structured semantic models for web search using clickthrough data[C]// ACM International Conference on Conference on Information & Knowledge Management. ACM, 2013:2333-2338[6] https://zhuanlan.zhihu.com/p/47133426[7] Ashish Vaswani et al. Attention Is All You Need. NIPS 2017[8] Jacob Devlin et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.[9] Dzmitry Bahdanau et al. NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE.ICLR 2015[10] Hao Zhou et al. Emotional Chatting Machine: Emotional Conversation Generation with Internal and External Memory. AAAI 2018回顾上篇:强化学习应用:强化学习在NLP领域的应用综述PPT技巧之观点呈现强化学习入门:手把手教你用90行Python代码实现Q-learning
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-11 21:09 , Processed in 0.445594 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表