点这里排版更好

19 年的 第一篇 水文 献给 瞎折腾许久的 Dialogue 领域
考试周 还 这么闲 怕是要凉了 下次Update应该是月底了

本文 总结自 The Design and Implementation of XiaoIce, an Empathetic Social Chatbot. [Li Zhou et al. 18.12]

这篇论文 算是 很好的 解读了 XiaoIce的体系架构 包括同步一下 最近几年的 MSRA 小冰组 的研究成果

值得一提的是 大名鼎鼎的 沈向阳 博士 是 这篇文章的四作

之前 是 从机器之心 中 了解 到 这篇 文章的

但 相对于 长达 26页的 paper 那篇文章 似乎 没有 focus on key

(古月言兌 我没有 造轮子 )

Current XiaoIce

已经9102年了 XiaoIce也已经迭代了6个版本 拥有6.6亿用户 超过300亿由用户发送的 对话 数据

现在的小冰 拥有超过 230个技能 比如说 一些炫酷的功能『识别卡路里』,『失恋33天

上图 是一个典型用户 从 第一次和小冰 对话的 生疏 到聊动漫 再到之后的倾诉情感问题

在小冰的对话 中 我们可以发现 Reply 不仅仅是是一个 陈述句

比如说 Query: 哦。 一般女生喜欢什么样的男生呀, 小冰没有只回答一个描述性的语句 还给出了一个引发话题的短句Reply: 贴心温柔的,不过谁也不知道会喜欢上谁,感情的事说不准

我们的直男朋友 多学着点 呜呜呜?

至于 XiaoIce是如何拥有这种 能力的 这就是 我们接下来 想讨论的部分

如何 评价 小冰 这种 Open Domain Social long-term Dialogue System 的性能?

当然 单次对话 轮次 Conversation-turns Per Session (CPS) 是一个很重要的 指标

第六代XiaoIce现在的CPS 已经能达到 23 相较于第一代 只有5的CPS 确实 已经是 质的飞跃 (当然 这里面 肯定 也有DataSet变大 的 作用)

小冰 设计的目的 是一个 AI Companion, 试图 设计一个 能通过 分时的图灵测试 的系统

小冰 不同于 其他的Social Chatbot 在设计之初 就确定了 拥有自己独特的语言风格 或者称之为 '人'格

小冰 是一个18岁的小仙女可靠 富有同情心 亲热 又不失幽默

她还具有超高的智商和情商 (行了 直男别活了 886)

  • IQ: 为了达到IQ的目的 需要小冰具有很大的Knowledge 储备,且能做到Personality 的Memory

    • 除此之外 还要用一些vertical domain的知识 比如说 美食鉴别 XiaoIce在这方便做了230+的Skills
  • EQ: 一个高情商的表现 是极具同情心 能站在对话的角度 思考问题 而且能具有一定的社交技巧 能做到结合Memory做到个性化的回答
  • Personality: 所有Reply 必须符合小冰既有的风格

(我发现 我 连 做人 都不如小冰 ?)

Architecture

好 我们进入这篇文章要探讨的重头

从上图 我们可以看出 XiaoIce的架构 大致上 分为 三层用户交互层 对话Engine层 数据层

其中用户交互层 主要是 获取 用户数据 主要分为 回合制(Message) 即使制(Full Duplex)

他们 收集到的 都是一个个Pair<Context, Reply> 这些Pair对 会 喂到后面的Conversation Engine里面进行处理

同时也会备份到Data层

Data层 就是 持久化 单独而言 没有特殊的东西

但 从Data层中 我们其实也能看出一些 XiaoIce用的技术

比如说Profile 是小冰通过 用户对话History等资料 解构 出 相应的画像

Paired 就是 刚才从User中传入的数据 而Unpaired 则是 通过一些文本信息 新闻、讲座等 Data用于提高 生产的对话覆盖范围

Topic是主题管理索引 接下来会详细分析 Knowledge Graph是用户Unpaired Data的检索使用

Conversation Engine 部分 是XiaoIce Chatbot的核心部分

一个 Message/Full Duplex 过来 先转化为Text 或者 Image

若为Text则 进行Empathetic同情度计算 然后把输出给到Core Chat 由Core Chat 决定分配给General Chat 还是 Domain Chat

然后 调用 相应的Skill模块 检索出 400个候选集 最后经过Rank 选取最符合风格 最人性化的Reply 这样 一轮对话 就结束了

然后根据Topic Manager 进行判断 要不要 切换主题, 切换到什么样的主题 当然 主题候选集的构建 也是 其工作之一

如果是一个Image进来 则对抽取 图像的 信息 并做评价

详细来说

Dialogue Manager

对话管理器 除了 记录历史对话 还包含 对话策略 管理

对话策略 管理 即管理Skill的终端 什么时候 触发skill 什么时候 切换Skill等等

同时 Conversation还受到Topic 的管理

在Pre-Train阶段 先对Instagram 和 Douban上的数据 得到一个Topic Index

