1.Transformer自下而上(1)机器翻译之Sequence-to-Sequence模型
2.seq2seq模型、模型attention机制的源码原理与pytorch实现
Transformer自下而上(1)机器翻译之Sequence-to-Sequence模型
本文基于《RNN模型与NLP应用》系列课程,深入探讨了Seq2Seq模型在机器翻译中的模型应用。内容分为三部分:句子tokenization、源码构建字典与one-hot编码,模型以及Seq2Seq模型的源码光纤 5.1 源码输出详细结构。
首先,模型我们对句子进行tokenization,源码即将句子分割为基本单元,模型比如“我是源码中国人”可以被分解为['我', '是', '中国人']。在机器翻译任务中,模型如从英语翻译到德语,源码ro轻社区源码我们通常以字符为单位进行分词。模型此过程形成不同语种的源码字典,用于后续的模型编码操作。
接着,我们将分词后的字符通过one-hot编码转化为向量表示,每个字符由一个列向量构成,其中唯一一个位置的值为1,表示该字符的出现。一句话或一个词则由矩阵表示。
Seq2Seq模型由Encoder和Decoder两部分组成,都是区块狗源码开发LSTM结构。Encoder负责提取输入句子的特征,并将其最终输出传递给Decoder。Decoder基于Encoder的输出和起始符号,开始进行预测。每个预测步骤生成概率向量,与真实字符匹配计算损失,以此更新模型参数。
预测流程中,Decoder在获得起始符号和Encoder的隐状态后,基于预测概率向量选择最可能的下一个字符进行预测,重复此过程直至终止符号出现。恋爱社交APP源码此过程即为Seq2Seq模型的训练与预测。
对于已经训练好的模型,其推理流程与训练类似,但不再需要损失计算与参数更新,只需输入待翻译的句子,按照预测步骤生成翻译结果。
最后,给出Keras实现Seq2Seq模型的示意图,展示了模型在推理阶段的流程。直观的网络结构图有助于理解Seq2Seq模型在机器翻译任务中的工作原理。
seq2seq模型、刷会员网站源码attention机制的原理与pytorch实现
本文主要内容如下:
完整代码见 seq2seq_with_attention
1. seq2seq与attention
1.1 seq2seq模型
seq2seq模型主要用于解决输入为一个文本序列,输出也为一个文本序列的问题,如机器翻译,问答等。该模型由encoder与decoder组成,均采用LSTM实现。其原理是将源序列通过encoder处理压缩为一个向量,代表源序列,然后将此向量作为decoder的初始状态,decoder根据状态输出所需结果。例如,输入序列"ABC"后,seq2seq模型生成输出序列"WXYZ"。但此方法存在输入序列压缩为向量后,信息丢失的问题,尤其是对于长序列。为缓解此问题,论文[1]中提出将输入序列逆序后输入encoder,这样做的一个insight是对于像机器翻译类的任务,源语言与目标语言的词汇大体上是从前往后按顺序对应的。输入逆序后,encoder最后处理的是第一个词,在最后的压缩向量中越靠前的词的信息可能被保留下来,decoder在处理时会看到更多的序列的前面的信息,从而减小误差累计的问题。
1.2 attention
解决seq2seq模型中信息丢失问题更好的方法是使用attention机制。Transformer模型则完全通过attention机制构造。利用Transformer编码器的BERT开启了大规模预训练模型时代,而利用Transformer解码器的GPT系列则开启了LLM时代,推出了像ChatGPT这样的具有里程碑意义的产品。可以说attention是目前NLP领域最重要的概念之一。
将seq2seq与attention机制结合来自于论文[2]。attention方法的思想是让每个解码的步骤都参考编码器所有时刻的输出而不仅是最后的状态。例如,在汉译英例子中,翻译"I like"后的单词时参考encoder所有时间步的输出。attention机制原理如下:
[公式]
其中,attn表示attention操作,因为attention可以通过不同的方法实现。[公式]表示输入序列词长度。[公式]表示输入序列时间步 [公式] 处的信息对解码器 [公式] 时间步的重要程度。[公式]即为编码器所有时刻对编码器[公式]时刻的权重向量。对编码器所有时刻的状态加权求和即为编码器对解码[公式]时刻的参考信息。
2. seq2seq_with_attention翻译模型的实现
模型与 CSN Winter Assignment 4 一致
2.1 encoder
编码器通过双向LSTM实现,如图2所示。每个时间步的状态[公式]分别由前向和后向状态拼接表示:[公式], [公式]。详细表示如下:
[公式]
将正向最后的状态与反向最后的状态拼接然后做线性变换作为解码器的初始状态:
[公式]
以上操作通过pytorch实现如下:
2.2 decoder
训练时采用teach forcing,即decoder每一步的输入使用上一步的真实标签。本模型中做了一处修改,将上一步的实际输出与上一步的真实标签拼接后作为当前步的实际输入。即
[公式]
其中,[公式]为[公式]步的预测的词的向量表示,[公式]为[公式]步的真实标签的词对应的embedding。
[公式]
其中,[公式] 与 [公式]为上一步的状态。
将decoder的状态[公式]与encoder的状态[公式]进行attention处理。 这里采用乘性attention方法:
[公式]
将attention步骤获取的结果[公式] 与decoder的状态[公式]拼接,然后经过线性变换,tanh激活函数及dropout处理获取最后的输出[公式],将[公式]映射到目标词空间并做softmax,获取每一个词预测概率
[公式]
3. 模型训练
训练代码见 seq2seq_with_attention
4. 模型测试
模型在测试集上一些汉译英示例如下:
[1] Sequence to Sequence Learning with Neural Networks
[2] Neural Machine Translation by Jointly Learning to Align and Translate
本文使用 Zhihu On VSCode 创作并发布