感谢Datawhale和相关热心人员提供的学习资料。
学习内容:https://github.com/datawhalechina/Learn-NLP-with-Transformers
seq2seq模型
一个序列到序列(seq2seq)模型,接收的输入是一个(单词、字母、图像特征)序列,输出是另外一个序列。
seq2seq模型是由编码器(Encoder)和解码器(Decoder)组成的。其中,编码器会处理输入序列中的每个元素,把这些信息转换为一个向量(称为上下文(context))。当我们处理完整个输入序列后,编码器把上下文(context)发送给解码器,解码器开始逐项生成输出序列中的元素。
在机器翻译任务中,上下文(context)是一个向量(基本上是一个数字数组)。
如何把每个单词都转化为一个向量呢?我们使用一类称为 "word embedding" 的方法。这类方法把单词转换到一个向量空间,这种表示能够捕捉大量单词之间的语义信息。
学习感想:
抛开复杂的技术实现来说,个人感觉Transformer的成功基石就是Word embedding。以word2vec为例,在word2vec的形成过程中已经通过大量的训练提取了语言的特征值,其中也包含了句子中词语的上下文关系,即word2vec的结果权重里面本身包含了训练数据的上下文关系。
而transformer是一个查找的过程,新输入一句话/一个词,看下Word embedding的历史训练数据中这句话对应翻译语句,并找出最常用的(概率最大)。
用白话来说,个人理解为:先拿到很多的文字数据(训练数据)并进行融合,得到一个百科全书(word2vec)。在百科全书里面新输入一句话,看一下这句话在之前被翻译成了其它什么句子,如果有多个翻译结果,则返回出现次数最多的(概率最大)。
用一句话来说:将Word embedding理解为一个训练好的模型,模型里面包含训练好的上下文关系,新输入句子或词语得到一个预测值。
transformer理解为一个拟合函数,目标就是向训练数据靠拢。