主要是看了知乎上面一位作者写的解析,然后自己在看的过程中顺带记录一下,流程差不多,自己写的话复习比较直观快速
1、Query是用户输入的问题
2、DM(对话管理模块)层:
这一模块分为:状态追踪(对句子进行处理CQU+UU+SU)+对话策略(确定使用后续哪个功能)
状态追踪=s=(Qc,C,eQ,eR)=CQU(带背景query理解)+UU(用户理解)+SU(系统理解)
C是对话背景;
Qc是利用C对用户当前queryQ进行改写;
eQ是用户相关的各中心信息,如当前情绪、对话题的观点、个人资料等;
eR是小冰的信息,和上面类似。
CQU=实体识别+指代消解+句子补全
UU = 基于Qc和C产生eQ,包括话题+意图+情感+观点+个人资料
SU = eR,有些直接从UU拷贝,如话题等。
对话策略=依据更新后的对话状态来决定接下来的策略,也即决定这个信息是交由哪个功能处理,是核心闲聊还是某个技能。激活某个功能后,这个功能也会有自己的对话策略或者流程,来最终决定返回什么信息作为回复,称为分层决策
优化过程:RL模型和EE策略
3、核心闲聊(Core Chat)
这一块分为两类:通用闲聊(一般性信息)+领域闲聊(带主题)
话题管理(Topic Manager):分类模型。继续当前话题还是开启新话题(无法产生有意思回复或用户对当前对话感觉无聊) 新话题:话题库是利用一些高质量论坛爬取的数据构建,检索+排序:与背景信息相关性+新鲜度+用户感兴趣+流行度+接受度+boosted tree
通用闲聊:图示就是说的检索+排序
检索主要是产生response候选集,这些候选集再由排序模块进行排序。方法有三种:Paired-Data based Retriever(PDR)+Neural Response Generator(NRG)+Unpaired-Data based Retriever(UDR)
PDR:系统收集了很多query-response对(网上各种平台+小冰日志),检索器从这些qr中检索出最相关的一些候选,获取的qr使用同理心计算模块(模块2)转化成s,然后基于小冰的人设和其他规则过滤掉不合适结果。线上使用时,Qc作为检索输入,然后利用关键词搜索和语义搜索从候选库中检索出400个最相关的qr对,PDR产生的response效果很好,但覆盖面比较小。
NER:使用了标准的GRU-RNN seq2seq框架,训练数据就是收集的qr对,输入上除了Qc外,还会使用eQ,eR,
然后把v注入到解码器的每个时间点。
NRG使用beam search产生20个response。覆盖面广,效果差,生成文本一般比较短。
UDR:从网上的公开演讲和新闻报道收集unpaired句子。和PDR不同,UDR中只有候选response数据,而没有对应的query数据。所以线上使用光靠query是无法确定哪些候选response更合适,q和r之间需要一个桥梁。解决方案是引入知识图谱KG来搭起这座桥。
处理过程:
- 识别Qc中包含的所有话题
- 对于每个话题,从KG中检索出20个最相关的话题。最相关是利用boosted tree模型排序得到,模型的训练数据是人为标注。
- query中的所有topic和上一步检索的topic一起作为检索输入,从收集的unpaired的数据集中检索出400个最相关的句子作为候选response。
UDR的候选质量没有PDR好,但覆盖面更广。UDR的结果比NRG生成的结果包含更多文字。
排序:PDR\UDR\NRG生成所有的候选response,利用boosted tree模型统一排序,最终的response基本是最高的那一批结果。=局部凝聚力(DSSM)+全局凝聚力(DSSM)+同理心匹配(计算期望eR之间的匹配度)+检索匹配(BM25、TF-idf、DSSM)
编辑回复:无法回复时,口语化表述
4、对话技能(Skills)
=图片评论(Image Commenting)+内容创建(Content Creation)
+互动(Deep Engagement)+任务完成(Task Completion)
图片评论:用户发图---检索和生成候选response---排序,具体过程如下
- RR首先从社交网站上收集图片、评论对,对输入图像首先量化(CNN)等,然后检索出3张最相思图片,对应评论就是候选评论了。
- GR(Generator-based Retriever)就是image-to-text的结构,只是会融入对生成结果的情感和形式要求
- Ranker boosted tree模型
内容创建:用户设置条件,小冰创建(具体框架不知)
互动:小冰和用户一起做情绪和智能方面的互动
任务完成: