美文网首页深度学习深度学习项目实践集Deep Learning
RNN起名器(一)——思路和数据获取

RNN起名器(一)——思路和数据获取

作者: Cer_ml | 来源:发表于2017-02-01 13:07 被阅读340次
    这篇博客介绍了一个RNN起名器的基本思路和数据获取。
    

    1. 起因

    学习完一些RNN的基础知识,看过一些学术论文以后,像通过一个小项目来练练手。一来加强对模型本身的理解;二来可以提高编码能力和对框架的熟悉程度。

    受到char-rnn的启发,同时考虑到歌词生成和诗歌生成没有什么新意,于是决定写一个名字生成器。

    2.思路

    取名字在中国一直是一个稳定的需求,但是国内起名字,一般需要综合生辰八字,甚至还要居住地址,因为这样取出来的名字是独一无二的。让我们先简化需求,第一步,我们要达成的目标就是根据一个姓和指定的名字长度,输出一些名字。

    这个需求和生成诗词没有本质的区别,最大的不同就是训练数据。

    起初我的想法是找一些现有的人口普查数据,使用现有的人名信息作为训练数据;但是转念一想,这些现有的人名不一定是好名字。于是,我又上一些姓名网站找到了一些不错的姓名推荐。当然,我没有把这些姓名一个个check过,暂且认为这些推荐都是不错的名字吧。

    3.数据获取

    确定了目标数据源以后,就可以开启爬虫了。具体爬的是哪个网站我就不说了,直接给出爬虫的代码。爬虫的代码也不再解析了,代码上的注释写的很清楚,也不是重点。

    4.字向量的训练

    这个项目中用到的字向量,不是随机生成的;而是使用预训练的字向量,具体使用python第三方库:gensim。

    下面简单总结下训练过程,参考这篇博客

    (一).下载训练语料

    使用中文wiki语料库(1.2G)作为训练语料。

    (二).安装gensim

    使用pip安装即可:

    pip install gensim
    

    (三).预处理训练语料

    python 1_process_wiki.py zhwiki-latest-pages-articles.xml.bz2 wiki.cn.text
    

    1_process_wiki.py这个脚本目的是将训练语料的文本从xml文件中抽取出来。

    生成的wiki.cn.text:

    可以看到生成的语料都是繁体字,还包括一些英文。

    (四).繁体转简体

    使用一种叫opencc的工具:OpenCC(github地址),直接下载源码,然后:

    make
    sudo make install
    

    编译安装完毕以后:

    opencc -i wiki.cn.text -o wiki.cn.text.jian -c t2s.json
    

    生成的wiki.cn.text.jian:

    (五).删除其他字符

    繁体转成简体后,要删除除了汉字字符外的其他字符。

    汉字字符unicode范围:\u4e00-\u9fa5

    可以通过下面的正则匹配:

    ss = re.findall(ur'[\n\s\r\u4e00-\u9fa5]', line)
    

    执行脚本2_remove_words.py

    python 2_remove_words.py wiki.cn.text.jian wiki.cn.text.jian.removed
    

    生成的wiki.cn.text.jian.removed:

    (六).分割训练语料

    既然是训练字向量,那么必须把每个字符分割开。

    执行脚本3_seperate_char.py:

    python 3_separate_words.py wiki.cn.text.jian.removed wiki.cn.text.jian.removed.sep
    

    生成的wiki.cn.text.jian.removed.sep:

    (七).训练字向量

    执行脚本4_train_word2vec_model.py:

    python 4_train_word2vec_model.py wiki.cn.text.jian.removed.sep wiki.cn.text.jian.model wiki.cn.text.jian.vector
    
    • wiki.cn.text.jian.model:gensim可以直接加载的文件。

    • wiki.cn.text.jian.vector:其他程序也可以读取的以文本保存的向量文件。

    生成的wiki.cn.text.jian.vector:

    在gensim中测试:

    注:myio.pretty()是我自己写的函数,只为print出list中的汉字。

    相关文章

      网友评论

        本文标题:RNN起名器(一)——思路和数据获取

        本文链接:https://www.haomeiwen.com/subject/upflittx.html