Chatbot Simple Review

闲聊作为人机对话的一个研究分支,近年来取得很大的进步。研究主要探索的是数据驱动(data driven)的端到端(end2end)的方法。

端到端会话模型(End-to-End Conversation Models)

最初的端到端会话模型主要是借鉴机器翻译方法。因为任务很契合,会话响应生成任务可以简要的描述为根据之前的对话轮,预测该轮响应,机器翻译任务就是将“源语言”()翻译成“目标语言”()。

直接使用机器翻译的方法来解决会话生成任务是有局限性的。机器翻译方法将对话数据表示为(查询,响应)对(one-to-one),这是不合理的,因为一个查询不只对应一个响应(one-to-many)。而且闲聊需要借鉴之前的对话信息。

研究者慢慢提出很多专门处理对话问题的模型。

LSTM 模型

典型的LSTM-based Seq2Seq to response generation方法可以在论文《A neural conversational model》和《A diversity-promoting objective function for neural conversation models》中找到:给定一个对话历史记录(S是由单词组成的句子),具有输入门,记忆门和输出门的LSTM在时间步,进行以下计算:

LSTM模型采用Softmax计算概率预测输出的每一个单词():

HERD 模型

LSTM模型效果编码文本的效果很好,但是文本长度的上限是500(《Sharp nearby, fuzzy far away: How neural language models use context.》)。有时候对话历史文本长度更长,层次化模型(Hierarchical models)就可以捕获更长的文本的信息。其中一个方法就是HERD model(Hierarchical Recurrent Encoder-Decoder model)。首次应用于响应生成(response generation)是在论文《Building end-to-end dialogue systems using generative hierarchical neural network models》中。

HERD模型是包含两个RNN的双级别结构:一个在单词级别,另一个在对话轮数级别。这样模型不仅可以捕捉到当前轮的信息,也会考虑历史信息。

Attention模型

Attention-based model在机器翻译任务中能够取得很好的效果,但在响应生成任务中不会有很大的帮助,这是因为机器翻译中的注意力机制试图“对齐”翻译,而在对话中,查询和响应语义上可能丝毫没有联系。
但一些特殊的注意力机制在对话中会有一些作用如避免单词重复。具体可查看论文《Coherent dialogue with attention-based language models》、《Generating high quality and informative conversation responses with sequence-to-sequence models》等。

Pointer-Network 模型

一个典型的例子是CopyNet : 响应中的单词或者从输入中获得(Pointer Network),或者从一个固定词典中获得(Seq2Seq)。
具体可查看论文《Incorporating copying mechanism in sequence-to sequence learning》。

强化学习 Reinforcement Learning(RL Beyond Supervised Learning)

监督学习用于对话是有缺点的:很难有明确的优化目标比如通过减小无趣的回复最大化吸引力,倾向于优化一轮对话而不是多轮对话来提高长期吸引力。

因此,研究者尝试使用强化学习来解决问题。但是强化学习也面临一个问题:缺少定义成功的标准,即奖赏函数(reward function)。。

李纪为在论文《Deep reinforcement learning for dialogue generation》中首次尝试采用强化学习来生成对话。目标函数是最大化总的奖赏

在文中,李纪为采用了三个奖赏函数,分别是

  • esay of answering reward 首先建立了无聊回复的集合比如“i don't know”,当生成无聊回复时,就对模型进行惩罚。
  • information flow reward 使每一轮的回答不那么相同,鼓励模型产生新的回答。
  • meaningfulness reward 在鼓励模型开启新话题的同时,保持整个对话的连贯性,不那么跳跃。

挑战与应对

回答很无趣(Response Blandness)

seq2seq模型经常生成回应"i don't know"或"i;m OK"。李纪为的论文《A diversity-promoting objective function for neural conversation models》指出产生这种现象的原因在于目标函数,目标函数是最大化,是source 对话历史,是目标回答。这样,模型就会很容易产生不符合上下文但是却有着很大概率的回答如"i don't know"。因此,作者将目标函数换为互信息并在推理阶段使用。
具体来说,给定对话历史,在推理阶段的目标是找到最优的:

