transformer现在是最主流的深度学习框架,尤其是大模型的流程让transformer的作用更加凸显,他可以对话、分类、生成文本等功能,那么他到底是如何工作的呢。
B站视频
1、背景知识铺垫
1.1、生成式模型
相信大家在使用手机聊天的输入法时,都会注意到,当你输入文字后,会有很多的选项,那么这些选项是如何而来的呢?
2、N_gram
当我们输入最近怎
______时,手机一般会给出很多的提示,这些提示我们可以发现都是和怎
相关的词组,这些可以选择的词组是如何来的呢?
比如我们使用一个数据集来训练一个模型,那么模型就会将数据集里面涉及到的怎后面所有的情况列举在这里,并按照出现的频率进行排序,让我们进行好选择,这种方法被称为1-Gram
,就是根据前面一个词来选择后面生成的词。
再来看看3-Gram
,就是根据前面的三个词来预测下一个词,这时就在在数据集中找到最近怎三个子同时出现的词组后面出现的说有的字出现的情况,我们可以看到,出现的字的数量少了很多
如果根据前面所选的字的数量越多,那么参考的信息就越多,其实我们预测准确性聚会越高,但是,也有可能无法给出预测,这就是N-gram方法。
当然这种方法因为是靠统计方法,很容易出现过拟合;其次,对于一些低频词汇无法进行预测,所以在真正的大型语言处理中不会使用N-gram。
1.2、神经网络
在transformer中,其实是使用神经网络来进行预测的,当然关于神经网络的概念不是本次要讲的重点,所以不会详细阐述,如果想了解可以参考我的其他文章。
这里做一个简单的介绍:
神经网络会根据大脑神经元的传递方式进行模拟,我们看上图。输入时我们所有的词,编码后向后传递,经过神经元后进行传播和更新权重;而输出呢,当输出的选择时两个标签时就是二分类问题,比如情感分类、垃圾邮件识别等;如果是多个值就是多分类;当然如果输出的选择时全部的词组时那么就是文本生成模型。
我想这一点对于学习transformer的人来说应该比较容易理解。
2、整体流程
我们按照transformer原文的整体架构来简单的进行梳理
2.1 tokenization
在自然语言处理(NLP)中,tokenization是将文本分解为更小的单元的过程,这些单元通常被称为tokens。我们更加容易理解的表示就是分词。
英文一般按照空格进行切分,是比较容易的;而中文就比较麻烦了,需要建立分词辞典根据词典中出现的特有名词等进行切分,当然对于python来说有现成的开源分词工具,如Jieba、spacy等等;还有就是停用词,有些词语没有实际的意义我们可以直接过滤掉来减轻我们模型的压力以及减少不必要的混淆。。。。
2.2 embedding
我们在前面的文章中介绍了很多关于embedding的知识,这里就不再赘述。
总之embedding就是建立自然语言和计算机识别语言的桥梁,主要目的就是相似性高的词会给予更加相近的向量。
这里要多说一句的就是,embedding是如何创建的?
我们的大脑在看见不同的事物的时候,会根据事物的各种特征进行分类,比如我们看见苹果和草莓时,认为他们都是水果,在大脑里面就会有一个位置给他们进行编码,会将他们放在一起,距离比较近的位置,而当出现一个其他的类别,比如建筑物,那么大脑会根据他的类别,将其放在另外一个地方,当然我们这里指的是相对位置。
其实是经网络的构建是一致的,也会给他创建一个位置,让相似的在一起
2.3 位置编码
我们知道RNN和LSTM是一种循环的序列模型,本身训练的过程中就会有位置的训练;但是我们看到transformer中,到现在为止我们没有讲到与序列或者排序相关的内容。
我们知道在自然语言中,字词的顺序是会影响语义的,比如:
- 我爱你
- 你爱我
同样的三个字,顺序不一样,表达的不是一个概念,所以我们必须要考虑这一点
首先我们看一下论文中进行位置编码的位置,他是在做完embedding后,创建位置编码与原始的embedding进行相加,然后再去进行attention。
也就是说我们给予所有的词一个初始的位置编码,让位置编码直接加到原始的embedding上去,让模型不断的去学习和修改每个字词的方向
在不断的调整中,让模型学习到顺序,让后理解他们相互之间的关联(相互作用力)进行修改其embedding。
具体的编码方式我们单独出一篇文章来讲
2.4 注意力机制
关于注意力机制可以参考之前的文章
2.5 Soft Max
Soft Max我们在前面也讲过了,只是这里讲的是在输出结果前,前馈神经网络输出时要进行一个Soft Max,讲要生成的所有的词预测一个概率,将概率最大的进行输出。
2.6 整体架构
这里我们不在罗列原始论文的架构图,我们根据前面讲的内容,自己画一个架构图来方便理解
可视化一下,这样理解起来就简单多了