人工智能-机器学习-深度学习-自然语言处理(NLP)-生成模型:Seq2Seq模型(Encoder-Decoder框架、Attention机制)

本文主要是介绍人工智能-机器学习-深度学习-自然语言处理(NLP)-生成模型:Seq2Seq模型(Encoder-Decoder框架、Attention机制),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们之前遇到的较为熟悉的序列问题,主要是利用一系列输入序列构建模型,预测某一种情况下的对应取值或者标签,在数学上的表述也就是通过一系列形如 X i = ( x 1 , x 2 , . . . , x n ) \textbf{X}_i=(x_1,x_2,...,x_n) Xi=(x1,x2,...,xn) 的向量序列来预测 Y Y Y 值,这类的问题的共同特点是,输入可以是一个定长或者不定长的序列,但输出一般要求是一个固定长度的序列(单个标签较为常见,即长度为1的序列)。

例如利用RNN网络的文本情感分类,输入的文本长度不固定,但输出是某一个情感标签。这样的问题我们已经有相对成熟的方法解决,而在有的现实场景中,我们更希望输入与输出的序列长度都不固定,针对此类问题,则使用Seq2Seq模型。

一、Encoder-Decoder模型

  • 所谓Encoder-Decoder模型,又叫做编码-解码模型。这是一种应用于Seq2Seq问题的模型。
  • 所谓编码,就是将输入序列转化成一个固定长度的向量;解码,就是将之前生成的固定向量再转化成输出序列。
    在这里插入图片描述
  • 编码器和解码器都不是固定的,可选的有CNN/RNN/BiRNN/LSTM/GRU等等,可以自由组合。比如说,你在编码时使用BiRNN,解码时使用RNN,或者在编码时使用RNN,解码时使用LSTM等等。
  • 为了方便阐述,选取了编码和解码都是RNN的组合。
  • 在序列到序列处理不定长序列的过程中,采用了序列的起始标记<S>终止标记</S>来“告诉”编码器的编码过程何时开始与结束,也就是间接反映了当前序列的长度信息
    在这里插入图片描述

1、Encoder(编码)

  • 在RNN中,当前时间的隐藏状态是由上一时间的状态当前时间输入决定的,也就是: h t = f ( h t − 1 , x t ) h_t=f(h_{t−1},x_t) ht=f(ht1,xt)
  • 获得了各个时间段的隐藏层以后,再将隐藏层的信息汇总,生成最后的语义向量: C = q ( h 1 , h 2 , h 3 , … , h T x ) C=q(h_1,h_2,h_3,…,h_{T_x}) C=q(h1,h2,h3,,hTx)
  • 一种简单的方法是将最后的隐藏层作为语义向量C,即 C = q ( h 1 , h 2 , h 3 , … , h T x ) = h T x C=q(h_1,h_2,h_3,…,h_{T_x})=h_{T_x} C=q(h1,h2,h3,,hTx)=hTx

2、Decoder(解码)

  • 解码阶段可以看做编码的逆过程。这个阶段,我们要根据给定的语义向量 C C C 和之前已经生成的输出序列 Y 1 , Y 2 , … Y t − 1 Y_1,Y2,…Y_{t−1} Y1,Y2,Yt1 来预测下一个输出的单词 Y t Y_t Yt,即: Y t = a r g m a x P ( Y t ) = ∏ t = 1 T p ( Y t ∣ Y 1 , … , Y t − 1 , C ) Y_t=argmaxP(Y_t)=\prod^T_{t=1} p(Y_t|{Y_1,…,Y_{t−1}},C) Yt=argmaxP(Yt)=t=1Tp(YtY1,,Yt1,C)
  • 也可以写作: Y t = g ( Y 1 , … , Y t − 1 , C ) Y_t=g(Y_1,…,Y_{t−1},C) Yt=g(Y1,,Yt1,C)
  • 而在RNN中,上式又可以简化成: Y t = g ( Y t − 1 , s t , C ) Y_t=g(Y_{t−1},s_t,C) Yt=g(Yt1,st,C)
    其中 s s s 是输出RNN中的隐藏层, C C C 代表之前提过的语义向量, Y t − 1 Y_{t−1} Yt1 表示上个时间段的输出,反过来作为这个时间段的输入。而 g g g 则可以是一个非线性的多层的神经网络,产生词典中各个词语属于 Y t Y_t Yt 的概率。
  • Encoder-Decoder模型虽然非常经典,但是局限性也非常大。
  • 最大的局限性就在于编码和解码之间的唯一联系就是一个固定长度的语义向量C。
  • 也就是说,编码器要将整个序列的信息压缩进一个固定长度的向量中去。这样做有两个弊端,一是语义向量无法完全表示整个序列的信息,还有就是先输入的内容携带的信息会被后输入的信息稀释掉,或者说,被覆盖了。输入序列越长,这个现象就越严重。这就使得在解码的时候一开始就没有获得输入序列足够的信息, 那么解码的准确度自然也就要打个折扣了。