可以用一个超参数来控制惩罚无趣响应的程度:

weighted MMI目标函数可以说是对于和的一种平衡,无论是给定生成,还是给定生成概率都会很高,就会在一定程度上抑制产生无趣回答的现象。

最近,GAN(Generative Adversarial Networks)生成对抗网络应用到响应生成任务中。GAN以minmax为目标函数,生成器和判别器协同工作,生成器生成响应,判别器判断响应是人类产生的还是生成器产生的,经过训练,生成器会努力产生让判别器判断为人类响应的回答。
可以参考一些论文《Adversarial learning for neural dialogue generation》、《Neural response generation via GAN with an approximate embedding layer》和《Generating informative and diverse conversational responses via adversarial information maximization》

论文《A hierarchical latent variable encoder-decoder model for generating dialogues》中提出的 Variable Hierarchical Recurrent Encoder-Decoder(VHRED)模型是HERD模型的扩展,它添加了一个高维的随机潜变量,该高维变量可以决定高水平的回应方面如话题、名字动词等,模型的其他部分就可以专注在低水平的生成方面如流畅度。最近的论文《Learning to control the specificity in neural response generation》同样也是添加了一个变量来使响应更加具体。

大多数的响应生成系统采用的模型都是生成式的(一个字一个字地产生句子),解决回答很无趣这个问题的另一种方法是结合检索式模型。已经有一些工作了,可查看《Conversational contextual cues: The case of personalization and history for response ranking》、《Learning to respond with deep neural networks for retrieval based human-computer conversation system》和《Neural utterance ranking model for conversational dialogue systems》

个性一致 Speaker Consistency

在同一个会话中,不同轮次甚至同一轮次,系统会出现个性不一致问题,比如问“你结婚了吗”,系统答“没有”。再问“你有几个小孩?”,系统答“3个”,但是单看每一轮对话都是合理的。李纪为认为产生这个现象的一个原因是训练数据本身 ,因为训练数据是多人的信息。他在论文《persona -based neural conversation model》中使用了speaker embedding,像word embedding一样,speaker embedding也有一个向量空间,相似(说话方式相似或喜欢谈论相同的话题等)的speaker距离会更近。在推理阶段,选中一个特定的speaker进行测试。

论文《Conversational contextual cues: The case of personalization and history for response ranking》中也利用了个性化信息。目标函数是一个多损失目标函数,附加损失对学习不同的speaker是很有用的。

论文《Multi-task learning for speaker role adaptation in neural conversation models》是对李纪为文章的一个扩展,模型不仅包括seq2seq模型还有一个autoencoder,模型进行多任务学习,seq2seq模型在对话语料上进行训练,autoencoder在非对话语料上进行训练,连接seq2seq和autoencoder的解码器能够生成特定个性的响应而不需要特定个性的对话语料。

单词重复 Word Repetitions

注意力机制能够较好的解决机器翻译中的单词重复问题,但是在对话系统中帮助较小。
论文《Generating high quality and informative conversation responses with sequence-to-sequence models》在解码器部分添加了自注意力机制,旨在改善更长和连贯响应的产生,同时顺便减轻单词重复问题。

有依据的对话模型 Grounded Conversation Models

到目前为止上边提到的问题,只是解决了一部分而已,需要更多的研究。但是,这些E2E系统面临的更大的挑战是响应的合理性问题。E2E系统缺少grounding。比如:问:明天天气怎么样?E2E系统很可能会回答“晴”、“雨”等,回答是毫无根据的。

论文《A knowledge-grounded neural conversation model》提出seq2seq模型很会产生合理的答案,但是当跟现实世界联系起来,要求生成一些名字或事实的时候,就会产生问题,就是因为缺少grounding

最近很多研究都关注设计grounded neural conversation network。

解决这个问题,提出的方法有确定系统的个性,有添加文本知识的、也有添加用户或者机器人的视觉环境的。无论是那种方法,它们在编码信息的时候都是不只编码对话历史,还添加来自用户环境的额外输入。

以论文《A knowledge-grounded neural conversation model》为例进行说明,模型有一个标准的seq2seq之外,还有一个facts encoder,将于对话有关的知识编码。

