动手学深度学习(MXNet)6:自然语言处理

本章中,根据输入与输出的不同形式,按”定长到定长“、”不定长到定长“,”不定长到不定长“的顺序,逐步展示在自然语言处理中如何表征并变换定长的词或类别以及不定式的句子或段落序列。

词嵌入(word2vec)

把词映射为实数域向量的技术也叫词嵌入(word embedding)。

为何不采用one-hot向量

跳字模型:训练通过最大化似然函数来学习模型参数,即最大似然估计。这等价于最小化以下损失函数:

如果使用随机梯度下降,那么在每一次迭代里我们随机采样一个较短的子序列来计算有关该子序列的损失,然后计算梯度来更新模型参数。梯度计算的关键是条件概率的对数有关中心词向量和背景词向量的梯度。

vc的梯度

近似训练

由于softmax运算考虑了背景词可能是词典V中的任一词,以上损失包含了词典大小数目的项的累加。对于含上百万词的较大词典,每次的梯度计算开销可能过大。为了降低该计算复杂度,本节将介绍两种近似训练方法,即负采样(negative sampling)或层序softmax(hierarchical softmax)。

负采样:修改了原来的目标函数,给定中心词Wc的一个背景窗口,我们把背景词Wo出现在该背景窗口看作一个事件,并将该事件的概率计算为:D=1表示去正样本

其中σ函数与sigmoid函数的定义相同。则给定一个长度为T的文本序列,窗口大小为m,最大联合概率为:

以上的联合概率最大化为1时,所有词向量相等且值为无穷大。这样的词向量毫无意义。

负采样通过采样并添加负类样本使目标函数更有意义。根据分布P(w)采样K个未出现在该背景窗口中的词,即噪声词。

其中条件概率被近似表示为:

现在,训练中每一步的梯度计算开销不再与词典大小相关,而是与K线性相关。当K取较小的常数时,负采样在每一步的梯度计算开销较小。

层序softmax

层序softmax是另一种近似训练法。它使用了二叉树,树的每个叶结点代表词典V中的每个词。

假设L(w)为根结点到词w的叶结点的路径上的结点数。设n(w,j)为该路径上第j个结点。层序softmax将跳字模型中的条件概率近似表示为:

Word2vec的实现

使用PTB语料库

子词嵌入(fastText)

英语单词通常有其内部结构和形成方式。例如dog, dogs和dogcatcher的字面上推测它们的关系。

word2vec并没有直接利用构词学中的信息。它将dog和dogs分别用两个不同的向量表示。

鉴于此,fastText提出了子词嵌入的方法,试图将构词信息引入word2vec中的跳字模型。

在fastText中,每个中心词被表示成子词的集合。以单词”where“为例,在前后加入”<>“对其进行字符级的n元语法,如n=3时,"<wh"、"whe","ere","re>"以及特殊子词“<where>”。

在fastText中,对于一个词w,将它所有长度在3~6的子词和特殊子词的并集记为。那么词典则是所有词的子词集合的并集。假设词典中子词g的向量为Zg,那么跳字模型中词w的作为中心词的向量Vw则表示成

fastText的其余部分同跳字模型一致,不在此重复。可以看到,与跳字模型相比,fastText中词典规模更大,造成模型参数更多,同时一个词的向量需要对所有子词向量求和,继而导致计算复杂度更高。但与此同时,较生僻的复杂单词,甚至是词典中没有的单词,可能会从同它结构类似的其他词那里获取更好的词向量表示。

全局向量的词嵌入(GloVe)

  • 在有些情况下,交叉熵损失函数有劣势。GloVe模型采用了平方损失,并通过词向量拟合预先基于整个数据集计算得到的全局统计信息。
  • 任意词的中心词向量和背景词向量在GloVe模型中是等价的。

求近义词和类比词

使用预训练的词向量来求近义词和类比词。

如果词典特别大,如何提升近义词或类比词的搜索速度?

文本情感分类:使用循环神经网络

使用多层RNN

文本情感分类:使用卷积神经网络(textCNN)

一维卷积:

多输入通道的一维互相关运算:

TextCNN中使用的时序最大池化(max-over-time pooling)层实际上对应一维全局最大池化层:假设输入包含多个通道,各通道由不同时间步上的数值组成,各通道的输出即该通道所有时间步中最大的数值。因此,时序最大池化层的输入在各个通道上的时间步数可以不同。

为提升计算性能,我们常常将不同长度的时序样本组成一个小批量,并通过在较短序列后附加特殊字符(如0)令批量中各时序样本长度相同。这些人为添加的特俗字符当然是无意义的。由于时序最大池化的主要目的是抓取时序中最重要的特征,它通常能使模型不受人为添加字符的影响。

编码器-解码器(seq2seq)

不定长-不定长。在训练集中,在每个句子后附上特殊符号“<eos>”(end of sequence)以表示序列的终止。在解码器在最初时间步的输入用到了一个表示序列开始的特殊符号“<bos>”(beginning of sequence)

束搜索

设输出文本词典Y的大小为|Y|,输出序列的最大长度为T。所有可能的输出序列一共有O(|Y|^T)种。

一个简单的解决方案:贪婪搜索。对于任意时间步,输出条件概率最大的词。

一旦搜索出“<eos>"符号,便完成输出。

贪婪搜索的主要问题是不能保证得到最优输出序列。

穷举搜索:开销过大

而束搜索(beam search)是对贪婪搜索的一个改进算法。它有一个束宽(beam size)超参数。设为k。每一步选取最大的k个词。

取以下分数最高的序列作为输出序列:

其中L为最终候选序列长度,α一般可选为0.75。分母L^α是为了惩罚较长序列在以上分数中较多的对数相加项。

分析可知,束搜索的计算开销为O(k|Y|T′)。介于贪婪搜索和穷举搜索的计算开销之间。

  • 预测不定长序列的方法包括贪婪搜索、穷举搜索和束搜索。
  • 束搜索通过灵活的束宽来权衡计算开销和搜索质量。

注意力机制

注意力机制如何为解码器在时间步2计算背景变量。

时间步t'的背景变量为所有编码器隐藏状态的加权平均:

为了得到概率分布,我们可以使用softmax运算:

由于同时取决于解码器的时间步t'和编码器的时间步t。我们不妨以解码器在时间步t'-1的隐藏状态s(t'-1)与编码器在时间步t的隐藏状态ht为输入,并通过函数a计算:

这里函数a有多种选择,如果两个输入向量长度相同,一个简单的选择是计算它们的内积

而最早论文则即将输入连接后通过含单隐藏层的多层感知机变换:

矢量化计算,注意力机制可采用更高效的矢量化计算。

更新隐藏状态:以GRU为例,

Transformer模型的设计依靠注意力机制来编码输入序列并解码出输出序列的变换器。它抛弃了RNN和CNN的架构。它在计算效率上更具明显优势。后面的Bert也得到应用。以及基于变换器设计的GPT-2模型

机器翻译

英语翻译成德语

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值