本文继续围绕下面这篇论文来解析基于开放领域的对话机器人的架构,运用的skill及生成策略等内容。
三、总体介绍
在NLP对话系统领域,研究表明基于大规模语料库进行预训练是很重要的,除了运用大规模的参数和训练数据集之外,还有以下两个方面需要注意:
- Blending Skills
在通过微调数据来强调所期望的对话技能方面可以做出大的改进,选择任务时考虑能够使模型聚焦于对话吸引力,个性展现,对话共鸣,知识性,通过使用Blended Sill Talk(BST)提供的训练数据和初始化对话上下文(如人物角色特征和主题)可以针对上述几个方面获得较大的改善。使用BST的小模型也能达到或者超过不使用BST的大模型的表现效果。BST强调了期望的对话特点,通过使用BST能够减少从大规模语料库学到的不是所期望的对话内容(如对话显示了有害的语言等,相关资料可以参考Toxic Comment Classification Challenge | Kaggle或者Jigsaw Unintended Bias in Toxicity Classification | Kaggle)。小模型之所以可以有这样的表现,是因为如果应用了知识库,也就是说模型具备了先验知识(prior knowledge)的条件下,即使使用的训练数据规模有限,也是可以达到降低entropy来获得较好的表现。
2. Generation Strategies
Decoding算法的选择是非常重要的,如两个模型具有同等的复杂度(perplexity),不同的decoding算法会得到差异很大的结果。这里提到的复杂度是衡量语言模型的一个重要的指标,可以这样理解,在一个模型里,如何根据一系列的具有不同权重的步骤,以最短或者最合适的路径获得最后的确定性的结果,这样一个过程也是从不确定状态到确定状态的cross entropy降低的过程(cross entropy越高,那么复杂度就越高),反过来可以说是语言模型输出概率最大化的过程。
对话机器人的话语长度对于人工判断质量是很关键的,太短的response看起来比较“迟钝”或者缺少兴趣点,而如果太长会导致机器人进行对话时任意发挥而无法有效进行对话。如果使用beam search时对长度进行很好的控制的话,可以在生成内容时取得较好的效果。
模型的表现很大程度上受到了评价者所使用方法的影响,譬如是否有一个给定的topic,整体对话长度,人工干预对话的选择。除此之外,发布模型时采用的方式可以全面洞察这些对话能力。模型是开放的,包括模型使用的权重,微调方式等这些设置都是可以重现的。
在对话机器人模型的人工评价中,在内容吸引力方面以75%超过了Meena的25%,而在对话人性化方面以65%超过了Meena的35%。虽然第一眼看上去模型表现不错,但是实际上仍然没有解决基于开放领域的对话系统的问题。
四、关于对话系统的架构分析
首先看下面这个图,左边的Poly-Encoder使用input context和candidate labels来输出retrieved next utterance,再与input context拼接后传给decoder,然后产出generated next utterance。
下面这个图使用了IR系统根据input context内容来从knowledge candidates(知识库)中提取信息,然后传给Poly-encoder,再结合input context处理后输出best knowledge candidate,之后传给decoder处理后生成generated next utterance。
论文提到使用了三种类型的基于Transformer的架构:
- Retriever
给定对话上下文作为输入,retrieve系统通过对大量的candidate response打分选出分数最高的作为下一个对话response,一般来讲,所有来自训练数据集里的reponses都会被作为candidate的集合。这里使用了Poly-encoder架构,它使用多个表示(n个可学习的参数codes)来对上下文的全局特征进行编码,然后这个编码和每个候选candidate response通过注意力机制进行作用,这种在最后一层进行注意力机制处理的方式比Bi-encoder的单个vector的表示在模型表现方面要好很多,而在速度上与Cross encoder相比是可以接受的。
如下图所示,有三种类型的注意力机制:
-input context的token embeddings之间的注意力机制
-在m个可学习参数codes和Transformer输出之间的注意力机制
-在上面第2种注意力机制作用下生成的m个具有global feature的embeddings和candidate embedding之间的注意力机制
这里使用了两种poly-encoder参数尺寸:256M和622M,使用了64个codes。