Transformer编码器的理解与Pytorch实现
Transformer的整体结构
论文:Attention is All You Need Transformer模型是2017年Google公司在论文《Attention is All You Need》中提出的。自提出伊始,该模型便在NLP和CV界大杀四方,多次达到SOTA效果。2018年,Google公司再次发布论文《Pre-training of Deep Bidirectional Transformers for Language Understanding》,在Transformer的基础上,提出了当红炸子鸡BERT模型,成功在多项NLP任务中取得领先的结果。
Transformer结构
上图是Transformer模型的结构图,从图中,我们可以看出模型宏观上可分为两个大模块, 一个是编码器,一个是解码器。
文本嵌入层
文本向量的表示一般有三种方法:
- one-hot编码
- 词汇映射 (Word2Vec)
- Word Embedding(广义上Word2Vec也属于Word Embedding的一种)
词嵌入(Word Embedding)是单词的一种数值化表示方式,一般情况下会将一个单词映射到一个高维的向量中(词向量)来代表这个单词。文本嵌入层的作用就是,将文本中词汇的数字表示转变为高维的向量表示,旨在高维空间捕捉词汇间的关系。
class Embedding(nn.Module):
def __init__(self, vocab, embe_dim):
'''
param vocab: 词表的大小
param embe_dim: 词嵌入的维度
'''
super(Embedding, self).__init__()
self.lut = nn.Embedding(vocab, embe_dim, padding_idx=0)
self.embe_dim = embe_dim
def forward(self,x):
'''
:param x: 输入给模型的文本通过词汇映射后的张量
return:
'''
return self.lut(x) * math.sqrt(self.d_model)
|