前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重磅!!|“自然语言处理(NLP)系列08”之 Seq2Seq模型详解

重磅!!|“自然语言处理(NLP)系列08”之 Seq2Seq模型详解

作者头像
ShuYini
发布2019-08-08 15:49:32
8110
发布2019-08-08 15:49:32
举报

本文转载自:李沐论坛

参考论文下载:https://pan.baidu.com/s/1Er6Ybdh8Zn2-BZRykkD-Sg 提取码:wnni

引言

本次文章将主要介绍Seq2Seq模型,其中首先会从模型的原理简介开始,然后讲解模型的编码器和解码器,最后讲解其训练模型。

本文概要

1

Seq2Seq模型的概述

2

Seq2Seq编码模型

3

Seq2Seq解码模型

4

Seq2Seq训练模型

5

参考文献

正文开始

1

Seq2Seq模型的概述

在自然语言处理应用中,输入和输出都可以是不定长序列。以机器翻译为例,输入可以是一段不定长的英语文本序列,输出可以是一段不定长的法语文本序列,例如

英语输入:“They”、“are”、“watching”、“.”

法语输出:“Ils”、“regardent”、“.”

当输入和输出都是不定长序列时,我们可以使用编码器—解码器(encoder-decoder)[1] 或者seq2seq模型 [2]。这两个模型本质上都用到了两个循环神经网络,分别叫做编码器和解码器。编码器用来分析输入序列,解码器用来生成输出序列。

上图中描述了使用编码器—解码器将上述英语句子翻译成法语句子的一种方法。在训练数据集中,我们可以在每个句子后附上特殊符号“<eos>”(end of sequence)以表示序列的终止。编码器每个时间步的输入依次为英语句子中的单词、标点和特殊符号“<eos>”。图中使用了编码器在最终时间步的隐藏状态作为输入句子的表征或编码信息。解码器在各个时间步中使用输入句子的编码信息和上个时间步的输出以及隐藏状态作为输入。 我们希望解码器在各个时间步能正确依次输出翻译后的法语单词、标点和特殊符号“<eos>”。 需要注意的是,解码器在最初时间步的输入用到了一个表示序列开始的特殊符号“<bos>”(beginning of sequence)。

2

Seq2Seq编码模型

‍‍编码器的作用是把一个不定长的输入序列变换成一个定长的背景变量c,并在该背景变量中编码输入序列信息。常用的编码器是循环神经网络。

让我们考虑批量大小为1的时序数据样本。假设输入序列是x1,...,xT,例如xi是输入句子的第i个词,在时间步t,循环神经网络将输入xt的特征向量xt和上个时间步的隐藏状态ht-1变换为当前时间步的隐藏状态ht,我们可以用函数f表达循环神经网络隐藏层的变换:

接下来,编码器通过自定义函数q将各个时间步的隐藏状态变换为背景变量:

比如说,当选择q(h1,h2,...,hT)=hT时,背景变量是输入序列最终时间步的隐藏状态hT。

上面描述的编码器是一个单向的循环神经网络,每个时间步的隐藏状态只取决于该时间步及之前的输入子序列。我们也可以使用双向循环神经网络构造编码器。在这种情况下,编码器每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输入),并编码了整个序列的信息。‍‍

3

Seq2Seq解码模型

编码器输出的背景变量c编码了整个输入序列x1,…,xT的信息。给定训练样本中的输出序列y1,y2,…,yT′,对每个时间步t′(符号与输入序列或编码器的时间步t有区别),解码器输出yt′的条件概率将基于之前的输出序列y1,…,yt′−1和背景变量c,即P(yt′∣y1,…,yt′−1,c)。

为此可以使用另一个循环神经网络作为解码器。 在输出序列的时间步t′,解码器将上一时间步的输出yt′−1以及背景变量c作为输入,并将它们与上一时间步的隐藏状态st′−1变换为当前时间步的隐藏状态st′。因此,我们可以用函数g表达解码器隐藏层的变换:

有了解码器的隐藏状态后,我们可以使用自定义的输出层和softmax运算来计算P(yt′∣y1,…,yt′−1,c),例如,基于当前时间步的解码器隐藏状态st′、上一时间步的输出yt′−1以及背景变量c来计算当前时间步输出yt′的概率分布。

4

Seq2Seq训练模型

根据最大似然估计,可以最大化输出序列基于输入序列的条件概率:

那么可以得到该输出序列的瞬时函数:

模型训练中,所有输出序列损失的均值通常作为需要最小化的损失函数。在上图中其所描述的模型预测中,我们需要将解码器在上一个时间步的输出作为当前时间步的输入。与此不同,在训练中我们也可以将标签序列(训练集的真实输出序列)在上一个时间步的标签作为解码器在当前时间步的输入。

5

参考文献

[1]http://www.hankcs.com/nlp/word-vector-representations-word2vec.html

[2]http://zh.d2l.ai/chapter_natural-language-processing/index.html

[3] Cho, K., Van Merriënboer, B., Gulcehre, C., Bahdanau, D., Bougares, F., Schwenk, H., & Bengio, Y. (2014). Learning phrase representations using RNN encoder-decoder for statistical machine translation. arXiv preprint arXiv:1406.1078。

[4]Sutskever, I., Vinyals, O., & Le, Q. V. (2014). Sequence to sequence learning with neural networks. In Advances in neural information processing systems (pp. 3104-3112).

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AINLPer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档