二、Attention模型

  • 为了解决Encoder-Decoder模型的弊端,提出了Attention模型(注意力模型)。
  • 简单的说,这种模型在产生输出的时候,还会产生一个“注意力范围”表示接下来输出的时候要重点关注输入序列中的哪些部分,然后根据关注的区域来产生下一个输出,如此往复。模型的大概示意图如下所示
    在这里插入图片描述
  • 相比于之前的encoder-decoder模型,attention模型最大的区别就在于它不在要求编码器将所有输入信息都编码进一个固定长度的向量之中。相反,此时编码器需要将输入编码成一个向量的序列,而在解码的时候,每一步都会选择性的从向量序列中挑选一个子集进行进一步处理。这样,在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。而且这种方法在翻译任务中取得了非常不错的成果。
  • 以翻译任务的结构为例。解码部分使用了attention模型,而在编码部分,则使用了BiRNN(bidirectional RNN,双向RNN)
    在这里插入图片描述

1、Decoder(解码)

  • 我们先来看看解码。解码部分使用了attention模型。类似的,我们可以将之前定义的条件概率写作: p ( Y i ∣ Y 1 , … , Y i − 1 , X ) = g ( Y i − 1 , s i , c i ) p(Y_i|Y_1,…,Y_{i−1},X)=g(Y_{i−1},s_i,c_i) p(YiY1,,Yi1,X)=g(Yi1,si,ci)
    上式 s i s_i si 表示解码器 i i i 时刻的隐藏状态。计算公式是: s i = f ( s i − 1 , Y i − 1 , c i ) s_i=f(s_{i−1},Y_{i−1},c_i) si=f(si1,Yi1,ci)
    注意这里的条件概率与每个目标输出 Y i Y_i Yi 相对应的内容向量 c i c_i ci 有关。而在传统的方式中,只有一个内容向量 C C C。那么这里的内容向量 c i c_i ci 又该怎么算呢?其实 c i c_i ci 是由编码时的隐藏向量序列 ( h 1 , … , h T x ) (h_1,…,h_{T_x}) (h1,,hTx) 按权重相加得到的: c i = ∑ j = 1 T x α ^ i j h j c_i=\sum^{T_x}_{j=1}\hat{α}_{ij}h_j ci=j=1Txα^ijhj
    由于编码使用了双向RNN,因此可以认为 c i c_i ci 中包含了输入序列中第 i i i 个词以及前后一些词的信息。将隐藏向量序列按权重相加,表示在生成第 i i i 个输出的时候的注意力分配是不同的。 α i j α_{ij} αij 的值越高,表示第 i i i 个输出在第 j j j 个输入上分配的注意力越多,在生成第 i i i 个输出的时候受第 j j j 个输入的影响也就越大。那么现在我们又有新问题了, α i j α_{ij} αij 又是怎么得到的呢?这个其实是由第 i − 1 i-1 i1 个输出隐藏状态 s i − 1 s_{i−1} si1 和输入中各个隐藏状态共同决定的。也即是: α i j = e α ^ i j ∑ k = 1 T x e α ^ i k α_{ij}=\cfrac{e^{\hat{α}_{ij}}}{\sum^{T_x}_{k=1}e^{\hat{α}_{ik}}} αij=k=1Txeα^ikeα^ij α ^ i k = a ( s i − 1 , h k ) \hat{α}_{ik}=a(s_{i-1},h_k) α^ik=a(si1,hk)
    也就是说, s i − 1 s_{i−1} si1 先跟隐藏向量序列 ( h 1 , … , h T x ) (h_1,…,h_{T_x}) (h1,,hTx)中的每一个 h h h 通过函数 a a a 分别计算得到一个数值,然后使用softmax得到 i i i 时刻的输出在隐藏向量序列 ( h 1 , … , h T x ) (h_1,…,h_{T_x}) (h1,,hTx)中的每一个 h h h 上的注意力分配向量。这个分配向量也就是计算 c i c_i ci 的权重。
  • 我们现在再把公式按照执行顺序汇总一下
    α ^ i k = a ( s i − 1 , h k ) \hat{α}_{ik}=a(s_{i-1},h_k) α^ik=a(si1,hk) α i j = e α ^ i j ∑ k = 1 T x e α ^ i k α_{ij}=\cfrac{e^{\hat{α}_{ij}}}{\sum^{T_x}_{k=1}e^{\hat{α}_{ik}}} αij=k=1Txeα^ikeα^ij c i = ∑ j = 1 T x α ^ i j h j c_i=\sum^{T_x}_{j=1}\hat{α}_{ij}h_j ci=j=1Txα^ijhj s i = f ( s i − 1 , Y i − 1 , c i ) s_i=f(s_{i−1},Y_{i−1},c_i) si=f(si1,Yi1,ci) Y i = p ( Y i ∣ Y 1 , … , Y i − 1 , X ) = g ( Y i − 1 , s i , c i ) Y_i=p(Y_i|Y_1,…,Y_{i−1},X)=g(Y_{i−1},s_i,c_i) Yi=p(YiY1,,Yi1,X)=g(Yi1,si,ci)
    上面这些公式就是解码器在第i个时间段内要做的事情。
    在这里插入图片描述

