system: [SYSTEM]

user: 4. 常见技术模型 4.1. Encoder-decoder加解密模型 在以往的研究中，我们会发现实际上智能对话系统问题可以被很好地应用到的自然语言的机器翻译框架中 [ 11 ] ，我们可以将用户提出的问题作文输入机器翻译模型的源序列，系统返回的答案则可以作为翻译模型的目标序列。因此，机器翻译领域相对成熟的技术与问答系统所需要的框架模型有了很好的可比性 [ 12 ] ，Ritter等人借鉴了统计机器翻译的手段，使用Twitter上的未被结构化的对话数据集，提出了一个问答生成模型的框架 [ 13 ] 。 Encoder-decoder框架目前发展较为成熟，在文本处理领域已经成为一种研究模式，可应用场景十分广泛。它除了在已有的文本摘要提取、机器翻译、词句法分析方面有很大的贡献之外，在本课题中，也可以被应用到人机对话和智能问答领域。 图1将Encoder-Decoder框架在自然语言处理领域的应用抽象为一个通用处理模型，即一个序列(或文章)转换为另外一个序列(或文章)。对于句子序列对 ，Encoder-Decoder框架在输入源序列X的情况下，生成目标序列Y，并不断改变模型参数提升这种可能性。在实际的应用中，序列X和序列Y分别由各自的单词序列构成，可以是一样或者不一样的语言： 图1. 加解密模块实现的端到端模型 X = 〈 x 1 ， x 2 ， ⋯ ， x m 〉 Y = 〈 y 1 ， y 2 ， ⋯ ， y n 〉 模型中神经网络(如RNN或LSTM)将按照如下步骤计算此条件概率：首先，输入序列 ( x 1 ， x 2 ， ⋯ ， x T ) 通过加密模型中的层层LSTM神经单元，由最后的隐藏层状态获得一个固定维度的向量表示v；然后，根据标准的LSTM-LM公式，计算输出序列 ( y 1 ， y 2 ， ⋯ ， y T ′ ) 的概率，该LSTM的最初的隐藏层状态为输入序列 ( x 1 ， x 2 ， ⋯ ， x T ) 的向量表示v： p ( y 1 ， y 2 ， ⋯ ， y T ′ | x 1 ， x 2 ， ⋯ ， x T ) = ∏ t = 1 T ′ p ( y t | v ， y 1 ， y 2 ， ⋯ ， y t − 1 ) 在这个等式中，每个概率分布 p ( y t | v ， y 1 ， y 2 ， ⋯ ， y t − 1 ) 都用对于词典中的所有单词的softmax函数模型来表示。并且，我们要求，所有的句子都以一个特殊的句子终结符“ ”来表示，这可以使得模型定义了一个关于输出序列的所有可能长度的概率分布。 Google利用该理念实现的神经翻译系统模型，结合LSTM神经网络结构，实现了端到端的语言模型 [ 14 ] ，是现在十分主流的使用深度学习实现的智能对话系统，并提供了开源的参考架构。斯坦福大学使用该端到端模型，并在解密模型中添加注意力机制，实现了一个综合性的神经网络机器人。 4.2. Hierarchiacal Recurrent Encoder-Decoder分级卷积加解密模型 目前研究中经常使用Seq2seq端到端的方式实现问答系统，但模型常常会有可能产生与问题毫不相关，意义不明，表达不准确甚至是毫无意义的安全回复，例如“我不知道”，“好的”或“我爱你”这样的答案。 对于此类问题的出现，Bengio等人提出的一种更加复杂的模型结构——分级卷积加解密(Hierarchiacal Recurrent Encoder-Decoder)的端到端模型可以很好的解决问题。HRED模型通过使用第二个加密模块来从之前的问句中获得更加直观的信息，从而当前输出对于之前信息的依赖性可以得到保障 [ 15 ] 。 在模拟对话时，我们认为HRED模型比标准的RNN模型更好是因为：上下文RNN会在用户之间使用一个分布式的向量来表达对话主题和内容，这对于建立一个有效的对话系统来说是非常重要的 [ 16 ] ；由于在序列传递过程中的计算步骤被减少，这使得于模型参数有关的目标函数的计算会更加稳定，并且有助于传播优化方法的训练信号。 4.3. Bidirectional HRED双向分级卷积加解密模型 双向HRED模型的加密模块中使用一个双向的RNN模型，一条前向传递语句序列，另一条通过导致输入序列反向传递。前向传递时n位置处的隐藏层状态包含了n位置处之前的信息，而反向传递时的隐藏层状态总结了n位置处之后的信息。为了仍然得到一个固定维度表示的上下文向量，我们可以将前后向传递的最后隐藏层状态通过直接前后相连或通过L2池化后相连。此种双向结构可以有效地解决短时依赖的问题，并且在其他相似的结构中也被证明是有效的 [ 17 ] 。 4.4. Word embedding词嵌入 词嵌入(Word embedding)又被称为词表示(Word representation)，每个单词套用该模型后可以转换为一个实数，且每个实数对应词典中的一个特定单词 [ 18 ] 。它是一种用于在低维的词向量空间中用来学习深层的单词表示的技术，通过对词汇量的扩大，可以很大地提升训练速度 [ 19 ] ，因为会通过在词嵌入空间中非常相近的单词来共享一些信息。常用的词嵌入模型有Word2Vec [ 20 ] ，该模型是由包含了由一千多亿单词组成的Google新闻数据训练的，并且被证明该模型在一个非常广泛的数据集上展现出了强有力的信息。 4.5. Attention注意力机制 Attention结构的核心优点就是通过在模型“decoder”阶段对相关的源内容给予“关注”，从而可以在目标句子和源句子之间建立直接又简短的连接，解决机器人模型和用户之间的信息断层问题 [ 21 ] 。注意力机制如今作为一种事实标准，已经被有效地应用到很多其他的领域中，比如图片捕获生成，语音识别以及文字摘要等。 在传统seq2seq模型的解码过程中，“encoder”加密器的源序列的最后状态会被作为输入，直接传递到“decoder”解码器。直接传递固定且单一维度的隐藏状态到解码器的方法，对于简短句或中句会有较为可观的效果，却会成为较长的序列的信息瓶颈。然而，不像在RNN模型中将计算出来的隐藏层状态全部丢弃，注意力机制为我们提供了一种方法，可以使解码器对于源序列中的信息选择重点后进行动态记忆。也就是说，通过注意力机制，长句子的翻译质量也可以得到大幅度的提升。 注意力在每一个解码的时间步时都会进行计算，隐藏最初的embedding词嵌入操作和最终的projection投影操作后，主要包含了如下四个步骤，如图2所示： 1) attention weights注意力权重的计算 图2. 注意力机制的计算流程 注意力权重是通过当前的目标隐藏层状态和所有的源序列的状态互相比较得出的，公式(1)表示该计算过程。 α ts = exp ( score ( h t ， h ¯ s ) ) ∑ s ′ = 1 S exp ( score ( h t ， h ¯ s ′ ) ) (1) 在该公式中，score函数会逐一比较每一个源序列的隐藏层状态 h ¯ s 和目标序列的隐藏层状态 h t ，得到的结果将被标准化，产生一个关于源位置的分布，即attention weights。关于score函数的选择有很多，它们主要的不同就在于。乘法和加法形式是目前比较流行的评分函数，如公式(2)所示： score ( h t ， h ¯ s ) = { h t T W h ¯ s v a T tanh ( W 1 h t + W 2 h ¯ s ) (2) 2) context vector上下文向量的计算 根据公式(2)中计算得到的注意力权重，源序列状态的权重均值(即上下文向量)的计算过程可由公式(3)表示。 c t = ∑ s α ts h ¯ s (3) 3) attention vector最终注意力向量的生成 最终的注意力向量需要将上下文向量和当前目标序列的隐藏层状态互相结合生成，公式(4)可以表示该计算过程。 a t = f ( c t ， h t ) = tanh ( W c [ c t ; h t ] ) (4) 4) 模型的输入 使用公式(4)中得到的注意力向量，作为下一个时间步时初始状态输入到模型中，并用于得到模型的归一化逻辑输出和损失值。该过程与原始的seq2seq模型中最后一层的隐藏层状态十分相似。