使聊天机器人的对话更有营养
本文结构:
- 模型效果
- 模型
- 模块细节
今天的论文是 《Topic Aware Neural Response Generation》
https://arxiv.org/pdf/1606.08340.pdf
这篇论文的目的是让聊天机器人的回复更有营养,例如下面这种场景,要尽量避免‘我也是’‘明白了’‘不知道’这种没有信息量的回复,而是可以给出一些建议和方案等:
模型
思路是输入句子后,先预测 topics,再根据 topics 生成回复。
文章中通过建立 topic aware sequence-to-sequence (TA-Seq2Seq) 模型来实现这个过程。
TA-Seq2Seq 建立于 sequence-to-sequence 基础上,再加上一个联合注意力机制。
关于 seq2seq 的模型细节可以看这两篇文章:
seq2seq 入门
seq2seq 的 keras 实现
简单回顾,
1. seq2seq
是个 encoder-decoder 结构,两部分都是 RNN 模型,RNN 可以选择 LSTM 或者 GRU;
输入句子 X = (x1, x2, … , xT ) ,
输出句子 Y = (y1 , y2 , … , yT` )
目标是要最大化条件概率:
其中 c 为 encoder 的 RNN 模型得到的 context vector。
2. 注意力机制
简单讲,就是一般的 seq2seq 中,回复句子的所有单词都是由同样的语境生成,而加入注意力机制后,回复中的每个单词是由输入句子的不同部分生成的。
即 Y 中的每个单词 yi 由语境向量 ci 影响,其中 ci 是隐向量的加权平均:
模块细节
接下来根据前面的 TA-Seq2Seq 模型结构图看一下细节。
TA-Seq2Seq 的 encoder 和 decoder:
1. 在 encoding 中,
- message encoder 通过一个双向的 GRU 模型,将输入 X 表示成隐向量 ht。
- 再用提前训练好的 Twitter LDA 模型获得 topic words 的向量表示:
Twitter LDA 模型的参数根据 collapsed Gibbs 采样算法求得,
Twitter LDA 会给输入 X 分配主题 z,选择概率最高的前 100 个单词,并且移除 “谢谢” “你” 等普遍的词,最终得到 X 的主题词 K。
这里 K 的向量表达由每个主题词 w 的分布计算得到:
其中 Cwz 为 w 被分配到主题 z 的次数。
2. 在 decoding 中,
每个单词都通过一个联合注意力机制,由输入句子和主题共同影响生成,这样生成的句子不仅和输入有关,而且和相关主题有关。
decoding 时,每一步时隐向量 h 被转化为 ci:
主题向量 k 也被线性组合为 oi,每个 kj 对应的系数为:
其中 hT 是输入句子的最终隐藏层状态,η0 是一个多层感知器,这么做可以削弱与主题无关的词的影响,加强相关词的影响度,即 oi 与输入的内容更相关,减少了很多噪音。
然后由 ci 和 oi 联合影响着生成句子的概率,
即每个单词的生成概率定义为:
p(yi) = pV (yi) + pK (yi),
其中 V 是回复词汇表,f 是一个 GRU 模型, Z 是正规化因子,并且:
这里的 σ(·) 为 tanh,w 为单词的 one-hot 表达,其余的 W 和 b 为参数。
这个生成概率定义的作用是,
对于非主题词,pV (yi) 就和 seq2seq + joint attention mechanism 类似,
但对于主题词,就有额外的一项 pK(yi) 可以增加主题词在回复中出现的概率。
这种联合影响还有一个好处,
一般的 seq2seq 生成回复中第一个词只由 c0 决定,这里是由 c0 和 o0 共同作用,使得回复的第一个词更加贴切主题,第一个词准了对后面生成词的影响也很重要。
推荐阅读
历史技术博文链接汇总
也许可以找到你想要的:
[入门问题][TensorFlow][深度学习][强化学习][神经网络][机器学习][自然语言处理][聊天机器人]
使聊天机器人的对话更有营养相关推荐
- 聊天机器人在对话中的知识提取
聊天机器人在对话中的知识提取 目 录 1.引言 1 2.相关工作 2 3.知识提取过程 3 1.1研究方法 3 1.2答案聚类 5 4.构建一个神经会话代理 7 4.1模型 7 4.2数据集 7 4. ...
- python对话机器人软件_如何用Python为聊天机器人创建对话?
我想写一个快速简单的聊天机器人,可以携带与用户的对话.我想知道如何创建对话,允许无限量的输入和响应.现在我使用的代码不允许用户定义输入.这就是我现在正在使用的代码.在# Import the rand ...
- 入选最受关注AI公司的Kitt.AI:多轮对话聊天机器人开发也可以很简单
移动互联网发展之初,很多习惯了开放.自由的PC网民是充满绝望的,他们把手机上各个App之间无法跳转.内容封闭的情况称为"信息孤岛".这可能是聊天机器人,即chatbot随着人工智能 ...
- 对话式服务思考,如何在 Messenger 用聊天机器人做好客户服务
目录 有没有这样的经历 设计聊天机器人的定位和画像 聊天机器人的对话结构 新手引导和帮助 添加对话能力 添加产品介绍 添加业务联系 添加体验技能 处理错误 示例程序 接下来 有没有这样的经历 作为一位 ...
- 独家 | 聊天机器人开发中的机器学习(附链接)
作者:Omkar Prabhune 翻译:方星轩校对:王雨桐本文约2800字,建议阅读5分钟 本文作者从聊天机器人的种类.用途以及架构等角度介绍目前的聊天机器人技术,并在文末分享了一些聊天机器人行业的 ...
- Facebook 开源聊天机器人Blender,经94 亿个参数强化训练,更具“人情味”
来源:AI前线 作者 | Kyle Wiggers 编译 | Sambodhi 策划 & 编辑 | 刘燕 不久前,Facebook 开源了号称是全球最强大的聊天机器人 Blender,它标志着 ...
- SIGIR 2021 | Pchatbot: 大规模个性化聊天机器人数据集
©PaperWeekly 原创 · 作者 | 金金 单位 | 阿里巴巴研究实习生 研究方向 | 推荐系统 简介 自然语言对话系统最近引起了极大的关注.由于许多对话模型是数据驱动的,因此高质量的数据集对 ...
- 独立站运营 | FaceBook营销神器——聊天机器人ManyChat
ManyChat 是什么? Manychat 是Facebook 这个即时通讯软件推出的插件,其本质上就是一个可以由用户动手DIY定制的聊天机器人.用户可以通过定制流程的方式,来设置聊天机器人的话术. ...
- MILABOT:基于深度强化学习打造聊天机器人
下面,我们介绍论文的主要思想和创新之处. 系统概览 早期的对话系统主要基于由专家人工制定的状态和规则.而现代对话系统通常使用组合学习的架构,将手工定制状态和规则组合到统计机器学习算法中.由于人类语言的 ...
最新文章
- 使用CSS3美化复选框checkbox
- 嵌入式开发「坑」太多?MathWorks 高级工程师教你 debug
- 如何确定敏捷是否适合你的团队?
- 11.10错题集(7-函数)
- 【Python】七段数码管绘制日期年月日
- 已解决 问题ModuleNotFoundError: No module named ‘tensorflow.examples.tutorials‘
- Chapter4 Java流程控制之选择结构
- 如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件 .
- 如何在 C# 中使用 RabbitMQ
- 移动端照片上传、头像裁剪完整功能,兼容iphone,android (一)
- Map遍历KeySet()和EntrySet/ Map.forEach的性能分析
- apache poi excel显示 base64 图片_java操作Excel一:POI
- 基于Java的连连看游戏设计与实现(含源文件)
- python:双色球随机选号
- 为什么你写了一万小时的代码,却没能成为架构师?| 程序员有话说
- Python 读取5张Excel的Sheet自动生成3张Sheet分析结果(减轻同事的工作量,让原本大约2个小时的工作量缩减到1分钟内)
- RPG Maker MV 密码宝箱
- 最详细G1垃圾回收器日志解读
- C#基础 uint,long,ulong,float,decimal 定义并初始化
- 协同学:大自然构造的奥秘--哈肯
热门文章
- Java基础面试题(建议收藏)
- 如何设计一个“高大上”的 logo
- M1pro mac登陆EasyConnect报错“未能正确打开SANGFOR SSL Virtual网卡,暂时不能提供SSL CS服务,请联系管理员”
- 详解三次握手和四次挥手:遇到心动的女孩时,如何去把握?
- 广和通LTE-A模组FM101-NA率先取得北美运营商T-Mobile认证
- 苹果正式发布全系列新款iPod
- AI一分钟就能生成个性动漫头像?分享一个超好用的AI卡通头像生成器
- java实现 串口通讯
- 为什么中国做不出《旅行青蛙》这样的游戏?
- python 手机测试_python测试Android手机应用