Meena: Google的开放域聊天机器人
最近要开始使用Transformer去做一些事情了,特地把与此相关的知识点记录下来,构建相关的、完整的知识结构体系。
以下是要写的文章,本文是这个系列的第十九篇:
Transformer:Attention集大成者 GPT-1 & 2: 预训练+微调带来的奇迹 Bert: 双向预训练+微调 Bert与模型压缩 Transformer + AutoML: 进化的Transformer Bert变种 Roberta: Bert调优 Electra: 判别还是生成,这是一个选择 Bart: Seq2Seq预训练模型 Transformer优化之自适应宽度注意力 Transformer优化之稀疏注意力 Reformer: 局部敏感哈希和可逆残差带来的高效 Longformer: 局部attentoin和全局attention的混搭-Linformer: 线性复杂度的Attention XLM: 跨语言的Bert T5 (待续) 更多待续 LAMB: 76分钟训练Bert Meena: Google的开放域聊天机器人(本篇) GPT-3 更多待续
Overall
论文的主要贡献在于提出了多种聊天机器人的多种评估方式,并对市面上流行的聊天机器人进行了测试和结果分析。
在模型结构上并没有创新,用的是进化的Transformer中的结构,更大的模型加上更大的数据,得到了更好的结果。
在decoding的过程中,提出了一些改进策略来生成更好的结果。
虽然看起来论文并没有干货,但是评估方式的改进我认为也是至关重要的,是产品化的必不可少的步骤。
人类指标
首先,论文提出了一种人类的评估指标来评估聊天机器人的回答和人类的回答的相近程度。
这个指标有两种模式:
static: 在预设好的multi-turn context下生成回答。 interactive: 和chatbot自由聊天
对于chatbot生成的回答,用两个维度去评估:
Sensibleness: 判断一个回答是不是在上下文语境下是有意义的。这个维度涵盖了人类交谈的基本部分,比如常识和逻辑等;另外还可以捕捉其他重要的方面,比如一致性。 Specificity: 即判断一个回答是不是具体的,这点很重要,因为现在想要通过图灵测试的chatbot为了保证回答都是有意义的,常常会给出比较泛的答案,比如“I don't know”。 举个例子,如果A说喜欢网球,如果B说不错,那么就不算specific,如果B说我也喜欢,而且我喜欢费德勒。那么B的回答就是specific的。
前一个例子是之前评测常用的指标,但是其实并不够,比如GenericBot回答的结果中,有70%都是Sensible的,甚至超过DialoGPT的62%,但显然DialoGPT模型更为强大。
将Sensibleness和Specificity平均一下,得到论文提出的指标SSA。GenericBot的SSA指标是35%,而DialoGPT的SSA得分是51%。这样就正常多了。
Static模式
创建了一个1477个对话上下文,每个上下文有1到3轮对话。这个数据集被称为Mini-Turing Benchmark(MTB)。
一个例子如下:
A: do you like movies?
B: Yeah, I like sci-fi mostly.
A: Really? which one is your favourite?
B: [answer eg] I love Back to the Future.
在用这个数据集评估的时候,会把上面例子中的头三句话作为上下文发给模型,模型给出回答。然后将上下文和回答发给评估者去做评估。
Interactive模式
静态模式很适合用来评估模型,但是可能会有bias,毕竟评估数据集不大。
为了解决这个问题,提出了一种更灵活的方式,让测试者和chatbot自由交谈,从chatbot说hi
开始进行对话。对话至少7轮,最多14轮。收集100个这样的对话进行SSA评估,即至少700个样本。
自动指标
使用混消毒perplexity来作为指标,这个指标在NLP领域很常见。
Meena chatbot
训练数据使用经过规则筛选的对话数据,数据量为341GB,包含40B词语。相对应的,GPT-2的训练数据为40GB。
使用BPE来做sub-token,BPE词表大小为8k。
模型使用进化的Transformer(Evolved Transformer,ET)中的模型,baseline模型参数为2.6B,包含一个ET encoder和13个ET decoder。相对应的GPT-2的参数量为1.5B。Meena的隐含层大小是2560,注意力头数为32。
Inference的时候使用基于温度的概率计算方法,然后进行采样,如下图所示,T越大,每一个step的概率分布就越均匀,反之,则概率分布越陡峭。
用采样的方式而不是beam search是因为,beam search容易生成重复的句子。如下图:
样例
先来看Meena的几个例子:
再来看更多的不同模型的例子:
实验结果
对市面上多种chatbot都进行了测试,包括XiaoIce,Mitsuku,DialoGPT,Cleverbot和论文提出的Meena。
结果如下,可以看到,基本上各个模型的表现都和perplexity成相关关系,这个结果看起来直观但是却令人惊讶,因为类似perplexity的统计指标一般和最后的生成结果并不会有这种关系。
小冰表现最差,可能是因为它的训练目标并不是让回复合理。而是让用户在这上面长期使用(engagement)。engagement和humanness并不一致。虽然测试者反馈表示小冰的回答里包含更多的感情和个性化,但是小冰的回答里确实有很多通用的和没意义的回答。
Meena base得到的SSA评分是72%,没有超过人类的86%。
Meena full
通过改进生成回答的策略,可以进一步对Meena Base的结果进行提升。
采样过程中,有三个参数,T为温度,改变分布;N为结果数目;top-k是指从哪些结果中进行采样。Meena beta的参数为T=0.88, N=20, k=#{vocab}。将三个参数改为T=1,N=20,k=40,可以将SSA得分从0.72提高到0.74。 但参数并非越高越好,N=400时效果反而变差 实验表明,多轮对话的测试场景下,Meena base容易出现跨轮的重复,跨轮重复是指,这次的回答和上次的回答一样,如图,见到的判断去重的规则可以使得SSA得分从74%提升到79%。
Take-Aways
SSA: 人类参与的Sensibleness和Spcificity的综合评估 Meena: 进化的Transformer在大的对话数据集上训练得到
乱七八糟的一些想法
NLP领域的生成式问题往往难以评估,也妨碍了这个方向的发展,以google如此大的体量,能找到几十上百人来手动评估已属不易,何况其他的小公司呢。
对话式的AI应用场景很广,但恐怕最早的赢利点还是广告和推荐,当然,外面要有搜索和助手的包装。
目前大家还在通过大数据和大模型来进行提高,这种方法提高了入门门槛。但或许这不是一条正路,说不定哪天就被降维打击了。