system: [SYSTEM]

user: 3. 模型框架 3.1. 模型组成 本文提出的模型结构如图1所示，该模型包括输入层，编码层，调整层以及解码层。对于输入文本，首先通过嵌入(Embedding)得到包含词意与词性的表示矩阵，然后通过两个双向LSTM分别抽取句子的内容与风格信息，之后依据需要，经过调整层抽取修改风格信息，最终由解码层转换为目标风格的文本。现对各个部分进行详细说明。 1) 输入层：消歧的文本编码 输入层将输入的原始文本转为向量表示。相同的词汇在不同的语境下有不同的释义，为了消除歧义，丰富语句表达，在输入词汇的同时让模型接收词汇对应的词性信息。 图1. 本文的文本风格转换框架 模型的输入包括原始的句子以及对应的词性序列。首先将原始文本的每个单词为one-hot编码，通过词嵌入(word embedding)将句子中的每个词将维表示为一个k维向量，则每个句子可表示为： x w = [ w 1 ， w 2 ， ⋯ ， w n ] T ∈ ℝ n × k ，其中w i 为句中第i个词的词向量，n为句子x最大长度。 同样的，句子对应的词性序列经过one-hot以及Embedding后表示为： x p = [ p 1 ， p 2 ， ⋯ ， p n ] T ∈ ℝ n × l 其中p i 为句中第i个词对应词性的高维向量，维度大小为l。将词序列与词性序列拼接，得到最终消歧后的输入编码。 将输入文字经过编码后输出到下一层，提取风格与内容特征。 x = [ x w ， x p ] ∈ ℝ n × ( k + l ) 2) 编码层：依据上下文抽取风格与内容特征 为了修改句子的风格信息，首先经过编码层获取原句子的内容与风格信息。与以往工作不同，本文使用两个编码器分别提取内容与风格特征。 句子的内容与风格的表达需要根据上下文词汇，而为让模型尽可能获取序列上下文信息，采用双向LSTM来对提取句子的高维特征。 LSTM的全称是Long Short-Term Memory，它是RNN (Recurrent Neural Network)的一种。相较于传统的RNN，LSTM内部引入了记忆单元，因而对序列具有更好的长期记忆功能。如图2所示，LSTM包含输入门、输出门以及遗忘门三个结构，根据上一时刻的隐状态 h ( t − 1 ) 、细胞状态 C ( t − 1 ) ，以及当前时刻的输入 x ( t ) ，来计算对历史信息的保留程度。首先计算内部门控，具体如下： i ( t ) = σ ( W i [ h ( t − 1 ) ， x ( t ) ] + b i ) f ( t ) = σ ( W f [ h ( t − 1 ) ， x ( t ) ] + b f ) o ( t ) = σ ( W o [ h ( t − 1 ) ， x ( t ) ] + b o ) 其中t时刻的输入门i (t) ，遗忘门f (t) ，输出门o (t) 的计算均是一个单层前馈网络，W，b分别表示对应的权重以及偏置。之后的序列的状态信息更新方式如下： C ^ ( t ) = tanh ( W c [ h ( t − 1 ) ， x ( t ) ] + b c ) C ( t ) = C ( t − 1 ) ⊙ f ( t ) + i ( t ) ⊙ C ^ ( t ) h ( t ) = o ( t − 1 ) ⊙ tanh ( C ( t ) ) 式子中， ⊙ 表示向量中对应元素直接相乘； C ^ ( t ) 为新产生的待定细胞状态，由输入门i (t) 控制参与更新的维度；遗忘门f (t) 对历史信息 C ( t − 1 ) 进行取舍，再加上 C ^ ( t ) 更新细胞状态；输出的隐状态h (t) 由激活的当前细胞状态经过输出门o (t) 筛选后得到。 图2. LSTM内部结构 LSTM根据先前状态来输出下一个状态，仅能捕捉先序列的上文信息。双向LSTM则能够同时考虑上下文信息，其每一层都中包含了一个前向LSTM与一个后向LSTM，每个时刻的状态由为两个方向的状态信息组合得到，输出的编码能够结合上下文特征。在本文的模型中，t时刻状态h (t) 的计算为前向 h L ( t ) 与后向状态 h R ( t ) 的相加，即 。 本文使用两个双向LSTM作为编码器，从不同侧面对句子进行编码，以分别提取句子的内容以及风格信息。用ENC s 以及ENC c 分别表示风格以及内容编码器， 与 为其提取风格与内容的特征序列。在后续结构中，内容特征h c 将被输入到解码器中生成词汇，而风格特征h s 则用于调整输出词汇概率分布。 h s = ENC s ( x ) ; h c = ENC c ( x ) 3) 注意力机制 引入注意力机制的目的在于，利用编码层所有隐状态来构建解码器输出所需的上下文向量。对于内容特征序列，在解码器输出下一个词前，用当前输出的词汇编码 x ^ ( t − 1 ) 的查询(query)Q分别与编码器的所有隐状态 对应的键(key)K计算相关性，得到各个状态值(value)V的权重系数。t时刻关注的文本向量 c ( t ) 计算如下： a ( j t ) = e f ( Q ( j ) ， K ( t ) ) ∑ j e f ( Q ( j ) ， K ( t ) ) c ( t ) = ∑ j a ( j t ) V ( j ) 其中， a ( j t ) 表示与t时刻下对第编码序列第j个状态的权重系数。K，Q，V的值均为对应的状态向量h经过前馈网络计算得到， f ( * ) 计算向量之间的相似度。文本向量 c ( t ) 是隐状态的值的加权平均。 4) 调整层：引导调整风格特征 调整层的目的在于根据预设对原句的风格特征调整。为了让模型能够兼容多种类型风格的文本，风格向量对输出的影响应当具有足够的灵活性，即在每一个时间步，风格特征对生成的词汇的贡献度不同。本文借助注意力机制从ENC s 输出的序列抽取风格特征，并在其中根据需求对抽取过程加以不同的引导。首先是查询所用的key向量。在注意力机制中，query与key相似，则受关注度越高。在生成不同风格的句子时，模型对风格特征序列h s 关注的侧重点应当有所差异，因而采用如下方式得到查询风格所用的键向量K s ： K s ( t ) = σ ( W x ^ ( t − 1 ) + b ) T M β 其中 β 为目标风格的编号，每一类风格有其对应的矩阵 ；每个风格矩阵由 α 个e维的属性向量拼接而成， α 为预设种类数量，e为隐状态的尺寸；设定K s 来自矩阵中属性向量的组合，组合方式则是依靠当前输出的词汇编码 x ^ ( t − 1 ) 经过映射得到，它是一个长度为 α 的向量，每个维度的值均处于[0，1]，表示对M中每种属性的权重。 考虑到若目标句子与原句词汇差异较大，仅仅用attention的方式难以获得目标风格的特征。因此在经过attention抽取风格特征后，依据生成句子的目标风格 β ，对其结果添加对应的偏置向量 B β 。当前时刻，调整后的序列特征s (t) 计算如下： s ( t ) = attention ( { h s } ， K s ( t ) ) + B β 5) 解码层 解码层的目的是将编码后的特征向量恢复为文本。对隐状态的解码分为内容特征以及风格特征两个部分，内容特征用于句子主干生成，而风格特征负责为对结果进行调整。首先通过不同的方式对二者进行解码，再将结果汇总输出最终的词概率。 文本特征的解码通过一个LSTM完成，时刻t输出词汇 w ^ ( t ) 的计算过程如下所示： d ( t ) = LSTM ( h ( t ) ， [ c ( t ) ， x ^ ( t − 1 ) ] ) w ^ c ( t ) = softmax ( σ ( W o c d ( t ) + b o c ) / γ ) 其中 x ^ ( t − 1 ) 为上个时刻输出词汇的词向量，d (t) 为解码器输出向量， w ^ c ( t ) 是仅基于内容向量输出的词概率； γ 为温度系数，用于在训练时调整概率的平滑程度。 由于风格特征作用在于对输出内容进行微调，为避免出现输出文本过分依赖的局面，仅采用简单的手段对该部分解码：经过一层前馈网络将风格特征映射到词表的长度，后通过softmax转为概率。 w ^ s ( t ) = softmax ( σ ( W o s s ( t ) + b o s ) / γ ) 最后输出的词概率为二者的加权平均，限定内容向量输出的权重 α 高于风格特征的输出，具体大小根据训练数据学习得到。 w ^ ( t ) = α w ^ c ( t ) + ( 1 − α ) w ^ s ( t ) ，   α ∈ ( 0.5 ， 1 ] 3.2. 损失函数 为了让模型能够达到期望的能力，在训练过程中根据应用设定了如下的损失函数。 1) 端到端误差 模型通过不同的风格矩阵引导生成句子的风格类型。当采用与输入文本相同的风格参数时，模型应当类似于一个自编码器，重新构建回原先的文本。对于输入的句子 ，采用交叉熵度量此刻的损失，有 l r e c = − λ r e c ∑ t log p ( P ( t ) ( w ( t ) ) ) P ( t ) = DEC ( x ^ ( t − 1 ) ， ENC ( x ) ， θ a ( t ) ) 其中P (t) 是t时刻模型输出的概率向量，当时对应风格特征为 θ a ( t ) 。 倘若风格 β 1 与 β 2 之间存在平行语料 ，通过优化二者转换之间的交叉熵损失对模型进行训练： l t s = − λ t s ( ∑ log p ( y | x ， β 2 ) + ∑ log p ( x | y ， β 1 ) ) 2) 隐空间对齐 理论上，相同内容的句子，内容编码器的输出内容应当相近，反之则相离。 模型在转换前后，首先应当保证描述内容不失真，因而对于原句x以及转换结果 x ^ ，在隐空间对二者内容状态序列的计算差异： l c − s i m = f dist ( ENC c ( x ) ， ENC c ( x ^ ) ) 而对于不同内容的句子对(x 1 ，x 2 )，要使误差，首先经过负梯度层转换后再计算二者距离， l c − d i s = f dist ( Rev ( ENC c ( x 1 ) ) ， R e v ( ENC c ( x 2 ) ) ) l c = λ c ( l c − s i m + l c − d i s t ) 而对于风格特征，鼓励增强其灵活性，从而增大对不同类型数据的实用性。因此，不对其计算某一类别的相似度。但对于模型的输入与输出，若是进行了风格的调整，则二者的风格状态序列应当有较低的相似度，反之则相似度高： l s − d i s t = λ s f sim ( ENC s ( x ) ， ENC s ( x ^ ) ) l s − s i m = λ s f dist ( ENC s ( x ) ， ENC s ( x ^ ) ) l s = λ s ( l s − s i m + l s − d i s t ) 式子中， 计算矩阵的差异程度，而 计算向量相似度。 3) 策略梯度 倘若训练数据平行语料较少或不完全可靠(语料由机器生成)，需要引入无监督的训练方式，由风格判别器引导对应风格的文本生成。此时利用策略梯度来计算模型的损失。将新生成的句子 视为一个策略序列，需要获得每一个策略 w ^ ( t ) 最终对全局产生的增益。首先通过目标风格语料的language Model对已生成序列补全获得完整的序列，对补全的序列通过风格判别模型得到当前策略的增益 L ( t ) = LSTM ( Emb ( LM ( x | w ^ ( 1 ) ， ⋯ ， w ^ ( t ) ) ) ) 最终整句生成文本损失大小： l p g = − λ 5 1 n ∑ t p ( w ^ ( t ) ) log L ( t )