Coder Social home page Coder Social logo

char-rnn's Introduction

char-rnn

字符级别的RNN模型,karpathy公布了一个用python实现的100来行的char-rnn模型。模型核心是一个RNN,输入单元为一个字符,训练语料为若干篇英文文本。模型通过RNN对连续序列有很好的学习能力,对文本进行建模,学习得到字符级别上的连贯性,从而可以利用训练好的模型来进行文本生成。

======================================================== 参照karpathy公布的代码,我用theano重写了该模型,使模型能够支持中文文本,同时将源程序中的RNN模型替换成了GRU(Cho et al., 2014b)。GRU,和LSTM一样解决了基本RNN模型在长序列上的梯度消失或梯度爆炸问题(Bengio et al., 1994),然而GRU和LSTM的效果差不多却比LSTM更简单(Greff et al., 2015)。陆陆续续有研究者开始在英文上使用char-rnn,有论文证实char-rnn比以词为输入的rnn模型要好,它有一个优势就是可以解决未登录词的问题(Dhingra et al., 2016)。然而,char-rnn训练中文语料还有另外一个优势是不用对中文进行分词,模型输入单元为一个一个的字,这样可以避免分词带来的一些错误,所以采用char-rnn在中文语料上就两个好处。利用在大规模中文文本上训练好的模型,可以生成一篇短文(生成的时候也是一个字一个字的产生)。具体可以参考karpathy写的一篇blog

======================================================== ####运行说明 在命令行中输入:

python char-rnn.py [训练语料]

若机器上有GPU,可以使用GPU进行训练,速度比CPU能快很多,输入命令改为:

THEANO_FLAGS='mode=FAST_RUN,device=gpu,floatX=float32' python char-rnn.py [训练语料]

注意:训练语料为文本文件,请采用utf-8编码,可以考虑在每一个语义段落前加上起始符‘^’。

char-rnn.py文件里面有以下参数可以设定:

  • hidden_size:神经网络隐含层的维度
  • seq_length:RNN展开的步骤数(每次训练多少个字符)
  • learning_rate:学习率
  • iter:迭代次数
  • save_freq:每迭代多少次保存一次模型,同时进行一次生成
  • idx_of_begin:生成语段的起始字符
  • len_of_sample:生成语段的字符数目

======================================================== ####实验结果 本实验选取了大量和“选择”相关的作文作为训练语料,在生成的时候起始符设定为“选”字,生成字符设定为100个字符,以下是部分生成结果(训练语料规模:1.12M):

运行环境:CentOS Linux release 7.2.1511,一块显卡Tesla K40m,Theano 0.7.0。全部数据迭代一轮大致需要45分钟左右。

迭代50次:

选择了,我们的选择是一种美丽的人生,就是一个人的人生,就是一个人的人生,就是一个人的人生,就是一个人的人生,就是一个人的人生,就是一个人的人生,就是一个人的人生,就是一个人的人生,就是一个人的人生,就是

迭代100次:

选择了,我们不能选择自己的人生,就是一个人的人生,不是因为我们的选择,不是一个人的人生,就是一个人的人生,不是因为我们的选择,不是一个人的人生,就是一个人的人生,不是因为我们的选择,不是一个人的人生,就

迭代200次:

选择了,我们不能选择自己的人生,不是因为我们的选择,不要放弃,就是一个人生的价值,我们的选择是一种选择,而是一个人的人生,不是因为我们的选择,不是一个人的人生,不是因为我们的选择,不是一个人的人生,不是

从实验结果看出,模型生成每个短句(由逗号隔开的)还算通顺,但整段连起来看就不知所云了。当然,这和选用的语料以及参数设定有很大关系,但我们依旧可以看出一些问题,就是后半段生成的内容会出现重复,这表明序列太长即使是GRU仍然会有信息丢失。所以,目前在自然语言生成方面的研究大多都是在做短句的生成,例如生成诗歌或者生成歌词这些,并且不是整段一并生成的。

char-rnn's People

Contributors

hit-computer avatar

Watchers

fun_dl avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.