雷锋网按:本文作者NLP日月星辰,北京航空航天大学在读博士生,研究方向为 自然语言处理,深度学习。
深度学习已经在许多工业产品中取得应用。例如Jeff Dean(谷歌大脑负责人)在去年的WSDM会议上指出,谷歌的搜索相关性计算模块,深度学习的三个特征是权重最大的。
并且深度学习算法也大量的应用到了谷歌和百度的机器翻译系统之中,使机器翻译质量提升。本文将介绍另一个深度学习的应用,邮件自动回复。
自动回复是否可以在工业中进行实际应用,一直是人们喋喋不休争论的一个问题,很多人认为对话系统,所利用的自动回复技术只是一个玩物,无法解决用户的刚需。而谷歌,在去年十一月将自动回复技术应用到了Inbox中。
Inbox是谷歌在手机上的邮件客户端,类似于手机上的Outlook。Inbox利用深度学习技术,增添了为一些语义简单的邮件进行自动回复的功能,拟解决“由于屏幕较小,手机邮件回复很不方便”的用户痛点。其中主要解决如下几个问题:
如何选择可回复邮件:当今商务人士邮件众多,很多邮件并不长,据谷歌统计有百分之25%的邮件少于20个词。那么对这些简短且语义好理解的邮件是否可以通过分类进行筛选,交给邮件生成系统是一个有趣的分类问题。
回复的邮件是否可分类:很多邮件的回复类型可枚举,例如问“下午三点是否可以参加XXX会议”,答案无非是“可以参加”,“有事情不能参加”,“我在想想”这三个情况,所以如何通过算法将三种类型的回复进行聚类是一个有现实意义的聚类问题。
如何针对每个类选出最合适的邮件:针对每个类,如何通过自动回复算法生成特定的回复,是一个自然语言处理上的回复生成问题。
谷歌于今年KDD会议上,发布了SmartReply的论文。我们首先看SmartReply的架构
从图中可以看到,系统分为四个部分,分别是可回复邮件筛选,回复邮件聚类,回复邮件选择,和多样性回复生成,之后将一一介绍。
模块功能
在谷歌的邮件回复系统中,并不是每一封邮件都会给出自动回复的建议。因为有些邮件意思简单明了,机器可以快速的理解,并给出一些回复候选。
例如:今天晚上七点我们开个会讨论一下项目修改方案吧。
这个邮件机器可以快速理解,并通过之后的步骤给出对应的候选方案。然而,还存在着一些邮件结构复杂,机器并不能很好的理解其中含义。
例如:我已经看完你的论文,在你的论文中,公式2的推导出现了错误,我觉得倒数应该用链式法则求解。
总之,在回复之前,需要一个模块判定机器是否可以理解邮件语义,避免在不理解的时候仍然给出邮件回复候选,使用户感到被骚扰。
模块实现方法
可回复邮件的筛选机制归根结底是一个分类问题,即给定训练集合 D ={X,Y},X代表文档的特征集合,Y代表文档的标签,学习函数f(x),使得y与f(x)的误差最小。在此任务中谷歌选择了多层感知机作为分类器,多层感知机如下图所示
在此分类任务中,这篇论文使用了一元词汇(Unigram)和二元词汇(Bigram)来对抽取特征,并将同一类的特征进行相加,得到MLP的输入。
这个MLP模型有三个隐层层,每层的激活函数使用了ReLU,且利用DropOut防止过拟合。最终经过试验证明,这个分类模型的AUC为0.854。针对此模块,笔者观点如下:
MLP模型算是文本分类的最简单模型之一,然而简单模型在这个任务上仍能取得不错的效果,这和一些其他的论文得到的结论一致(例如Facebook的FastText,利用简单的结构就可以在分类任务和复杂结构的网络得到近似的效果)。大部分现实分类任务简单,很多简单的模型便可以达到还不错的效果,刻意追求模型的复杂性在简单任务上往往得不偿失。
AI(人工智能)+HI(人类智能)仍然是现在的AI产品不可或缺的一环,即使分类器表现良好达到85%,但在工业级的系统中,仍然会有15%出错,所以SmartReply系统是让用户选择他生成的回复,而不是直接帮助用户进行邮件回复或者邮件书写。
模块功能
此模块为该应用核心,功能如图所示,当用户收到一封邮件,Inbox会自动生成3个供挑选回复(三个回复在屏幕下侧)。例如,第一封邮件的三个回复分别为:
1. Count us in!
2. We will be there
3. Sorry we won't be able to make it
这样可以加速用户在手机端输入不便,回复邮件较慢的体验。
模块实现方法
此篇文章中,最核心的东西便是回复的生成以及聚类了。和面向开放领域的聊天机器人不同,邮件回复需要对回复进行聚类,之后从每个类别中选一个代表句。
回复聚类的算法如下:
构建图G={V,E},V是图中的点,E是图的边。V由来信,回信,以及回信的特征构成。
首先抽样N个邮件作为顶点,构建顶点集合VR。为每个类别人工选择种子邮件(例如 Thank you , Thanks是感谢类的邮件),并将这些邮件VL也放到图G中。此时由于人工的干预,我们知道在特定的类别Ci有{r1,r2...rn}个回复属于此类。
通过词汇特征的抽取,构建G中代表特征的顶点集合VF,如果邮件有该特征则邮件和该顶点进行连接。
之后使用了半监督的聚类方法将邮件进行聚类,并且每隔特定轮次,进行新类别发现,最终得到376类。类别例如(will do, Thanks, I got it 等)
回复选择部分并没有什么创新点,是一个基于LSTM模型的排序问题,候选集合是由most frequent的回复邮件构成,值得注意的是此篇所用的LSTM并不是利用一个Dual-LSTM讲发来的邮件和回复邮件分别进行encoding之后计算相似度。而是类似LSTM的生成模型,计算给定所发来邮件O的时候,回复中每个词被生成的概率P(wi|O)
在具体的实际应用中,可以根据场景的不同选择基于深度学习的回复算法。我们可以看到针对回复选择这部分,由于候选回复均为高频回复邮件,所以回复会十分的没有营养,大多基于简单的英文表达(Sure,No,Thanks)等,想必如何让邮件回复和邮件内容正确的呼应起来也是非常值得研究的一个课题,这样可以避免千篇一律的回复,让被回复者有不受尊重的感觉。
在多样性选择方面,按照文章的叙述做了两个后处理。
第一个后处理是重复回复删除,操作具体方法十分简单,首先根据上面所说的邮件排序系统对所有候选邮件进行降序排列,之后从top1开始加入系统要输出的集合OUTPUT中。
之后每个候选回复邮件r在加入OUTPUT时,检测r是否与OUTPUT中的任意邮件属于上面聚类算法所给出的同一个类别,如果不是才可以加入OUTPUT之中。OUTPUT达到3个回复即停止迭代。
第二个后处理是强行生成拒绝倾向的回复。如果OUTPUT集合中的回复中没有拒绝倾向的回复,且top2中有同意倾向的回复,则自动将第三个回复替换为拒绝倾向。以此给出更加多样的回复,让使用者的选择面更大。
SmartReply是谷歌将回复选择技术利用到移动版邮件系统的一个尝试,希望解决手机打字不便的问题。论文叙述了一个系统,并为我们实现一个邮件回复系统指明了方向。