端到端对话模型新突破!Facebook发布大规模个性化对话数据库
作者|Pierre-Emmanuel Mazare 等
译者|郝毅
编辑|Debra
出处丨 AI 前线
AI 前线导读:聊天机器人是目前非常流行的一种人工智能系统。目前大部分聊天机器人的衔接性都不是很好,尤其是在没有主动的重调优策略下训练出的端到端系统中。一些研究成果表明,在训练端到端的对话模型过程中,对模型添加一些个性化的背景故事将其“拟人化”可以有效的的提高模型的对话衔接性。然而,这种个性化的数据库是通过人工合成的,并且仅包含 1k 个不同个性的人物。针对这一缺陷,Facebook 发布了一个全新的对话数据库,该数据库包含超过五百万个不同个性的人物以及七百万个基于人物的对话。译者对这一数据库做了简短的介绍,并讨论了其对于个性化对话系统发展的影响。
背 景
基于神经网络的端到端对话系统,在多种情况下都取得了突出的效果,例如使用双向 LSTM 或记忆网络直接在对话数据库上进行训练的模型。这种方法最主要的优势之一是吗,基于大量的数据源,模型可以在不需要其他专业知识的情况下,学习涵盖各种领域的对话。然而,在短时对话的情景下,这种模型的对话衔接性会出现明显的缺陷。这是由于它们缺乏一致性的性格特征,并且没有使用主动的调优策略。
为了解决这一问题,Facebook AI Research 的研究人员使用名为 PERSONA-CHAT 的数据库进行训练,该论文(https://arxiv.org/abs/1801.07243) 发表于 NIPS2018。PERSON-CHAT 数据库包含超过 16 万条对话,与传统对话数据库不同的是,改数据库赋予每个对象一种实例化的人格,这将有助于提高模型在对话过程中的一致性。论文中提到,将一个端到端的系统限制在某种给定的人格环境下,可以有效的提高聊天 机器人的对话一致性。这成为了训练端到端的个性化聊天机器人的敲门砖。然而,PERSONA-CHAT 数据库是一个人工数据集,它是由基于 Mechanical Turk 的系统生成的。因此,无论是对话内容还是人物角色的数量都不能涵盖真实的用户 - 机器人式的交互场景,该数据集仅包含了超过 1000 个不同的人物角色。
针对 PERSONA-CHAT 存在的缺陷,Fackbook 的研究人员建立了一个基于人物对话的大规模数据库。经过简单的预处理,研究人员使用从 REDDIT(一个大型社交新闻站点) 的收集到的对话进行整理,得到了超过 500 万种人格的超过 7 亿条对话。研究人员在这个数据集上进行训练,与在 PERSONA-CHAT 上训练的同结构模型相比,取得了更好的效果。此外,在该数据库上进行预训练后的模型 PERSONA-CHAT 数据库上也取得了目前领先的结果。
建立百万规模的个性化对话数据库
我们的目标是在多样化的人物角色中学习一种基于人物的回复。从这点出发,我们使用源自 REDDIT 的数据建立了以下形式的数据库:
- 角色:["I like sport","I work a lot"]
- 语境:"I love running."
- 回复:“Me too! But only on weekends.”
“角色”是一系列可以表示聊天机器人角色特征的语句,“语境”是指需要对其作出应答的句子,“回复”是需要作出的回答。这便是该数据库的基本形式,建立一个这样的数据库通常需要以下这些步骤:
- 数据预处理:这一步的主要工作是将原始的语句进行标记化,经过处理,研究人员获得了超过 25 万个常用的 token。
- 角色提取:通过收集同一个用户的评论,并使用既定的规则进行筛选,可以得到不同性格和背景的“角色”,以及“角色”所对应的“语境”与“回复”。具体的规则在论文的 3.2 部分有详细说明,感兴趣的读者可自行阅读。上面的示例中的 persona 便是这一部分期望得到的结果,但有的时候,“回复”并不一定跟“角色“”有明显的对应关系,这是因为同一个用户可能会发表矛盾的言论。
- 数据集创建:将“语境”和“回复”进行组合,便得到一组样例。与“回复”相对应的人物角色可由第二步中的方法进行提取。随后将数据库随机划分为训练集、验证集和测试集。验证集和测试集保含超过 5 万组样例。仅适用训练集提取人物角色:测试集的“回复”不能被明确的包含于某个特定“角色”。
端到端的对话模型
这篇论文使用语言检索 (next utterance retrieval) 的方法建立对话系统,语言检索的方法是指通过在一组候选语句中选择一个最佳语句做为对话的回复,而不是通过生成的方法得到回复。
1、网络结构
图 1:Persona-based network architecture
该模型的框架如图 1 所示,论文使用了两个分离的模块对人物和语境进行编码,然后使用 1-hop 记忆网络和残差学习的方法对编码结果进行组合得到一种联合表示。参考 PERSONA-CHAT 这篇论文,本文的作者使用了与其类似的方法也对候选的回复进行了编码,并计算了其与上述联合表示的点积。预期的回复应当是使得该点积最大化的候选语句。
训练过程使用 softmax 分类器对点积的效果进行约束并最大化正确回复的对数似然比。在训练过程中,对于某个样例,还使用了其他样例的回复作为负样本进行训练以提高模型的泛化能力。
2、语境和回复编码器
语境和回复编码器使用了相同的网络结构与词嵌入,但使用不同的权重。本文的作者使用了以下三种不同的编码器结构作为语境和回复编码器的结构:
- Bag-of-words:使用两个线性映射对输入语句进行词嵌入 (word embedding),然后对一句话中所有的编码表示进行求和并除以 sqrt(n),其中 n 是这句话的长度(译者注:可以理解为一种归一化处理)。
- LSTM:使用两层双向 LSTM 网络,将最后一个隐层的输出当作编码后的语句。
- Transformer:该结构是由 Vaswani 等人于 2017 年提出的一种端到端的记忆网络。基于自注意力机制,在语言检索任务 (next utterance retrieval) 上取得了领先的效果。本文仅使用了该网络的编码器部分,然后进行归一化得到固定大小的表示。
3、人物角色编码器
针对每个人物角色,人物角色编码器都会分别编码。它使用和语境编码器相同的词嵌入方法。然后对这句话中所有的编码表示求和。由于对于每个人物角色,都需要不同的编码器进行训练,因此本文的作者专门选择了更简单的编码器结构作为人物角色编码器。这是由于在一个 mini-batch 中,人物角色编码器的个数比其他编码器个数大一个数量级。并且,大多数的人物角色数据都是一些短句,因此作者使用了 bag-of-words 表示直接作为其编码表示。
实验部分
针对上述的编码器,本文作者使用了 Adamax 对网络进行优化,其中学习率为 8e-4,mini-batch 的大小为 512。同时,本文使用了 FastText 词向量进行初始化,并在训练过程中对其进行了优化。其他具体的训练参数可阅读英文原文。
1、人物角色信息的影响
在 reddit 任务上的结果,本文使用了不同的结构进行了实验,结果如下表所示:
可以看出对于三种不同的编码器结构,增加人物角色信息都可以有效的提高检索精度。图 2 是经过训练后模型的部分结果示例,可以看出聊天机器人系统给出的回答基本符合它的个性化人物角色属性。
图 2:最好模型的预测结果。
所有的情景中人物角色由一个单句组成,回复被限制在为包含 10 个 token 的短句,它是从 100 万个从训练集中随机选择的候选句中检索到的。
2、迁移学习
本文比较了使用 PERSONA-CHAT 和 REDDIT 两种数据库进行迁移学习的效果,实验结果如下表所示:
可以看出在 POERSONA-CHAT 数据库上进行训练的模型直接在 REDDIT 数据库上的验证效果很差,而在 REDDIT 数据库上训练的模型在 PERSONA-CHAT 数据集上可以表现出不错的效果。表中的 FT-PC 意为:在 REDDIT 数据库上进行训练并在 PERSONA-CHAT 进行微调。可以看出使用 REDDIT 预训练后的模型迁移到 PERSONA-CHAT 数据库上的效果远优于在 PERSONA-CHAT 上直接训练的效果。
英文论文原文:
https://arxiv.org/pdf/1809.01984.pdf
相关文章:

上传文件大小的配置Webcong
修改Webcong文件:<system.web><httpRuntime maxRequestLength"40690" useFullyQualifiedRedirectUrl"true" executionTimeout"6000" useFullyQualifiedRedirectUrl"false" minFreeThreads"…

1001 A+B Format
由于逗号的有无是从末尾数起,满足三个数(且高位还有数)就加逗号,所以有必要把字符串反转,然后寻找数组下标和3的关系 #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace st…

[转]数据库建立索引的一般依据
建立索引常用的规则如下: 1、表的主键、外键必须有索引; 2、数据量超过300的表应该有索引; 3、经常与其他表进行连接的表,在连接字段上应该建立索引; 4、经常出现在Where子句中的字段,特别是大表的字段&…

为图片添加半透明遮罩效果
平时为图片添加半透明遮罩效果,我的做法如下:利用标签i实现背景半透明遮罩。当鼠标hover时, 提高i的背景色透明度值background-color: rgba(0, 0, 0, .6) <p class"opacity-black-position"><a href"#"><img src&quo…

linux下typora安装
# optional, but recommended sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA300B7755AFCFAE# add Typoras repository sudo add-apt-repository deb https://typora.io ./linux/ sudo apt-get update# install typora sudo apt-get install typora

1005 Spell It Right
基本步骤是:100位的数字longlong也存不下,作为字符串读入,对字符串进行遍历,每个字符减去0加到总和sum上,再将整形的总和sum转化为字符串,对得到的字符串进行遍历,将每个字符映射到英文单词上。…

C#多线程学习(四) 多线程的自动管理(线程池) (转载系列)——继续搜索引擎研究...
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPool(线程池…

使用Node.js快速搭建WebSocket server
原文地址:http://my.oschina.net/yushulx/blog/309413 目录[-] 安装服务端客户端参考安装 ?1npm install ws服务端 server.js ?12345678var WebSocketServer require(ws).Server, wss new WebSocketServer({port: 8080});wss.on(connection, function(ws) {ws.o…
android采用MVP完整漫画APP、钉钉地图效果、功能完善的音乐播放器、仿QQ动态登录效果、触手app主页等源码...
Android精选源码 一个可以上拉下滑的Ui效果,觉得好看可以学学 APP登陆页面适配 一款采用MVP的的完整漫画APP源码 android实现钉钉地图效果源码 一个使用单个文字生成壁纸图片的app android 仿QQ动态背景登录效果源码 功能完善的Android 手机本地音乐文件播放器 andr…

1035 Password
很适合用结构体数组的一道题 #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std;struct info{char usr[11]"";char pwd[11]"";bool changed false; }infos[1010];int main(){int n,…

Android -- DrawerLayout
抽屉效果的导航菜单 喜欢知乎的都应该装的用知乎日报吧~这里指Android的不是IOS的。知乎日报的导航菜单就是用DrawerLayout实现的。 觉得这种侧滑的抽屉效果的菜单很好。 不用切换到另一个页面,…

Socketserver 笔记
引入Socketserver的背景:我们之前使用socket编程的时候,Server端创建一个连接循环(建立连接)一个通信循环(基于一次连接建立通信循环),(这里的黏包问题我们的实现方式是:…

Delphi 调用C#编写的WebService 参数为Null解决方法
今天测试.net 2.0的WebService,发现了一个大问题。就是无法获取参数,参数永远是null。当然了使用.net调用 没有任何问题,web测试页也正常。不论是Delphi7还是java调用的结果的都是一样的,难道是.net 2.0的Bug? 测试结…

1025 PAT Ranking
1. 考生的编号是数字字符串,但是没必要转化成整数再比较,可以直接用strcmp() 2. 对整体的排名进行编号时所有信息都已经齐备,可以边编号边输出 3. 需要有些思量的地方是部分编号,当当前学生的分数不等于他上一个该怎么办 4. 真…

C#编写的多生产者多消费者同步问题
// 多个生产者和多个消费者,能生产n个产品的情况using System; using System.Threading;public class HoldIntegerSynchronized{private int[] buffer; //缓冲区private int occupiedBufferCount 0;private int readPosition 0 , writePosition 0;//下一个读到的…

展望2009,回眸2008
2008年真正的过去了,已经感觉不到2008年的存在。 2009年来了,似乎真正的来了。 生活的压力更大了,工作也不太顺利。 希望越来越好,也不知道是不是真的该跳槽了。 待在这里很郁闷。 转载于:https://www.cnblogs.com/tacker/archive…

m_Orchestrate learning system---七、如何快速学好前端
m_Orchestrate learning system---七、如何快速学好前端 一、总结 一句话总结:看视频啊,系统看视频啊 1、如何解决单词数字太长超出边界的问题? word-wrap 把编辑删除都挤跑了 2、amaze ui中a标签和button标签可以互换么? 其实弄上…

1062 Talent and Virtue
1.在结构体里面设置total_grades属性是明智之举,但是不可以在结构体内得到total_gradesvirtue_gradetalent_grade; 2.弄清题意,对人进行分类,等级越高type值越小,但是注意分的类别也许出现交叉的情况,细的要出现在粗的…

用百度直达号获取新用户 让顾客直达商家服务
直达号是什么? 直达号,商家在百度移动平台的官方服务账号。基于移动搜索、账号、地图、个性化推荐等多种方式,让顾客随时随地直达商家服务。 直达号其实就是两个功能: √ 提供一个手机网站模板,入住商家可以建自己的手机网站。…

【Quartz】实现接口封装化(二)
原文:【Quartz】实现接口封装化(二)前言 通过昨天的努力终于算是了解Quartz这个定时器的简单使用,为了更深一步的了解和基于以后希望在项目中能使用他。所有我对他做了一下简单的封装操作,便于以后从新建立新工作和触发器&#…

怎么成为优秀的软件模型设计者?
作者:Scott Ambler著,乐林峰 译 本文选自:www.umlchina.com 2002年03月25日 我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢? 将下列原则应用到你的软件工程中&…

1012 The Best Rank
思路:读入全部的数据之后,按照四个cmp函数对数组进行排序,给每生的4个科目的排名赋值,读入要检验的id后使用strcmp对数组中的id进行遍历(幸好这里数组大小和要检验的数目乘积不超过4万),如果找到了相同id,调用写好的得…

SDWebImage使用——一个可管理远程图片加载的类库
SDWebImage托管在github上。https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。 将SDWebImage类库添加入工程时,一定注意需要添加MapKit.framework&…

EXECL使用技巧(转)
2007-03-18 09:07 一、求字符串中某字符出现的次数: 例:求A1单元格中字符"a"出现的次数: LEN(A1)-LEN(SUBSTITUTE(A1,"a","")) 二、如何在不同工作薄之间复制宏: 1、打开含有宏的工作薄,…

微信小程序(canvas)画图保存到本地相册(wepy)
html标签部分 因为这个需要用户授权 所以需要使用button,画布使用的是canvas,这个可以参考小程序官方文档,代码如下 <button classbtn type"default" open-type"getUserInfo" tapexportImg>生成图片保存到本地&l…

1016 Phone Bills
目录 概述: 一些小的注意点 AC代码 概述: 这道题是我迄今做出来的最复杂的一道PAT了,该题被归类到排序专题下,其实还涉及到大量的字符串处理等别的我暂时也说不出的知识点。 排序函数我写了两个,1是cmp࿰…
C# GDI+ 简单绘图 (三) 仿浏览器截屏效果
感谢大家的支持,这几天从早忙到晚,一个字累呀!!!现在挺困的,但是又不习惯这么早睡觉,哎~~还是利用这个时间继续来写第三篇吧. 前两篇已经基本向大家介绍了绘图的基本知识.那么,我就用我们上两篇所学的,做几个例子. 我们先来做一个简单的----仿QQ截图,关于这个…

POJ 1236 Network of Schools(tarjan)
Network of SchoolsDescription A number of schools are connected to a computer network. Agreements have been developed among those schools: each school maintains a list of schools to which it distributes software (the “receiving schools”). Note that if B …

如何设置网页自动刷新(JSP,JS,HTML)
http://blog.163.com/ylx282006126/blog/static/59772717201111685917664/ 转载于:https://www.cnblogs.com/liuzhuqing/p/7480284.html

1084 Broken Keyboard
两个注意的点 1.本题被归到散列专题下,但是由于是逐字符地映射到整形,可以直接把布尔型哈希数组的大小设置为ASCII的数量128,然后直接将字符作为数组下标(如果是字符串,才需要自己写一个哈希函数,将字符串映射到整形&…