编码器-解码器模型2025年6月13日 | 阅读12分钟 对于深度学习,编码器-解码器模型是一种神经网络,当输入和输出都具有序列但长度不同时使用。这种架构适用于机器翻译、文本摘要、图像字幕和语音转文本。 该模型的功能分为两个主要阶段 编码器 编码器将输入(一个句子)作为每个词的输入,并将其转换为一个固定长度的向量,称为上下文向量或潜在空间。它将输入中最重要的数据存储到一个向量中。 解码器 解码器通过利用上下文向量,使用上下文和先前的结果,按顺序预测一个接一个的输出元素。 编码器-解码器架构框架在编码器-解码器模型中,编码器和解码器是独立的网络,旨在执行独特的任务。这些组件的构建可以使用循环神经网络、长短期记忆、门控循环单元、卷积神经网络,甚至更高级的选项,如 Transformer。现在,我们将更仔细地研究每个组件的含义。 编码器 编码器的任务是获取给定序列,对其进行编码并将其形成一个单一大小的表示,作为上下文向量或思想向量。在大多数情况下,它包含以下项目 1. 输入嵌入层 借助词嵌入,句子中的每个词或标记在对其进行任何操作之前都会转换为密集向量。在这里,各种单词标记被转换为包含意义的连续向量。 2. 编码器 RNN RNN 接下来应用于嵌入序列,它可以是 LSTM 或 GRU。在每个步骤中,该层都会更新并维护一个隐藏状态,以记录序列的特征及其上下文。 3. 上下文向量 完成后,编码器 RNN 的隐藏状态用作上下文向量。编码器将所有输入数据汇集到一个固定大小的向量中,打包生成解码器所需的数据的关键部分。 解码器它分析编码器发送的上下文向量,然后逐步生成每个输出。通常,它由以下关键区域组成 1. 输出嵌入层 同样,在输入端,序列中的每个标记都通过使用词嵌入转换为密集向量。结果,系统可以将每个词显示为反映其与其他词连接意义的坐标。 2. 解码器 RNN 通常,这些嵌入向量直接进入循环神经网络,例如编码器中使用的 LSTM 或 GRU。解码器 RNN 将上下文向量作为其起点,并逐步考虑上下文和之前生成的内容来生成输出。 3. 输出层 在每个时间步,解码器的隐藏状态通过一个全连接层,然后用 softmax 激活。结果,模型可以估计接下来最常出现的词汇词。 4. 训练和推理 在训练的每个阶段,解码器都依赖于过去的目标词,这个过程称为教师强制。RNN 在推理过程中使用自己的早期预测来创建下一个词。束搜索或采样通常用于改善 seq2seq 模型的结果。 训练编码器-解码器模型意味着比较两个序列,并且损失函数计算预测输出与预期输出之间的差距。通常,此损失通过交叉熵进行评估,并且模型所有部分(包括嵌入和其余部分)的权重在反向传播和梯度下降后重新设置。 由于这种架构,编码器可以捕获输入中的信息,解码器依赖上下文向量来形成相应的输出序列。在训练期间学习输入和输出之间的链接后,模型可以执行许多序列到序列的任务,无论是在翻译、文本摘要还是其他领域。 编码器-解码器模型的功能您可以在下面包含的图中找到编码器-解码器模型的功能。让我们看看过程的各个部分,了解它是如何工作的 步骤 1:对输入句子进行分词 首先,一个句子,例如“我正在学习 AI”,被分成 ["我", "正在", "学习", "AI"]。一旦选择,每个标记都通过嵌入转换为数值,它用密集向量描述其含义。 步骤 2:编码输入 嵌入标记进入编码器后,编码器通过自注意力等机制学习和使用这些标记。由于自注意力,编码器可以看到句子中所有词之间的联系。发送“学习”时,将其与“我”和“AI”相关联也很重要。您最终得到一个上下文向量,将整个输入浓缩为单个固定大小的值。通常,可视化图中的箭头表示随着对话的进行,每个词如何影响其他词。 步骤 3:为输出生成器提供上下文 编码器完成输入处理后,生成一个向量来表示句子的整体含义。之后,解码器使用上下文向量。它将输入缩减为简短的代码,形成输出的起点。 步骤 4:解码器分部分发送输出 解码器获取上下文向量并开始逐字生成输出。训练从尝试找到序列中的第一个词开始。接下来,该预测作为输入提供给下一个词,并且该过程逐步进行。解码器在每一步都非常依赖上下文和之前生成的词。 步骤 5:通过解码进行注意力 在生成每个词时,解码器使用注意力来改变它在句子中注意力的位置。基本上,对于“学习”,解码器通过更多地使用输入中相应的词而不是其他任何东西,努力提供可靠和相关的输出。 步骤 6:提供最终作品 解码器继续运行,直到输出句子的所有部分都准备好。输入情况和之前的词都会影响每个输出词。输出标记逐步出现在图表上,最终得到最终预测或翻译的序列。 编码器-解码器变体的类型正如您所料,编码器-解码器架构根据数据科学和机器学习中的需求以不同的方式使用。 仅编码器模型尽管这种架构工作良好,但它计算成本高且速度慢,因为解码器必须等待编码器完成处理。使用这种方法,研究人员通过仅使用编码器来跳过解码过程。BERT 是一个著名的例子,如下图所示。 左侧显示 BERT 架构,右侧显示 GPT-2 架构 在仅编码器模型中,BERT (来自 Transformer 的双向编码器表示) 是最著名的模型之一。它一次分析所有数据并构建详细的背景信息。由于 BERT 将输入和输出都作为序列处理,因此大多数下游任务都需要为每个目的添加一个头部。 实际上,NER 头部将用实体类型标记每个标记,但情感分析头部将接收整个序列并返回单个整体情感分数。让我们看看构建 BERT 模型的简单方法 此版本的代码未提供预训练权重,但您仍然可以看到其模型架构,如下所示 首先,模型通过使用嵌入层将输入标记 ID 放入 768 维向量中。接下来,池化层打包输出以使其为将执行特定类型作业的头部做好准备。BERT 库由模块组成,核心是基于区分的 BertEncoder,由 12 个相同的 BertLayer 模块堆叠而成,所有模块都具有多个线性层、层归一化、dropout 和一个实现多头自注意力的 BertAttention 模块。 BERT 和其他仅编码器 Transformer 模型中仅使用编码器部分。通常,它们通过掩码语言建模进行教学,其中随机词被特殊掩码覆盖。此模型旨在预测之前命名的标记,通过这样做,它可以更好地理解语言。 仅解码器模型最近人们越来越多地使用解码器模型,这主要归功于 OpenAI 的 GPT 系列的积极成果。尽管较新的 GPT-3.5 和 GPT-4 如此之大,以至于无法在一台机器上运行,但开发人员可以使用 GPT-2 等开源版本。使用 Hugging Face Transformers 可以非常轻松地创建 GPT-2 模型,如下所述。 或者,要加载预训练权重,您可以执行以下操作 这会打印出模型架构,如下所示 常规一维 (Conv1D) 层可以在模型的注意力部分找到。无论名称如何,这些层都是线性投影,因为输入和输出都具有相同的维度。 上面给出了输送机的架构图。在 GPT-2 和 BERT 中,除了使用预层或后层归一化外,两种模型都表现出高度的相似性。此外,nn.Linear 和 nn.Conv1D 都具有相同的作用。 GPT-2 不包含交叉注意力子层,该子层存在于 Transformer 解码器中。由于 GPT-2 中的 Transformer 架构缺少编码器,因此不需要存在编码器输出,并且注意力无法在两个组件之间工作。 同时实现编码器和解码器步骤 1:导入库并加载数据集在此步骤中,我们导入了实现所需的所有库。使用的库包括用于数据操作的 numpy 和 pandas,如果处理文本则使用 string,以及 Tokenizer 和 pad_sequences 工具将文本预处理成模型可以使用的格式。设置好环境后,我们加载将用于训练和评估的数据集。 步骤 2:文本清洗在上面的代码中,标点符号和数字被删除,所有文本都转换为小写,并且去除了前导和尾随空格。 它还在所有印地语句子的开头添加了特殊标记,例如开头的 `start_` 和末尾的 `_end`。 步骤 3:分词分词器根据词索引将文本转换为整数序列。为了保持句子边界,印地语分词器保留了特殊标记(`start_`、`_end`)。 步骤 4:填充将序列填充到统一长度 输入将是教师强制解码器输入的一个步骤的移位版本。例如,如果 `decoder_input = 'start _maine dekha'`,则 `decoder_target = 'maine dekha _end'`。它还有助于模型学习预测序列中的下一个词。 步骤 5:定义模型架构编码器 它接收英语输入序列,将其嵌入并通过 LSTM 层。LSTM 返回隐藏状态(`state_h`)和单元状态(`state_c`),您可以使用它们来初始化解码器。 解码器 印地语输入序列用于最初隐藏编码器,并使用单元状态。给定一个印地语句子输入,它在每个时间步输出印地语词汇上的概率分布,这本质上预测了序列中的下一个词。 步骤 6. 编译和训练我们的模型在源(`encoder_input`)和目标(`decoder_input`)上进行训练,带有移位目标,并使用 RMSProp 优化器和交叉熵损失。 步骤 7:推理模型编码器推理 解码器推理 步骤 8:反向查找我们用它在解码过程中将预测索引映射回词。 步骤 10:翻译功能它解码编码的输入句子,直到获得 ` 最后,一个示例输入被输入到模型中,以生成并显示其预测输出。 示例输出 English: And Hindi: aur 编码器-解码器模型的优缺点优点充分利用序列到序列模型 对于涉及机器翻译、摘要、对话生成或语音识别的任务,编码器-解码器架构非常可靠。它们可以用于许多 NLP 应用程序,因为它们处理不同长度的输入序列和输出序列。 允许用户获取上下文信息 输入后,编码器会形成一个包含最重要的上下文数据的固定大小向量。因此,解码器能够更好地理解其生成的序列。 适用于具有不同组合的序列 这些模型可以处理属于不同长度类别的输入并创建输出。编码器接收任何类型的输入,解码器根据编码上下文生成新输出。 使用此框架更容易进行迁移学习 编码器-解码器模型可以选择使用已训练的嵌入或已训练的编码器/解码器组件。因此,该模型可以用于解决它以前从未遇到过的新问题。 缺点当指导变得不清楚时 此类编码器-解码器模型没有直接的方法将输入和输出部分相互分配。由于上下文向量是通用摘要,因此将精确的词或短语与其结果相关联变得具有挑战性。 长序列带来的问题 当处理非常大的输入集时,由于上下文向量始终是相同大小,重要细节通常变得不那么明显。此外,处理长序列可能导致梯度消失或爆炸。 仅通过上下文向量理解 该设计主要通过上下文向量组织输入中的信息。如果编码器和上下文向量都不清楚,解码器的答案可能会缺乏质量。 训练复杂性 训练编码器-解码器模型比更简单的模型类型更复杂。有效使用序列数据、教师强制、处理可变长度数据的不同方法以及处理大型词汇表的方法是必要的。 结论编码器-解码器模型通过适应任何长度的输入和输出,改变了翻译、摘要和语音识别的完成方式。由于其架构,编码器获得重要的上下文作为固定大小的向量,解码器使用该向量创建适当的序列。 尽管如此,这些模型在处理更长的脚本、训练复杂以及输入和输出之间可能失去一些紧密连接方面面临问题。尽管如此,它们的可调性、使用迁移学习的能力以及在各种 NLP 领域中的良好工作,使编码器-解码器模型成为深度学习中用于数据序列的关键方法。 下一个主题机器学习工具 |
我们请求您订阅我们的新闻通讯以获取最新更新。