当触发一些 Topic切换的 标志的时候,比如说:

  1. Core Chat 未能生成有效的候选集
  2. 生成的响应只是用户输入的重复
  3. 用户输入变得平淡, “OK”, “I see”, “Go on”

这时候 就 会调用Topic 切换,切换之后的Topic根据以下几个指标选取:

  1. 上下文关联性
  2. 新鲜度
  3. 个人兴趣
  4. 热度
  5. 接受度

Empathetic Computing

同情度计算 算是 小冰Chatbot 相对独特的一点

它不是 直接 把Context 和 Reply进行匹配 得到一个Match Score值

而是由Query, Context, Reply 及情景分析 得到一个 s = ( Q c , C , e Q , e R ) s=(Q_c, C, e_Q, e_R) s=(Qc​,C,eQ​,eR​) 向量

再由这个向量 根据Core Chat得到 所要选的值

Contextual Query Understanding

CQU这一步 主要 做的是 句子补全的工作

首先 拿到 Context 之后 做了 一个 命名实体标识

把所有代词 用 实体 替换, 如果句子不完整 也 补全

比如说 I hate it. 在上下文中 it 指的是tomato就转变为I hate tomato.

User Understand

根据Context 对 用户的目的, 情感, 主题, 观点, 用户画像 进行分类

得到一个带有用户情绪的empathy vector e Q e_Q eQ​

比如说 这里的 目的Request, 主题music

Interpersonal response generation

看名字 可能 不要好理解 刚才 我们生成的是 带有user empathy的vector e Q e_Q eQ​

现在 我们要生成的是 带有回答者 也就是 XiaoIce的Empathy的vector e R e_R eR​

构造方式 同 e Q e_Q eQ​ 只不过 这里的属性值是PM讨论出来 写死的

Core Chat

构造好 带有用户 和 小冰 情绪的vector s s s 之后 就到了 最关键的 语言生成环节 Core Chat

XiaoIce 在处理这个问题的时候 用了 两阶段法

先 通过 某种 方式 构造一个Reply候选集 然后 根据 某种方式 计算得 每个Reply的Score 从中选出最优的

看到这里 我想大家以前跑SMNDAM检索式对话模型 的 疑问 就消失了吧

以前一直 在想 检索式 对话 检索式 对话 为啥 还会有 候选集 什么样的 条件下 会有这个候选集 ?

终于 一切 都 顺理成章了 ?

在构造 候选集的过程中 用到了 三种方式

Retrieval-based using Paired Data

数据来源于 小冰 从2014年 以来 超过300亿轮的 用户数据 根据每个 s = ( Q c , C , e Q , e R ) s=(Q_c, C, e_Q, e_R) s=(Qc​,C,eQ​,eR​) 向量-Reply 构造Index

真正使用过程中 由 Q c Q_c Qc​利用Lucene 进行查找 取前400个作为候选集

目前来看 小冰 超过 70% 的回答 来自于 之前用户的对话当中

Neural Generate

当然 单纯 靠检索 来获得数据 会漏掉一些 最近的热点 覆盖面 不会太高

这个时候 就会用生成式对话

目前一般使用Seq2Seq

在小冰的架构中 先对前面构造的s向量做一个SIGMOD操作 v = σ ( W Q T e Q + W R T e R ) v=\sigma(W^T_Qe_Q+W^T_Re_R) v=σ(WQT​eQ​+WRT​eR​) 每一轮都喂到Neural中

这样保证了生成的Response 带有XiaoIce的'人'格

Retrieval-based using unPaired Data

为了提高 小冰的 IQ (好 碾压 我们)

除了 上面的 一些 基本 操作之外 还 从讲座、新闻 等unPaired的Text中 抽取一些候选集

但因为 不是 Paired的 在构造的时候 为了 可扩展性

除了 Q c Q_c Qc​之外 还利用Knowledge Graph 搜取相近的Topic 一起 喂入

然后一样的构造 索引 一样的用Lucene得到内容

Rank

这其实就是多轮检索式对话的内容了

当然 最简单的想法 就是 算算TF-IDF 但 这样 对于长句而言 效果不会很好

就有DSSM(那个 微软 发的 开山之作) 基于交互式的SMN DAM 甚至Bert

当然 这里进行Rank的时候 还必须 考虑到XiaoIce的人设

这打分 扎心 了 直男 永远只能得0分 ?

Skills

当然 除了 最基本的Conversation之外 XiaoIce 还有很多技能

比如说 你可以 发图片给他

Image的回复 是 通过 Image-Comment 数据集 训练出来的

把Facebook Weibo这种社交网络中的 图片 及其 评论数据 爬取下来 通过CNN进行抽象 获取一个Image的vector

然后 根据这个vector 和 CNN进行索引

同样利用两阶段法 先构造候选集 再进行Rank

还能 识别 食物的卡路里 我还 特意试验了 一次 惊了

除了这些之外 小冰 还会 创作 基本套路 和 前面的基本一致