2、Encoder(编码)

  • 相比于上面解码的创新,这边的编码就比较普通了,只是传统的单向的RNN中,数据是按顺序输入的。
  • 因此第 j j j 个隐藏状态 h → j \overrightarrow{h}_j h j 只能携带第 j j j 个单词本身以及之前的一些信息;
  • 而如果逆序输入,则 h ← j \overleftarrow{h}_j h j包含第 j j j 个单词及之后的一些信息。
  • 如果把这两个结合起来, h j = [ h → j , h ← j ] h_j=[\overrightarrow{h}_j,\overleftarrow{h}_j] hj=[h j,h j]就包含了第 j j j 个输入和前后的信息。

3、Attention模型实验结果

  • 为了检验性能,模型作者分别使用传统模型和attention模型在英语-法语的翻译数据集上进行了测验。
  • 传统模型的编码器和解码器各有1000个隐藏单元。编码器中还有一个多层神经网络用于实现从隐藏状态到单词的映射。在优化方面,使用了SGD(minibatch stochastic gradient descent)以及Adadelta,前者负责采样,后者负责优化下降方向。
  • 得到的结果如下:
    在这里插入图片描述
  • 图中RNNenc表示传统的结构,而RNNsearch表示attention模型。后面的数字表示序列的长度。可以看到,不论序列长度,attention模型的性能均优于传统的编码-解码模型。而RNNsearch-50甚至在长文本上的性能也非常的优异
  • 除了准确度之外,还有一个很值得关注的东西:注意力矩阵。之前已经提过,每个输出都有一个长为Tx的注意力向量,那么将这些向量合起来看,就是一个矩阵。对其进行可视化,得到如下结果
    在这里插入图片描述
  • 其中x轴表示待翻译的句子中的单词(英语),y轴表示翻译以后的句子中的单词(法语)。可以看到尽管从英语到法语的过程中,有些单词的顺序发生了变化,但是attention模型仍然很好的找到了合适的位置。换句话说,就是两种语言下的单词“对齐”了。因此,也有人把注意力模型叫做对齐(alignment)模型。而且像比于用语言学实现的硬对齐,这种基于概率的软对齐更加优雅,因为能够更全面的考虑到上下文的语境。

三、Seq2Seq模型

1、Seq2Seq模型简介

  • 对于一些自然语言处理任务,比如聊天机器人,机器翻译,自动文摘等,传统的方法都是从候选集中选出答案,这对素材的完善程度要求很高,
  • 随着最近几年深度学习的兴起,国外学者将深度学习技术应用于自然语言的生成和自然语言的理解的方面的研究,并取得了一些突破性的成果,比如,Sequence-to-sequence (seq2seq) 模型,它是目前自然语言处理技术中非常重要而且非常流行的一个模型,
  • Seq2Seq模型突破了传统的固定大小输入问题框架,开通了将经典深度神经网络模型运用于翻译与职能问答这一类序列型任务的先河,并且被证实在各主流语言之间的相互翻译以及语音助手中人机短问快答的应用中有着非常好的表现。
  • seq2seq模型是在2014年,是由Google Brain团队和Yoshua Bengio 两个团队各自独立的提出来,他们发表的文章主要关注的是机器翻译相关的问题。而seq2seq模型,简单来说就是一个翻译模型,把一个语言序列翻译成另一种语言序列,
  • seq2seq模型整个处理过程是通过使用深度神经网络LSTM或者RNN,将一个序列作为输入映射为另外一个输出序列,如下图所示:

在这里插入图片描述

2、Seq2Seq模型核心思想

  • Seq2Seq模型是将一个序列信号,通过“编码&解码”生成一个新的序列信号,通常用于机器翻译、语音识别、自动对话等任务。
  • Seq2Seq是一个Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列, Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。
  • Seq2Seq模型是输出的长度不确定时采用的模型,这种情况一般是在机器翻译的任务中出现,将一句中文翻译成英文,那么这句英文的长度加粗样式有可能会比中文短,也有可能会比中文长,所以输出的长度就不确定了。如下图所,输入的中文长度为4,输出的英文长度为2。
    在这里插入图片描述

3、Seq2Seq模型的优化目标

  • 在监督学习的大部分模型中,我们都将考虑如何根据损失函数(或者叫目标函数)来更新模型参数,这也是模型训练的目标,在Seq2Seq模型中也不例外。
  • seq2seq模型的目标在于根据输入序列的信息最大化目标输出序列的概率,类似于语言模型的思路。对于所有的训练样本,有以下形式的损失函数:
    在这里插入图片描述
    其中 N N N 为训练样本数量, X n X_n Xn Y n Y_n Yn为每个样本对应的输入和输出序列, θ θ θ为待学习的参数向量。每一个 p ( Y n ∣ X n , θ ) p(Y_n|X_n,θ) p(YnXn,θ) 都由Encoder-Decoder框架生成,其中包含在神经网络中的大量参数,可通过梯度下降的方式逐步优化。



参考资料:
草稿纸上的seq2seq模型与Attention机制

这篇关于人工智能-机器学习-深度学习-自然语言处理(NLP)-生成模型:Seq2Seq模型(Encoder-Decoder框架、Attention机制)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128929

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G