打个比方,假设我们正在读一本书,并且需要根据书中的内容生成一个总结或翻译成另一种语言。解码器就像是一个智能助手,它帮助我们理解编码器传递的信息,并逐步构建出新的句子。
场景
想象你正在阅读一本关于《动物行为学》的书,其中有一句话:“猫追了狗”。我们要用Transformer解码器来根据编码器提供的信息生成一句话,比如将其翻译成英文:“The cat chased the dog.”
解码器工作流程
1. 把单词变成数字(嵌入与位置编码)
和编码器一样,我们需要将目标语言的每个单词转换为计算机可以处理的数字形式:
-
词汇嵌入(Embedding):将每个单词转换为一个向量,这个向量能够捕捉到单词的语义信息。
-
位置编码(Positional Encoding):为了保留单词在句子中的顺序信息,我们给每个单词添加一个位置编码。
# 初始化嵌入层和位置编码层(与编码器相同)
embedding_layer = nn.Embedding(len(target_vocab), d_model)
positional_encoding_layer = PositionalEncoding(d_model)
# 假设我们有一个简单的分词器和目标语言的词汇表
target_vocab = {'<pad>': 0, 'the': 1, 'cat': 2, 'chased': 3, 'dog': 4}
targe