所以 惭愧的我 低下了头 摊手?

以后 有人问你 工资卡 给她管的 时候 别再说 你要留后路了

Reference

. The Design and Implementation of XiaoIce, an Empathetic Social Chatbot. [Li Zhou et al. 18.12]

直男届的杀手-『小冰』架构解析相关推荐

  1. ###好好###远离送命题: 问答系统中语义匹配的『杀手锏』

    本文将介绍一套『独创』的语义匹配方法论和一个杀手级模型 本文受众: 自然语言处理/问答系统/智能助手/搜索/推荐 等相关行业从业者 对自然语言处理/智能助手感兴趣的普通读者 1. 引子 『问& ...

  2. 『数据库』朴实无华的数据库多表查询,连接查询、笛卡尔积

    『数据库』 朴实无华且枯燥的数据库教程–入门必看!(不收藏,真的吃亏了) 文章目录 一.交 二.并 三.差 四.笛卡尔积 五.连接查询 一.交 (会用到连接运算,固定写法,连接运算在下面不用着急看) ...

  3. 女朋友生气了吗?算法比直男更懂她

    By 超神经 场景描述:利用 AI 技术判断一个人的情绪通常有两种途径,一种是通过面部表情,另一种是通过语音.前者已经比较成熟,而语音识别情感方面的研究,正在快速发展.近期,一些科研团队提出了新的方法 ...

  4. 关于『HTML』:第三弹

    关于『HTML』:第三弹 建议缩放90%食用 盼望着, 盼望着, 第三弹来了, HTML基础系列完结了!! 一切都像刚睡醒的样子(包括我), 欣欣然张开了眼(我没有) 敬请期待Markdown语法系列 ...

  5. 女朋友总是生气,读懂女朋友,直男真的不如算法?

    原创:HyperAI超神经 场景描述:利用 AI 技术判断一个人的情绪通常有两种途径,一种是通过面部表情,另一种是通过语音.前者已经比较成熟,而语音识别情感方面的研究,正在快速发展.近期,一些科研团队 ...

  6. 『统计学』第四部分:回归分析和卡方检验

    『回归分析』 『线性回归中的平方误差』 如上图,线性回归的平方误差如下: S E l i n e = ( y 1 − ( m x 1 + b ) ) 2 + ( y 2 − ( m x 2 + b ) ...

  7. 『统计学』第二部分:中心极限定理及其应用

    『中心极限定理』 首先,我们来探讨下什么是中心极限定理? 有时候统计概率就像魔术一样,能够从少量数据中得出不可思议的强大结论.我们只需要对1000个美国人进行电话调查,就能去预测美国总统大选的得票数. ...

  8. 『转载』Debussy快速上手(Verdi相似)

    『转载』Debussy快速上手(Verdi相似) Debussy 是NOVAS Software, Inc(思源科技)发展的HDL Debug & Analysis tool,这套软体主要不是 ...

  9. 『参考』.net CF组件编程(4)——为自定义组件添加工具箱图标!

    前言: 在前三篇的文章中,和大家一起创建了一个用于TCP连接检测的小组件,如果你记不得了,可以通过以下链接去回顾一下: 『参考』.net CF组件编程(1)--基础之后 『参考』.net CF组件编程 ...

最新文章

  1. IDEA IntelliJ/ DataGrip 修改自动补全快捷键
  2. R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数)
  3. 5获取http请求头_获取托管者发送http请求报文的解决方案
  4. Codeforces div2 #499 B. Planning The Expedition 大水题
  5. C++11新特性学习
  6. 【Python数据结构】——二叉查找树(查找、构建、删除、插入、打印)
  7. 01-图像ROI区域获取
  8. android电视怎么升级失败,智能电视升级失败,原因都在这里!
  9. php中is_uploaded_file()函数的用法
  10. HTML5新增的视频元素与音频元素
  11. 手把手教你用WPE“修改”各种魔兽SF
  12. malloc函数及用法
  13. ADO访问Excel 2007
  14. 记录每天背的单词,准备考研。(2月21日)
  15. 项目管理知识体系(PMBOK)
  16. linux C-kermit 安装使用
  17. 路演活动平台,怎么报名参加创业路演?
  18. Python小白自问自答
  19. 多维数据格式mdd结构与计算机配套系统,多维数据分析系统
  20. 2013年中秋节桂林旅游

热门文章

  1. Python:实现gnome sortt侏儒排序算法(附完整源码)
  2. 硬件测试的思考和改进:有道词典笔的高效测试探索
  3. 向量法计算空间点到线段的距离(python)
  4. 【设计模式02】 抽象工厂模式
  5. unable to load Private Key 6572:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\
  6. VisualNet地税管道资源管理系统
  7. 中国电信9月在京推5G新号段,资费199元至599元?
  8. Pandownload 开发者被抓了,但是其背后,百度难道不需要反思吗?(转载)
  9. 中科院计算机博士论文致谢火了!网友:读完已是泪流满面……
  10. 个人小程序和企业小程序