对话机器人如果能够检测到服务失败的case,再强一点,最好还能够自动纠正,就和人一样,在学习中成长,在成长中学习,越来越强。理想和美好,那么怎么做呢?怎么学习呢?

对话机器人在与人交互过程中,人的反应,例如赞扬、骂人、嘲笑等,这些反应满意度的指标,天然的就是标签数据,为我们对话助手的服务打上了满意度标签,如果能够挖掘出这种标签,那么会话助手就会再和人交互中发现badcase,然后利用badcase优化模型,从而优化对话助手让它越来越强,是不是有可能呢?

对话中如何检测到服务失败的case,最好还能够自动纠正,这里面主要会包含以下的一些内容:

query聚类

2008, kdd, Context-Aware Query Suggestion by Mining Click-Through and Session Data

  1. query聚类:将query通过点击二部图计算距离,然后进行聚类,解决稀疏性问题。基于假设:如果两个query很相似,那么他们的点击URL分布也会很相似,所以通过query的点击url的分布来表示query。

其中边的权重 w i j w_{ij} wij​为 q u e r y i query_i queryi​到 url i \text{url}_i urli​的点击次数。如果一个query经常呗搜索,一个不经常被搜索,即使他们分布相似,但他们之间的点击次数会相差很大,为了消除这一影响,对于w会做一个平滑:
norm ⁡ ( w i j ) = w i j ∑ ∀ e i k w i k 2 \operatorname{norm}\left(w_{i j}\right)=\frac{w_{i j}}{\sqrt{\sum_{\forall e_{i k}} w_{i k}^{2}}} norm(wij​)=∑∀eik​​wik2​ ​wij​​

聚类距离计算:
distance ⁡ ( q i , q j ) = ∑ u k ∈ U ( q i → [ k ] − q j → [ k ] ) 2 (2) \operatorname{distance}\left(q_{i}, q_{j}\right)=\sqrt{\sum_{u_{k} \in U}\left(\overrightarrow{q_{i}}[k]-\overrightarrow{q_{j}}[k]\right)^{2}} \tag{2} distance(qi​,qj​)=uk​∈U∑​(qi​ ​[k]−qj​ ​[k])2 ​(2)

同时,聚类需要query两两计算距离,真实情况下query会十分多,这样计算效率低下,十分耗时。另外,聚类的个数也是未知的。而且不同的url作为query的表示向量,会十分巨大且稀疏。最后日志也是增量变化,类簇也需要逐步更新。

聚类算法:
对于每个类簇C也会用向量表示:
c ⃗ = norm ⁡ ( ∑ q i ∈ C q i → ∣ C ∣ ) \vec{c}=\operatorname{norm}\left(\frac{\sum_{q_{i} \in C} \overrightarrow{q_{i}}}{|C|}\right) c =norm(∣C∣∑qi​∈C​qi​ ​​)
然后query和C计算距离使用公式2. 同时用直径D度量来评价簇的紧密性:
D = ∑ i = 1 ∣ C ∣ ∑ j = 1 ∣ C ∣ ( q i → − q j → ) 2 ∣ C ∣ ( ∣ C ∣ − 1 ) D=\sqrt{\frac{\sum_{i=1}^{|C|} \sum_{j=1}^{|C|}\left(\overrightarrow{q_{i}}-\overrightarrow{q_{j}}\right)^{2}}{|C|(|C|-1)}} D=∣C∣(∣C∣−1)∑i=1∣C∣​∑j=1∣C∣​(qi​ ​−qj​ ​)2​ ​

会设置一个 D m a x D_{max} Dmax​,每个C的直径D都不能超过 D m a x D_{max} Dmax​。

同时,由于URL非常多,会造成表达矩阵维度过大,并且十分稀疏(query的平均度只有8.2,url只有1.8)。因此在寻找和q最相近的C的时候,找寻的类簇C必须要和q有过共享的url,即有过一条边(这里感觉还可以优化)

因此提出了dimension array data structure。

同时边的连接仍然会很多,作者认为其中一些权重较小的边可能会是潜在的噪声(用户随机点击),可以对其进行修剪来减少计算量。设定 w i j w_{ij} wij​为 q i q_i qi​对于 u t l j utl_j utlj​的权重(点击了多少次),那么 w i = ∑ j w i j w_i = \sum_j w_{ij} wi​=∑j​wij​,会设置一个绝对权重和相对权重的阈值来做过滤,文中设定的绝对阈值5相对阈值0.1。

query推荐:通过用户的历史查询构建session,并将query用其类簇c表示,构建后缀树来做推荐。

在对话领域,对于未知类别功能的query,可以使用此方法来对query做粗粒度聚类,然后类簇的内部在做一个细粒度的拆分,例如训练一个相似度模型来做区分。

query 改写

