文章目录
一、前置知识
1、(Encoder-Decoder)结构
在深度学习中,编码器-解码器(Encoder-Decoder)结构是一种常见的神经网络架构,通常用于序列到序列(Seq2Seq)任务,如机器翻译、文本摘要等。编码器负责将输入序列编码成一个固定长度的向量表示,而解码器则根据这个向量表示生成输出序列。
-
编码器(Encoder)端:编码器是用于将输入序列转换为上下文向量(context vector)或隐藏状态的部分。编码器通常由多个循环神经网络(如LSTM、GRU)组成,每个时间步接收输入序列中的一个元素,并逐步编码输入序列的信息。编码器的最终输出是一个固定长度的上下文向量,其中包含了输入序列的信息。
-
解码器(Decoder)端:解码器是用于根据编码器生成的上下文向量或隐藏状态来生成输出序列的部分。解码器也通常由循环神经网络组成,它接收编码器的输出作为初始状态,并逐步生成目标序列的元素。解码器在每个时间步都会输出一个元素,直到生成完整的输出序列。
在训练阶段,编码器-解码器结构通常会采用教师强制(teacher forcing)的方法,即将真实的目标序列作为解码器的输入,以指导解码器生成正确的输出序列。在推理阶段,解码器会根据前一个时间步生成的单词来预测下一个单词,直到生成结束符或达到最大长度为止。
编码器-解码器结构在序列到序列任务中表现出色,广泛应用于机器翻译、文本摘要、对话系统等领域。
2、注意力机制
- 注意力机制(Attention Mechanism)是一种用于增强深度学习模型对序列数据处理能力的技术,特别是在序列到序列(Seq2Seq)任务中(像翻译)。传
- 统的编码器-解码器结构在处理长序列数据时存在一定的局限性,而引入注意力机制可以帮助模型动态地关注输入序列中不同位置的信息,从而提高模型的性能和泛化能力。
- 在注意力机制中,解码器在生成每个输出时,会根据当前的解码器状态和编码器的所有隐藏状态计算出一个注意力权重向量,表示对编码器隐藏状态的加权关注。这个注意力权重向量告诉模型在生成当前输出时应该关注输入序列中的哪些部分,从而能够更好地捕捉输入序列中不同位置的重要信息。
具体而言,注意力机制通常包括以下几个组成部分:
-
注意力分数计算:计算解码器当前状态与编码器所有隐藏状态之间的相似性分数,通常可以使用点积、加性或乘性注意力等方式计算。
-
注意力权重计算:根据计算得到的注意力分数,通过softmax函数将其转换为注意力权重向量,表示对编码器隐藏状态的关注程度。
-
上下文向量计算:将注意力权重向量与编码器隐藏状态相加加权求和,得到上下文向量,作为当前解码器状态的一个补充信息。
二、Transformer结构
1、介绍
- Transformer结构架构本质上也是Encoder-Decoder架构。
- Transformer模型是一种机器学习模型,特别适用于自然语言处理任务。它是由Google研究人员提出的,并在2017年发表的论文中详细介绍。Transformer模型的核心思想是完全基于自注意力机制(self-attention mechanism)来实现序列到序列的学习,而不需要依赖传统的循环神经网络(RNN)或卷积神经网络(CNN)。
- Transformer模型的创新之处在于引入了注意力机制,使得模型可以同时考虑输入序列中所有位置的信息,而不是像RNN一样逐步处理序列。这种并行计算的特性使得Transformer在处理长序列时表现更加出色,并且在训练过程中也更容易并行化。
2、输入层
1)Byte Pair Encoding
- 输入一连串文本,需要将其切分成单词,传统的切分是按照空格,但是这样做会让单词不同形式(比如复数等)有不同的向量模式,因此Transformer结构采用Byte Pair Encoding
- 在自然语言处理中,BPE算法通常用于分词和词汇表构建。通过反复合并频繁出现的字符序列,BPE算法可以动态地构建词汇表,将原始文本中的词分解为子词或字符级别的表示,从而能够更好地处理未登录词(out-of-vocabulary)和稀有词(rare words)。
- 本质上是统计频率,合并字母。
-
初始化:首先,将所有字符视作一个单独的符号,并将这些字符作为基本单元,构建初始词汇表。
-
统计频次:统计训练数据中每个字符序列(如字母、字词等)出现的频次。
-
合并频次最高的一对符号:在每次迭代中,选择训练数据中频次最高的一对相邻符号进行合并,形成一个新的符号。合并后的符号将被添加到词汇表中,并更新频次统计。
-
重复合并直至满足条件:重复以上步骤,直到达到预设的词汇表大小或者其他停止条件。通常情况下,可以通过设置词汇表的大小或者合并次数来控制停止条件。
-
生成编码表:最终,根据合并过程中生成的符号对,可以构建一个编码表,将原始文本中的符号映射到合并后的符号。
- 通过上述的方式,lowest在分解过程中会出现low,这样的便利是在按空格分解中不能是实现的。
2)位置编码——positional Encoding
- 在Transformer中,没有像循环神经网络(RNN)或者卷积神经网络(CNN)那样的隐含状态来捕捉序列中元素的顺序信息,因此需要引入Positional Encoding来帮助模型理解输入序列中元素的位置信息。
- Positional Encoding的实现方式通常采用正弦和余弦函数,公式如下:
P E ( p o s , 2 i ) = sin ( p o s 1000 0 2 i / d m o d e l ) PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right) PE(pos,2i)=sin(100002i/dmodelpos)
P E ( p o s , 2 i + 1 ) = cos ( p o s 1000 0 2 i / d m o d e l ) PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right) PE(pos,2i+1)=cos(100002i/dmodelpos)
-
其中, p o s pos pos表示输入序列中的位置, i i i表示位置编码的维度, d m o d e l d_{model} dmodel表示Transformer模型的隐藏层维度。通过这样的编码方式,不同位置的元素在嵌入空间中会有不同的位置编码,帮助模型区分不同位置的元素。
-
Positional Encoding被加到输入嵌入中,将原始的词嵌入和位置编码相加作为模型的输入。这样,模型在处理序列时不仅考虑了词语的语义信息,还考虑了词语在序列中的位置信息,有助于提高模型对序列的理解能力。
3、核心架构
- 自注意力机制(self-attention mechanism)是Transformer模型中的关键组成部分,用于捕捉输入序列中各个位置之间的关系,帮助模型理解长距离依赖关系。下面是自注意力机制的实现原理:
-
Query、Key、Value的计算:
- 对于输入序列中的每个词向量,通过线性变换得到三组新的向量:Query向量( Q Q Q)、Key向量( K K K)和Value向量( V V V)。通常通过独立的权重矩阵乘以输入向量来实现这一步骤。
-
计算注意力权重:
- 对于每个Query向量,计算其与所有Key向量的点积,然后通过softmax函数将得到的分数归一化为注意力权重。这一步可以看作是计算Query与每个Key的相关性,用以指导后续处理。
-
加权求和:
- 使用注意力权重对Value向量进行加权求和,得到最终的自注意力表示。这一步可以看作是根据Key的重要性对Value进行加权聚合,从而得到输入的表示。
-
多头注意力(可选):
- 为了增加模型的表示能力,通常会使用多头注意力机制,即对不同的Query、Key、Value进行多次线性变换和自注意力计算,最后将多个注意力头的结果拼接起来。
-
残差连接与层归一化:
- 将自注意力计算的输出与输入进行残差连接,然后再经过层归一化(Layer Normalization)处理。这样可以确保梯度能够顺利地传播,并且有助于模型训练的稳定性。
三、Transformer库
1、介绍
Transformer库是一个用于实现Transformer模型及其各种变种的Python库。在自然语言处理领域,Transformer模型已经成为许多任务的主流模型架构,如BERT、GPT等,因此有许多开源库提供了便利的接口和工具来实现和使用Transformer模型。
以下是一些常用的Transformer库:
-
Hugging Face Transformers:Hugging Face开发的Transformers库是目前应用最广泛的Transformer模型库之一,提供了各种预训练的Transformer模型的接口,包括BERT、GPT、RoBERTa等,支持多种任务的微调和推理。
-
Google Research BERT:Google Research开发的BERT库提供了BERT模型的实现和预训练代码,可以用于自定义任务的微调和预训练。
-
OpenAI GPT:OpenAI发布的GPT库包含了GPT系列模型的实现,可以用于文本生成等任务。
-
PyTorch-Transformers:PyTorch-Transformers库提供了基于PyTorch框架的Transformer模型的实现,支持多种预训练模型和任务的微调。
-
TensorFlow Transformers:TensorFlow Transformers库提供了基于TensorFlow框架的Transformer模型实现,包括BERT、GPT等模型的接口和工具。
这些Transformer库通常提供了预训练模型的加载、文本编码、任务微调等功能,可以帮助开发者快速实现和应用Transformer模型在自然语言处理任务中。选择合适的Transformer库取决于使用的框架、任务需求、以及对模型的特定功能和性能要求。
2、demo
根据你任务的名字调用相应的模型完成任务。