模型预测控制 索引超出数组元素的数目(0)。_神经语言模型

0b39c9c356b543731bda1fac5297f462.png

让我们考虑一下语言建模:从先前的单词上下文预测即将出现的单词。与前面ngram语言模型相比,基于神经网络的语言模型具有许多优点。其中包括,神经语言模型不需要平滑处理,它们可以处理更长的历史记录,并且可以在相似单词的上下文中进行泛化。对于给定大小的训练集,神经语言模型比n-gram语言模型具有更高的预测精度。此外,神经语言模型是我们将介绍的用于机器翻译、对话和语言生成等任务的许多模型的基础。另一方面,这种性能的提高是有代价的:神经网络语言模型的训练速度明显慢于传统语言模型,因此对于许多任务,n-gram语言模型仍然是正确的工具。我们将描述简单前馈神经语言模型。现代神经语言模型通常不是前馈的,而是递归的,

前馈神经LM是一种标准的前馈网络,它在t时刻将若干个先前单词(

等)的表示作为输入,并输出可能的下一个单词的概率分布。因此,与N -gram LM类似,前馈神经LM通过基于前面N个单词的近似来逼近给定整个先前上下文
的单词的概率(N表示窗口大小):

40967be6e826be3ea38b6e094ec2e620.png

在下面的例子中,我们将使用一个4-gram的例子,所以我们将展示一个网络来估计概率

Embeddings

在神经语言模型中,先前的上下文由先前单词的嵌入(也就是词向量)表示。将先前的上下文表示为嵌入,而不是用n-gram语言模型中使用的精确单词表示,这使得神经语言模型能够比n-gram语言模型更好地泛化为不可见的数据。例如,假设我们在训练中见过这个句子:

I have to make sure when I get home to feed the cat.

但是我们从来没有见过“feed the”这个词后面跟着“dog”这个词。在我们的测试集中,我们试图预测前缀“I forgot when I got home to feed the”之后会发生什么。一个n-gram语言模型可以预测“cat”,但不能预测“dog”。但是,神经LM可以利用“cat”和“dog”具有类似嵌入的事实,将能够为“dog”和“cat”分配相当高的概率,仅仅因为它们有相似的向量。

让我们看看这在实践中是如何工作的。假设我们有一个嵌入字典E,对于词汇表V中的每个单词,这个单词的嵌入,可能是由word2vec算法预先计算出来的。图7.12为简化后的FFNNLM示意图,N=3,我们有一个在时间t移动窗口,其中有一个嵌入向量代表每个3之前的单词( 词

)。这三个向量连接在一起产生x(按照维度拼接),这是一个神经网络的输入层,它的输出是一个softmax,具有单词上的概率分布。因此,
,输出节点42的值是下一个单词
的概率,即索引为42的单词。

图7.12所示的模型是足够的,假设我们通过word2vec方法来单独学习嵌入。使用另一种算法学习我们用于输入单词的嵌入表示的方法称为预训练。如果这些预先训练好的嵌入足以满足您的目的,那么这就是您所需要的。然而,我们常常希望在训练网络的同时学习嵌入。当网络所设计的任务(情感分类、翻译或解析)对什么是好的表示设置了严格的限制时,这是正确的。因此,让我们展示一个允许学习嵌入式的体系结构。为此,我们将在网络中添加一个额外的层,并将错误传播回嵌入向量,从带有随机值的嵌入开始,然后慢慢地向合理的表示方式移动。为了使它在输入层工作,而不是预先训练好的嵌入,我们将把前面的N个单词表示为长度为|V|的一个one-hot vector,即,每个单词对应一个维度。一个one-hot vector是一个向量,它的一个元素在对应于词汇表中该单词的索引的维数中等于1,而所有其他元素都设置为零。

8c136bd4086982d49881dc1986458ee4.png
前馈神经语言模型在文本中移动的简化视图。在每个步骤t中,网络接受3个上下文单词,将每个单词转换为d-维 embeddings,并将3个embeddings连接在一起,得到网络的第1个单元输入层x。这些单位乘以一个权重矩阵W和偏置向量b,然后是一个激活函数,生成一个隐藏层h,然后再乘以另一个权重矩阵u。

最后,一个softmax输出层在每个节点i预测下一个单词

为词汇表单词
的概率。

因此,在“toothpaste”一词的one-hot表示中,假设单词中索引为5,

是1,然后其他的是0

f0bf3be12eee0d04adf1ec0648d48344.png

图7.13显示了LM训练中学习嵌入所需的额外层。这里,N=3个上下文单词表示为3个one-hot向量,通过E嵌入矩阵的3个实例完全连接到嵌入层。注意,我们不想学习将前三个单词映射到投影层的独立权重矩阵,我们想要在这三个单词之间共享一个嵌入字典E(已经学习到的词向量矩阵)。这是因为随着时间的推移,许多不同的单词会以

的形式出现,我们想用一个向量来表示每个单词,不管它出现在哪个上下文位置。因此,嵌入权矩阵E对于每个单词都有一行,每个向量都有d维,因此具有维数

4b78bb74e7a04eea56dd975bf4bad662.png

让我们通过图7.13的前向计算:

  1. 从E中选择三个嵌入: 给定前面的三个单词,我们查找它们的索引,创建3个one-hot向量,然后将每个向量乘以嵌入矩阵E。考虑
    。“The”(索引35)的一个热向量乘以嵌入矩阵E,得到第一个隐藏层的第一部分,称为投影层。因为输入矩阵E的每一行只是一个单词的嵌入,而输入为one-hot列向量
    ,对应单词
    i,输入w的投影层为
    ,对应单词i的嵌入。
  2. 乘以W: 现在我们乘以W(加上b),通过修正的线性(或其他)激活函数得到隐含层h。
  3. 乘以U: h现在乘以U。
  4. 应用softmax: 在softmax之后,输出层的每个节点i估计概率

综上所述,如果我们用e表示投影层,将三个上下文向量的3个嵌入连接起来形成,神经语言模型的方程为:

a6a508432704aa945bb097d836ff1217.png

训练神经语言模型

为了训练模型,即设置所有参数

,我们进行梯度下降,利用计算图上的误差反向传播来计算梯度。因此,训练不仅设置了网络的权重W和U,而且当我们预测即将出现的单词时,
我们还学习了每个单词的嵌入E(更新),这些嵌入E最能预测即将出现的单词。

一般的训练过程是把很长的文本作为输入,把所有的句子连接起来,以随机权重开始,然后迭代地遍历文本,预测每个单词的

。在每个词的
下,交叉熵(负对数似然)损失为

53168fc4d0021f34a9ca347add21e816.png

该损失的梯度为:

6057902abccc7cf65d46393fb4b47874.png

这种梯度可以以任何标准神经网络计算框架,将通过U, W, b, Ef反向传播 .训练参数以减少损失将结果在一个算法语言建模(一个单词预测),但还一套新的嵌入E,可以用作其他词表示的任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值