2017, CIKM, Learning to Attend, Copy, and Generate for Session-Based Qery Suggestion

假设:用户说的话未被理解正确,通常会换个说法再说一遍。

那么如何来挖掘出这种改写呢?


将用户历史query构建为session,通过seq2seq模型来对语义建模,生成推荐的query。

训练目标:1. 生成的损失:每个token预测和标签的交叉熵。2. copy的损失,和生成的损失类似

有用户错误、asr错误,通过这种seq2seq的模型,学习session中的语言模型,能够对其中一些错误进行纠正,获得正确的query改写。

2020, AAAI, Feedback-Based Self-Learning in Large-Scale Conversational AI Agents

假设:用户执行query失败之后,部分人还会继续尝试:1)更清晰准确地说话。2)换一种说法(复述)。3)换意图or放弃。

通过sf表征query,通过会话中的sf构建会话图,建立转移概率句子,利用消融马尔科夫,并统计每个sf的成功率,来对query进行改写。


每个h之间的转移概率来源于用户日志,每个h的成功率来自于统计的平均成功率。

这里判断一个query成功是否成功也需要一套指标体系,本文没有详细说明。

Coling, 2020, Leveraging User Paraphrasing Behavior In Dialog Systems To Automatically Collect Annotations For Long-Tail Utterances

用户用各种各样的替代query来表达相同的请求,这些query可以是一些长尾低频的表达。同时当用户的话没有被系统理解的时候,用户也会提供隐式的反馈,比如换一句话。文章提出了MARUPA方法,利用用户反馈标注,自动进行用户摩擦检测。

整体是pipeline结构,包含三个模块:

感觉这个FD如果要准确的话,和做好意图检测和槽位识别一样困难,有点悖论。

  • LP:标签映射,通过相似度将实体u最相关的实体u’召回回来,然后通过所有token的平均相似度对齐n个源token和u’的目标token,如下图:

2021, EMNLP, A Scalable Framework for Learning From Implicit User Feedback to Improve Natural Language Understanding in Large-Scale Conversational AI Systems

怎么从用户交互和对话历史的丰富信息中挖掘出用户是否满意,标注出意图。本文提出一个领域无关的框架,通过从日志数据中产生新的标注数据提升NLU的效果。

框架:

对于输入query的日志:

Model

DIM和DCM模型都是下图,输出包含三部分。1)query。2)SF,包含domain、intent、slot、得分等、3)一些手工提取的特征,

  • 对于DIM模型,预估的是是否存在缺陷。
  • 对于DMC会额外输入一个候选domain/intent的特征,预估的是是否当前候选domain/intent是一个正确的label

自动服务满意度打标

2020, kdd, IQ-Net: A DNN Model for Estimating Interaction-level Dialogue Quality with Conversational Agents

之前手工提取的一些特征来评估会话质量,但是面对多域难以迁移。通过历史会话来评估当前的会话服务满意度,主要解决的问题:

模型结构,其中融入了tts来评估服务满意度:

模型函数,预测 U t U_t Ut​的是否存在缺陷:
p ( Defect  = true ⁡ ∣ < U t , R t , U t + 1 > , f M ) p\left(\text { Defect }=\operatorname{true} \mid<U_{t}, R_{t}, U_{t+1}>, f_{M}\right) p( Defect =true∣<Ut​,Rt​,Ut+1​>,fM​)

其中 f m f_m fm​表示meta-data features,这些特征包括:

实验结果,其中baseline使用了GBDT模型:

Large-scale Hybrid Approach for Predicting User Satisfaction with Conversational Agents

评估会话的用户满意度十分重要,目前通过人工标注方法搜集输出,然后评估或者训练模型,这类方法依赖人工标注,域增加难以扩展,一种方式是收集用户的直接反馈,来训练模型。但是对于某些意图和场景可能不太适合(哪些领域呢?)因此本文提出一种hybrid approach将用户显式反馈和**用户满意度预测模型(一个基于用户反馈数据训练,另一个基于人类注释数据)**推断的用户满意度预测,能能够减少对人工标注的依赖。

对于那些意图和场景可能不太适合直接问用户呢?例如用户主动打断tts或者终止会话,询问会很不自然,这时候使用用户满意度预测模型就能够排上用处。

显示反馈的举例:


整个方法的流程:

模型的结构:

对话交互

上述各种显示反馈和显示反馈都有提及,但是但是也有显示反馈的,例如在每句话,或者任务完成时候,反馈一些点赞或者点踩的按钮。

语言模型

Style Attuned Pre-training and Parameter Efficient Fine-tuning for Spoken Language Understanding

2020, ICASSP, Pre-training for query rewriting in a spoken language understanding system

Query Rewrite

