(八)基于生成的闲聊系统

以下内容总结自《自然语言处理实践与聊天机器人原理应用与实践》
目录

  1. 基于生成的闲聊系统介绍
  2. 基于生成的闲聊系统的新发展
  3. 基于生成的闲聊系统实现

基于生成的闲聊系统较基于对话库检索的闲聊系统更复杂,其能够通过已有的语料生成新文本作为回答。基于生成的闲聊系统通常基于与机器翻译相关的技术,但是它并非把一种语言翻译成另一种语言,而是将输入文本「翻译」成输出文本(回答)。生成式聊天机器人在接收到用户输入的句子后,采用一定的技术手段自动生成一句话作为应答,好处是可以覆盖任意话题的用户问句,缺点是生成式应答的句子质量很可能存在问题,比如语句不通顺、句法错误等看上去比较低级的错误。生成式聊天机器人系统通过构建端到端的深度学习模型,从海量对话数据中自动学习「问题」和「回复」之间的语义关联,从而达到对任何用户问题都能自动生成回复的目的。需要注意的是,采用端到端的生成模型往往会出现安全回答的问题、机器人个性不一致的问题和多轮对话中的对话连续性问题。简单来说,生成式聊天机器人系统对于输入的句子,首先通过循环神经网络进行编码,然后通过解码输出对应回复句子中的每个词。可以看到,图 5-7 中,系统对输入句子进行编码,然后用编码指导词的输出,在输出时既考虑了原始句子的编码,也加上了不同层次的注意力机制,最后传递输出,直到输出词尾 [9] 。在这里插入图片描述
图 5-7 用于句子生成的编解码示意图在实际操作中,生成句子时将所有词都看作等价的是不合适的,因为与输入句子或聊天主题关系更密切的词有较高的权重是符合人类认知的。参考基于对话库检索的闲聊系统在处理一条提问对应多条回答时使用的方法,为了在输出的概率方面体现出哪个词与主题的相关性更高,考虑将注意力模型嵌入编解码过程。另外,**为了克服用传统的 RNN 及注意力模型建立的生成式闲聊系统中存在的回答过于枯燥的问题,在实际操作中往往要用到外部知识来丰富回答。**一种常用的基于外部知识提高回复多样性的方法是主题词增义,即在使用一般的端到端方法预测回复的单词序列的同时,通过增强与输入句子有关的主题词,对主题词进行编码,预测输出的单词序列。通过应用上述方法,除了来自源端的信息,回复的词还受到了主题词的制约。微软发布的聊天机器人小冰在一定程度上采用了生成式回复技术,其框架如图 5-8 所示。通过 RNN 将输入句子编码成向量,同时利用话题模型引入话题信息,在解码的过程中,利用编码向量和话题信息生成对应的回复。通过引入注意力机制,输入的每个向量和话题关键词都被进行加权处理,以使重要信息对回复产生更大的影响在这里插入图片描述
生成式闲聊系统的新发展
为了克服生成式闲聊系统的缺陷,改进生成式闲聊系统的效果,研究人员在安全回答、个性一致、对话连续性 3 个方向上进行了改进研究。Cho 等人 [10] 是较早提出 Encoder-Decoder 模型的研究人员,这一模型最初被用于机器翻译中,算法的大致思路为:每次向 Encoder 的 RNN cell 输入一个词的词向量,Encoder 对输入的词向量依次进行编码,直至得到整个句子的语义向量表示,然后由 Decoder 根据句子的语义向量表示输出目标回复。2014 年,对生成式聊天机器人具有深远影响的 seq2seq 发布了。它克服了 RNN 无法完成端到端映射的缺陷。Sutskever 等人 [11] 通过 LSTM 方法将输入的序列映射为固定长度的向量,然后使用深度 LSTM 从已知的向量中解码得到目标输出序列。Sutskever 等人将 seq2seq 应用于英语和法语之间的机器翻译中,并使用 BLUE 方法对模型的性能进行检验。下面笔者结合论文中的示意图对 seq2seq 方法的大致思路进行介绍。假设输入序列是「ABC」,目标输出序列是「WXYZ」,<EOS> 是 end of Sentence 的缩写,Encoder LSTM 每次读取一个单词的词向量,且对所有已输入的词向量进行编码,当「ABC」均被输入后,Encoder LSTM 将生成可以表示「ABC」序列的一定长度的向量 c。然后,Decoder LSTM 根据向量 c,每次预测出一个下一时刻的词汇。如图 5-9 所示,输入「ABC」的结束标志后,预测出「W」,然后依次预测出「X」「Y」「Z」和结束在这里插入图片描述
标志。图 5-9 seq2seq 处理示意图
上述 seq2seq 方法在实际使用时有 3 个主要的缺陷。(1)难以保持机器人个性的一致性,在用户输入「你几岁了」和「你今年多大了」时,机器人往往会给出不同的答案。(2)机器人往往会给出「哈哈」「呵呵」等无意义的安全回答。出现安全回答是因为训练数据中(人与人实际交往时)对这些词的使用较为频繁,导致机器学习的过程中这类回答较容易被抽取。(3)长对话语义的保存或机器人的记忆问题,如代词指代较远位置的上文中的内容,机器人难以像人脑一样顺利进行指代消解。笔者在叙述聊天机器人与深度学习相关的内容时,对上述 3 个问题出现的原因、导致的结果都已进行了初步阐述,下面分别对这 3 个问题的研究进展进行叙述。2016 年,斯坦福大学和微软研究院的研究人员共同发布了基于个性的神经聊天机器人模型 [12] ,通过在 Encoder 时增加用户个性信息(用户向量,在生成词嵌入的过程中同时生成)和用户回复信息(预测用户回复另一用户时的回复,实际上是通过对用户 i 的向量和用户 j 的向量做线性组合变换对用户 i 回复用户 j 的行为进行建模),解决聊天过程中机器人个性一致性的问题。2017 年,李纪为博士等人 [13] 发表了名为 Adversarial Learning for Neural Dialogue Generation 的论文。在这篇论文中,李纪为博士等人将回复生成问题作为强化学习问题,使用对抗生成的思想训练生成模型。Serban 等人 [14] 将端到端的分层 RNN 思想引入开放领域的回复生成问题,同时在句子层面和对话语境层面进行建模,通过建立长对话向量帮助机器记忆长对话的语义。因为人在说话的时候是考虑上下文的,不是只看当前的一句话,生成模型需要将多轮对话的信息都考虑进去,所以,对 session 进行编码,用 session 预测输出的回复,在多轮对话中有显著意义。例如,可以使用多层感知的方法模拟多轮对话。这种多层感知的方法对之前出现的所有句子分别进行编码,每个编码都可以体现整个句子的信息,再通过注意力模型与目标连接,预测时通过基于句子的注意力模型对回复进行预测。基于生成的闲聊系统在避免安全回答、个性一致和上下文建模 3 个方向具有较大的改进空间和可能性。在上下文建模方面,Xing 等人的研究 [15] 给出了一种解决多轮对话上下文建模的思路和方案,通过构建多层的注意力框架,同时提取词向量和句向量,以确保所有上下文有效信息均被提取,进而提升闲聊系统在多轮对话中的整体表现。上面提到的聊天机器人表现出来的安全回答问题、个性一致性问题和上下文连贯性问题,是目前行业公认的聊天机器人存在的主要问题,这些问题带来了不良的用户体验。Facebook 的研究人员认为,如果有一个质量较高的、公开的聊天数据集,上面的一些问题就能得到比较好的解决。因此,Facebook 的工程师建立了聊天数据集 Persona-Chat 用以训练聊天机器人。Persona-Chat 数据集包含了逾 16 万条对话。
基于生成的闲聊系统实现
本节,我们借助 TensorFlow 提供的 seq2seq [2] 模型,实现基于生成的闲聊系统。为了阐述方便,在 TensorFlow 的 seq2seq 模型中,词嵌入采用的是 one-hot 编码方式,即每个词由一个独立的数字编码代替,这种词的表示方式虽然会影响模型效果,但是在演示中会更加直观。在使用 TensorFlow 的 seq2seq 模型时,先引入以下依赖。import tensorflow as tffrom tensorflow.models.rnn.translate import seq2seq_modelseq2seq 模型位于「tensorflow/tensorflow/python/ops/seq2seq.py」目录下。如算法 5-2 所示,模型先对训练语料进行文本预处理,包括典型的分词、去停用词等。同时,为了提升泛化能力、增强模型效果,可以将一些实体进行通用的标识,例如将人名替换为「name」、将地名替换为「location」等。然后,建立词表,并以 one-hot 编码方式对词进行编码,例如将「喜欢」映射为「67」、将「电视」映射为「88」。由此,各个语句就转化成了数字编码所组成的向量形式,如图 5-10 所示。到此为止,整体的数据预处理工作结束,训练数据可以被 TensorFlow 的 seq2seq 模型所接受。下一步便进行模型训练,神经网络通过输入的问答对自动调整参数,生成问题-回答模型。在模型验证阶段,输入测试语句,验证模型输出是否正确,演示结果如图 5-11 所示。算法 5-2 利用 TensorFlow 提供的 seq2seq 模型实现生成式闲聊对话在这里插入图片描述
图 5-11 基于生成的闲聊系统实现演示结果

发布了19 篇原创文章 · 获赞 1 · 访问量 338

猜你喜欢

转载自blog.csdn.net/qq_41557627/article/details/104960218