您的位置:首页 > 理论基础 > 计算机网络

基于回归神经网络的中文语句模型实践(Python+Tensorflow+阿里云)

2016-05-29 10:11 841 查看
回归神经网络(Recurrent neural network)在机器学习领域取得了非凡的成就。因其模型特征尤其适合于具有序列特性的数据,所以在自然语言建模,机器翻译,语音识别等领域表现尤其不俗。

语言建模就是要估计句子的分布概率P(S)(S = (W1,W2,W3…)),这里W表示词,一般用一个N维向量表示。机器翻译就是从一个序列到另一个序列的转换如 How old are you? –〉(中间表示)–〉为什么老是你(这翻译不错吧?)。

既然词可以表示成向量,那么句子是不是也可以呢?如果将上面机器翻译的英文变成中文,那中间形式不就可以认为是句子的意思吗?下面就是基于这一思想的模型实践:

1 以字符而不是词为最小单元(这样就不要进行分词拉),用N维向量表示
2 编码器使用LSTM(当然有其他选择)
3 解码器也使用LSTM,初始状态是编码器的最后状态
4 使用ADAM算法进行训练
5 使用dropout进行规范
6 使用python和tensorflow实现


程序实现时为了提高计算效率,会将句子进行并行处理,即一次输入多个句子,这时由于每个句子长度不一,需要在句子后面补足填充字符。

我用的中文语料库共4500个字符(包含英文数字,标点符号等),训练句子:158208 验证句子19776,平均长度45

程序的开发是在我本机的虚拟机上进行的,开始想在本机运行,但是发现tensorflow非常耗内存。设置如下:

编码解码:两层RNN,每层50个单元

字向量维数:50

batch size: 256

bucket: [20,20], [40,40],[60,60],[80,80],[100,100](就是将不同长度的句子分批次,如长度小于20,就在第一个bucket)

这个配置下tensorflow就要6G左右的内存,因为我的语料库中很多句子长度超过25,于是决定用阿里云ecs。配置如下:

CPU: Intel Haswell CPU 双核
内存:DDR4 8G
存储:高级云盘40G


一个训练周期需要2800秒。这里是代码:https://github.com/amxineohp/rewriter
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息