【自学习】- 怎么让对话机器人越来越强?相关推荐

  1. 如何判断一个对话机器人有多智能?

    有些对话机器人总让人崩溃,也许是智能级别不够高.本文,就来一起看看如何判断一个机器人的智能程度. 随着智能对话技术的发展,对话机器人越来越多地出现在人们的日常工作和生活中. 从企业的角度,在合适的业务 ...

  2. 对话机器人的个性设计指南

    本文讨论了对话机器人的个性设计为何如此重要,以及如何定义角色/个性.展示角色/个性. 单曲循环着呆在客厅,在夜深的时候开始码字.上海是真的入冬了,想到去年十二月初的时候还下起了小雪.不知道今年的下雪天 ...

  3. 对话机器人在瓜子的实践

    本文根据车好多NLP方向负责人王文斌老师在DataFun"AI+"Talk-- "Application of AI In Second Hand Market" ...

  4. 0代码开发,2小时上手,人人皆可DIY的对话机器人,一文看懂「竹间智能」新品发布会...

    允中 发自 凹非寺 量子位 编辑 | 公众号 QbitAI 让我们把时间拉回到56年前,MIT 的 AI Lab做出聊天机器人,说不定不是第一个,但也是非常早期的一个聊天机器人--Eliza. 它是1 ...

  5. 图灵测试70载,回顾对话机器人的经典实践和最新进展

    本文内容整理自 PaperWeekly 和 biendata 在 B 站组织的直播回顾,点击文末阅读原文即可跳转至 B 站收看本次分享完整视频录像,如需嘉宾课件,请在 PaperWeekly 公众号回 ...

  6. 对话机器人70年:科幻与现实的交融

    摘要:本文将围绕对话机器人相关技术及其在行业中应用实践展开,同时介绍华为云对话机器人在多模态.小样本.预训练方向上的最新进展. 从 1950 年图灵测试的提出到现在,对话系统已经走过了将近 70 年的 ...

  7. 智能对话机器人设计全流程

    智能对话机器人设计全流程(阿里小蜜) 8.1什么是对话机器人 对话机器人模拟人类对话聊天形式并提供服务的程序,对话机器人之所以被广泛应用,是因为名称中的对话和机器人分别和用户和服务提供方都提供了价值 ...

  8. 机器学习笔记 - 深度学习、对话机器人、微软机器人框架

    一.对话机器人概述 1.相关技术路线 (1)基于模板的对话机器人 基于模板的对话机器人是通过人工设定对话场景,并对每个应用场景编写一些有针对性的对话模板.基于模板的优点是准确度高,缺点是需要大量的人工 ...

  9. 腾讯技术直播间 | 零代码打造智能对话机器人

    随着智能客服.AI营销日益普及,你是否发现在生活的各个角落,有越来越多对话机器人忙碌的身影? 你是否想打造属于自己的对话机器人,却被繁琐的代码.复杂的模型困扰? 现在,有了腾讯智能对话平台,你就能轻松 ...

最新文章

  1. 从“创业输家”到“创智赢家”
  2. Jeff Dean亲笔盘点谷歌AI 2019:日均2篇论文,纵横16大方向,一文汇集重要开源算法...
  3. Kdevelop的安装-2种方法
  4. android自定义控件中文乱码,Android笔记--自定义View之组合控件
  5. [转贴]计算机学术期刊排名
  6. TensorFlow 1.9开始支持树莓派
  7. 制导炸弹毕业设计怎么用matlab仿真,基于MATLAB的自动控制系统仿真-本科毕业设计.doc...
  8. 经典PCB软件比较阐述—Cadence和Mentor(整理)
  9. python包之间引用_python 子包引用父包和其他子包
  10. 游戏筑基开发之结构体(数组、指针)、枚举、共用体、typdef(C语言)
  11. 图像处理中的空间域处理方法
  12. mongodb 索引1
  13. Handler.sendMessage 与 Handler.obtainMessage.sendToTarget比较
  14. win10打开蓝牙_WIN10蓝牙不能使用,开启蓝牙后不能识别到其它设备怎么办?
  15. 【Format】ASF/WMV 文件格式解析
  16. 论uni-app中,文本首行缩进两个字符解决方法
  17. APS高级排产软件解析
  18. WERTYU UVA - 10082
  19. 计算机专业的浪漫情话,计算机学科的告白情话
  20. 实现Pomodoro计时器的Vue组件

热门文章

  1. OSS判断文件是否存在
  2. chatgpt:python绘图中文乱码
  3. OpenGL实现可交互的三维三次贝塞尔曲线(实现鼠标控制)
  4. python 程序延时
  5. CSS 设置图片旋转角度
  6. 02-BTC-数据结构
  7. 混沌工程实验室丨同创助力金融行业业务连续性管理
  8. Linux 根目录/ home目录与~目录的区别
  9. 计算机工具选项卡,Word中的辅助功能——工具栏和菜单选项
  10. TypeSprict