一,文本输入处理
1.词向量
在pytorch中,将输入的文本序列变成一个词向量采用embedding algorithm算法,就是将一个词映射到一个多维的空间,一般是256或512维。输入序列的长度要根据实际情况而定,选择一个合适的序列长度,当输入序列的长度不满足时,要进行0填充,当输入序列过长时,要进行截断的操作。
2.位置编码
输入的序列不采用位置编码的时候,当改变输入文本序列的位置时,相同的词在不同的位置时表达的效果是一样的,这显然不符合我们的直觉,所以我们得采用位置编码。下面的两张图分别时不带入位置编码和带入位置编码的效果图:
二,编码器
编码器的部分就是将输入的文本序列处理成一个向量序列,这个部分主要包括一个self-attention层和Feed Forward层。
1.self-attention
这个层主要是判断输入序列中相关联的词联系在一起,还能联系上下语义来进行训练。
2. 多头注意力机制
这个是对self-attention的进一步拓展,它能使模型去关注更多东西主要有两个方面,第一是它扩展了模型关注不同位置的能力。第二,多头注意力机制赋予了attention层多个“子表示空间”。
3.残差连接
残差连接其实就是将处理好的序列与未处理的序列相加,解决深层神经网络训练过程中的梯度消失或梯度爆炸等问题。
三,解码器
解码器一般有多个层,它是将编码层得到的注意力序列翻译,得到最后的翻译结果。在序列到序列(Sequence-to-Sequence)模型中,解码器是负责将编码器得到的上下文信息转换为目标序列的关键组件之一。通常,解码器由多个层组成,每一层都包含若干个注意力机制。
四,线性层和softmax层
线性层和softmax层一般放在一起使用,它的作用是将输出的序列转化成每个词的概率,用于输出结果