seq2seq模型一般由一个编码器和一个解码器组成。编码器将token的embedding序列编码成分布式表示(可能是向量序列或者一两个单独的语义向量),然后解码器根据编码器的结果生成出一个向量的序列。解码器生成的向量序列根据下游任务的不同有不同的利用方式。
**在使用seq2seq模型时,由于一些原因我们需要添加一些特殊的标签,或者叫dummy token,用来表示序列开始、序列结束、句子/段落的开始结束等等。**下面举例说明。
假设某seq2seq模型被用作英中翻译,且我们的样本是这样的:
x: "I love you."
y: "我爱你。"
那么编码器的输入应当是下列序列的embedding:
<SOS> i love you . <EOS>
这里<SOS>
代表序列开始(Start Of Sequence),<EOS>
代表序列结束(End Of Sequence),用什么符号表示并不重要,只要你喜欢并且它不在原始文本中就可以了。对于输入序列,开始标签可有可无,比较重要的标签是<EOS>
。因为我们希望编码器通过看到结束标签来意识到输入序列已经结束,使得它输出整个输入的分布式表示。如果没有结束标签,可能编码器输出的向量更多地包含最后一个词附近局部的信息,而不是全局的信息。
解码器的输入应当是下列序列的embedding(假设我们用teacher forcing的方式):
<SO