1. 综述
谷歌最近比较火的邮件自动回复系统,这是一项比较新的工作,毕竟很少有公司有GMAIL这么大的邮件数据源,同时又具有AI基因,会有人去搞这种邮件自动回复的研究。并且这种reply的推荐跟常见的QA系统或对话系统还是有几分相似。Anyway,中体来说,这依然是一个比较新的task,下面我们来看一下他具体的实现。
首先作者对该系统提出了如下的要求和目标:
系统实现的思路如下图:
整个process其实比较简单,首先是一个triggering model,是一个feedforward神经网络,触发后进入核心response,是一个LSTM,从一个有限的候选集合中选择best choice。除了候选集合的合理性,还同时考虑了回复的多样性。所有的回复都是在封闭集合中挑出来的,类似一个检索式推荐系统。
2. Response Selection
建模如下:
基本上就是个生成式模型,直接用LSTM,文中大体描述了比较重要的网络层次结构。邮件看成一个长文本query,生成vocabulary的分布后,通过beam search在封闭集合中选择合适的response。每一个timestep都可以生成相应的voc分布。最后所有的候选response放在tri树中,并通过beam search生成b个最高的response候选。如果生成的response不在树中,则会被过滤掉。最后实例如下:
3. Response Set Generation
整个reply系统需要保证quality和utility,这是两个core challenge。所谓quality就是回复质量要高,至少要减少语法拼写错误。utility就是推荐恢复需要有不同的intent,及要有多样性,不能是同义句,不然推荐多了没有意义。
3.1 规范化回复内容
把候选的回复内容,通过dependency parser依存分析,将其语法结构化表示出来,文中叫做canonicalized representation。从而可以筛出表达非常相似的候选。如:“Thanks for your kind update.”, “Thank you for updating!”, “Thanks for the status update.”
3.2 意图聚类
相同意图进行聚类,如"lol", "ha ha", "that is funny" 等都是相同意图,文中通过聚类方法把他们归到一起,从而尽量避免推荐同义的回复。
3.3 Graph Construction
人工从高频回复中,定义出一些response作为seed,进行半监督学习。其中:
- VR为结点,即回复内容;
- VF为回复内容的特征,n-gram和skip-gram(lenth up to 3);
- VL是标注label;
- Edges: 1)vr->vf; 2) between responses
3.4 半监督学习
按照3.3中的描述得到一个graph,使用标签传播,在seed节点标注的基础上对全图进行label propagation。
定义一个object func来计算response node之间边的权重:
feature node的object function如下:
详解未完待续。
4. Diversity
4.1消除同意图的response
如上文所述,同意图的intent通过聚类,只保留一个。
4.2 加强否定的response
因为正向的response频次通常比负向高很多,但是为了推荐多样性,增强否定意图的推荐。
5. Trigger
1. 多数邮件不需要推荐回复内容,如开放式问题:今天想去哪?
2. Trigger需控制性能,降低召回