北京那个医院治疗白癜风啊 https://yyk.39.net/bj/zhuanke/89ac7.html

选自imaddabbura

机器之心编译

你有没有想过Gmail自动回复是如何进行的?或者手机在你输入文本时如何对下一个词提出建议?生成文本序列的通常方式是训练模型在给定所有先前词/字符的条件下预测下一个词/字符出现的概率。此类模型叫作统计语言模型,这种模型会尝试捕捉训练文本的统计结构,本文从字符级语言模型和名字预测出发向读者介绍了语言建模的核心概念。

循环神经网络(RNN)模型常用于训练这种语言模型,因为它们使用高维隐藏状态单元处理信息的能力非常强大,建模长期依赖关系的能力也非常强。任意语言模型的主要目的都是学习训练文本中字符/单词序列的联合概率分布,即尝试学习联合概率函数。例如,如果我们试图预测一个包含T个词的单词序列,那么我们试图获取令联合概率P(w_1,w_2,…,w_T)最大的词序列,等价于所有时间步(t)上条件概率的累乘:

本文描述了字符级的语言模型,其中几乎所有概念都适用于其它语言模型,如单词级的语言模型等。字符级语言模型的主要任务是根据之前的所有字符预测下一个字符,即逐个字符地生成文本内容。更正式地来说,给出训练序列(x^1,…,x^T),RNN使用输出向量序列(o^1,…,o^T)来获取预测分布P(x^t

x^t?1)=softmax(o^t)。

下面我用我的姓氏(imad)为例介绍字符级语言模型的运行过程(该示例的详情见图2)。

1.我们首先用语料库中所有名字的字母(去掉重复的字母)作为关键词构建一个词汇词典,每个字母的索引从0开始(因为Python的索引也是从零开始),按升序排列。以imad为例,词汇词典应该是:{「a」:0,「d」:1,「i」:2,「m」:3}。因此,imad就变成整数列表:[2,3,0,1]。

2.使用词汇词典将输入和输出字符转换成整型数列。本文中,我们假设所有示例中。因此,y=「imad」,。换言之,x^t+1=y^t,y=[2,3,0,1],

3.对于输入中的每一个字符:

将输入字符转换成on-hot向量。注意第一个字符的转换过程。

计算隐藏状态层。

计算输出层,然后将计算结果传入softmax层,获得的结果就是概率。

把时间步(t)的目标字符作为时间步(t+1)的输入字符。

返回步骤a,重复该过程,直到结束名字中的所有字母。

模型的目标是使概率分布层中的绿色数值尽可能大,红色数值尽可能小。原因在于概率趋近于1时,真正的索引具备最高的概率。我们可以使用交叉熵来评估损失,然后计算损失函数关于所有参数损失的梯度,并根据与梯度相反的方向更新参数。不断重复该过程并迭代地调整参数,这样模型就能够使用训练集中的所有名字,根据之前的字符预测后一个字符。注意:隐藏状态h^4具备所有之前字符的信息。

图2:使用RNN的字符级语言模型图示。

注意:为简洁起见,我删除了所有Python函数的文档注释,也没有包含一些无益于理解主要概念的函数。

notbook和script



转载请注明地址:http://www.nasaoa.com/nsjp/9656.html