《实战Google深度学习框架》之RNN学习笔记2 LSTM对PTB数据集的建模

该博客介绍了如何使用Google深度学习框架TensorFlow构建LSTM语言模型,特别是针对PTB数据集的建模。文章讨论了语言模型的目的、复杂度(perplexity)作为评估指标,并展示了数据预处理及模型训练的过程,强调了在处理中需要注意的多线程问题。
摘要由CSDN通过智能技术生成

  建立语言模型的目的是为了计算一个句子出现的概率,利用语言模型,可以确定哪个单词序列出现的可能性更大,或者给定若干个单词,预测下一个最可能出现的词语。语言模型的常用评价指标是复杂度,刻画的是通过某一个语言模型估计的一句话出现的概率。例如当已经知道(w1,w2,w3,…,w(m)这句话出现在语料库之中,那么通过语言模型得到这句话的概率越高越好,也就是复杂度越小越好。复杂度perplexity表示的概念是平均分支系数,即模型预测下一个词时的平均可选择数量。计算perplexity值的公式如下:
在这里插入图片描述
相比乘积开根号的方式,另一种计算方式使用加法的形式加速计算,也能有效避免概率为0时导致整个计算结果为0的问题:
在这里插入图片描述
  PTB文本数据集是语言模型学习中目前最广泛使用的数据集,TensorFlow提供了两个函数来帮助实现数据的预处理,将原始数据中的单词转化为单词ID:
ptb_raw_data(DATA_PATH):读取原始数据
ptb_producer(raw_data,batch_size,num_steps):用于将数据组织成大小为 batch_size,长度为 num_steps 的数据组
以下是这两个函数的示例:

#读取数据并转化为单词ID
import tensorflow as tf
from tensorflow.models.tutorials.rnn.ptb import reader

#数据存放路径
DATA_PATH = r"F:\学校事务\论文资料\tensorflow\PTB数据集\simple-examples\data"
#读取原始数据
train_data, valid_data, test_data, _ = reader.ptb_raw_data(DATA_PATH)

print(len(train_data))
print(train_data[:100])  

#将训练数据组织成batch大小为4,截断为5的数据组。要放在开启多线程之前.
batch = reader.ptb_producer(train_data, 4, 5)


with tf.Session() as sess:
    tf.global_variables_initializer().run()
    
    #开启多线程
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)
    
    # 读取前两个batch,其中包括每个时刻的输入和对应的答案,ptb_producer()会自动迭代
    for i in range(2):
        x,y = sess.run(batch)
        print('X:',x)
        print('Y:',y)
    # 关闭多线程
    coord.request_stop()
    coord.join(threads)

输出:
在这里插入图片描述
在这里插入图片描述
因为ptb_producer() 函数中使用了 tf.train.range_input_producer() 函数,所以需要开启多线程。
  以下是完整的TensorFlow样例程序,通过循环神经网络实现语言模型:

import numpy as np

import tensorflow as tf
from tensorflow.mod
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值