grounded conversation modeling的工作有两个优点:一是这类方法将E2E系统的输入分成两部分,一部分来自用户,一部分来自用户的环境。这样,同样的输入在不同的环境下就会产生不同的响应。二是世界知识是很多的,在响应中中可以产生训练语料中没有出现过的单词。

数据

  • Twitter 《End-to-end conversation modeling track in DSTC6》中DSTC Task 2的数据基础
  • Reddit 社交娱乐网站,论文《Conversational contextual cues: The case of personalization and history for response ranking》中用到
  • OpenSubtitles 含有8billion单词,多种语言《Parallel data, tools and interfaces in OPUS》
  • Ubuntu less focused on chitchat but more goal-oriented 《The Ubuntu Dialogue Corpus: A large dataset for research in unstructured multi-turn dialogue systems》
  • Persona-Chat dataset 《Personalizing dialogue agents: I have a dog, do you have pets too?》

评价

下边介绍的BLEU、MENTOR、ROUGE都是词重叠评价指标。
词重叠评价指标,他们认为有效地回答应该和真实回答之间存在大量的词重叠(但是对话系统的答案空间往往是发散的,也就是一个问题的答案可能是完全不同的两句话,这种情况下该评价指标效果不好),也就是说这是一个非常强的假设。(表示真实响应,表示系统生成响应)

  • BLEU
    BLEU是机器翻译的评价指标,其统计生成响应和真实响应中的n-gram词组在整个训练语料中出现的次数。

第一个公式用于计算n-gram短语词组在整个数据集中的准确度,表示每个n-gram词组在真实响应中出现的次数。所以上式就是每个n-gram词组在真实和生成响应中出现次数的较小值求和除以n-gram词组在生成响应中出现的次数的和,表征了一种精确度度量。

第二个公式,考虑n的取值时(一般取1-4),表示各个n-gram的权重,进行加权求和,表示长度惩罚因子,当生成的句子太短时,就进行惩罚。

  • ROUGE
    该指标用于文本摘要领域,包含ROUGE-N,ROUGE-L(最长公共子句),ROUGE-W(带权重的最长公共子句),ROUGE-S(不连续二元组)四种。以ROUGE-L为例进行介绍。
    ROUGE-L是计算最长公共子序列的长度,就是寻找真实响应和生成相应之间的最长公共子序列长度,然后计算F-measure分数。其与BLEU相似,都可以反应词语顺序,但是ROUGE的词可以是不连续的,而BLEU的n-gram要求词语必须连续出现。比如两句话“我喜欢吃西瓜”和“我刚才吃了一个西瓜”的最长公共子串为“我 吃 西 瓜”。

  • MENTOR
    MENTOR 对BLEU进行了改进,加入了生成响应和真实响应之间的对应关系。使用WordNet计算特定的序列匹配,同义词,词根和词缀,释义之间的匹配关系,改善了BLEU的效果,使其跟人工判别具有更强的相关性。同样也使用F-measure的计算方法。

  • Perplexity
    PPL/Perplexity/困惑度是判断语言模型好坏的一个指标,其基本思想是:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好。公式如下:

    由公式可知,句子概率越大,语言模型越好,困惑度越小。
    用更加通俗的话来解释,困惑度p可以理解为,如果每个时间步都根据语言模型计算的概率分布随机挑词,那么平均情况下,挑多少个词才能挑到正确的那个。

  • hits@k
    对给定的几个候选项进行排序,检索模型或者是可以给候选项打分的生成模型。

比赛

  • Dialog System Technology Challenges (DSTC):http://workshop.colips.org/dstc7/

  • ConvAI Competition : https://github.com/DeepPavlov/convai

  • Alexa Prize :https://developer.amazon.com/alexaprize/proceedings

参考资料
[1] https://zhuanlan.zhihu.com/p/33088748
[2] https://www.zhihu.com/question/58482430
[3] 《Neural Approaches to Conversational AI Question Answering, Task-Oriented Dialogues and Social Chatbots》

你可能感兴趣的:(Chatbot Simple Review)