RNN系列教程之二在Python和The

不久前,我们已经为大家介绍了深度学习常用的十大框架和选型攻略。而在这周关于RNN的教程中,我们将以Python、Theano为例,向大家介绍RNN的实现方法。

这里再回顾一下本系列教程的四个部分:

1.循环神经网络(RNN)的基本介绍

2.在Python和Theano框架下实现RNN(本部分)

3.理解时间进化反传算法(BPTT)的算法和梯度消失问题

4.建立基于门控循环单元(GRU)或者长短时记忆(LSTM)的RNN模型

说明:本部分所涉及的相关代码,大家都可以从Github平台获取

-1-语言建模

在这个步骤,我们的目的是使用RNN网络建立和训练语言模型。语言模型的作用是,当我们给出一个由m个单词组成的句子,它可帮助预测下一个单词是什么,包括这一单词出现的概率,也就是条件概率。

举个例子,“Hewenttobuysomechocolate”这个句子生成的概率,实际上就是给定了“He”这个条件之后出现“went”的概率,乘以给定了“Hewent”这个条件之后出现“to”的概率,再乘以给定“Hewentto”这一条件后出现“buy”的概率……以此类推(嗯,有点绕,大家可以多读几遍)。

那么,我们为什么要借助概率预测句子呢?

首先,该语言模型可作为一个评分模型。例如,在机器翻译系统中输入句子,通常会得出多个候选解。在这样的情况下,就可以使用语言模型,选择可能性最大的句子作为输出。

此外,语言模型是一种生成式模型,我们还可以通过给定前面的单词,预测下一个词的概率,并重复该过程,从而生成新的文本。

需要注意的是,上述概率公式中的每个单词的概率都是由它前面所有给定的单词共同决定的。但是由于受计算或内存限制,很难长期存储大量模型。因此,许多模型通常只能关联到前面几个词。

下面具体介绍一下基于RNN进行语言建模的代码实现。

-2-数据训练和预处理

在训练语言模型之前,需要先对数据(即特定文本)进行训练。就像小孩学说话,都是通过大量的词汇练习,才慢慢形成说话习惯。

非常方便的是,这一语言模型的训练通过原始文本就可以实现,不需要对数据做任何人工标记。在这里,我们从GooglesBigQuery的一个数据集中下载了15,条Reddit的长篇评论作为文本数据。在此之前,与其它机器学习项目一样,还要先通过预处理将数据转换为正确格式。

2.1分词

如果想要预测每个词的概率,就需要先将原始文本中的每一段文字拆分成句子,再将句子拆分成单词。虽然也可以用空格隔开每段文字,但这种方式无法恰当处理标点符号。例如,“Heleft!”应分割成3个词:“He”,“left”,“!”。通过NTLK(


转载请注明:http://www.aierlanlan.com/rzfs/2591.html