美文网首页大数据python coding互联网科技
windows下使用word2vec训练维基百科中文语料全攻略!

windows下使用word2vec训练维基百科中文语料全攻略!

作者: 文哥的学习日记 | 来源:发表于2017-06-14 20:00 被阅读1202次

    训练一个聊天机器人的很重要的一步是词向量训练,无论是生成式聊天机器人还是检索式聊天机器人,都需要将文字转化为词向量,时下最火的词向量训练模型是word2vec,所以,今天小编文文带你使用维基百科训练词向量。

    1、训练数据下载

    我们使用维基百科训练词向量,维基百科数据的下载地址为:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2
    下载后无需解压,中文维基百科的数据比较小,整个xml的压缩文件大约才1G

    2、安装依赖库

    下载数据之后,网上提供了现成的程序对xml进行解压,在网上找到了一个解析xml的py文件,命名为process_wiki.py。不过还需要对其进行修改,
    将原有的output = open(outp, 'w'),修改为output = open(outp, 'w',encoding='utf-8')
    否则会报下图的错误:

    错误提示
    在放完整的代码之前,我们需要安装一些依赖库,有numpy、scipy以及gensim,安装gensim依赖于scipy,安装scipy依赖于numpy。我们直接用pip安装numpy,在windows命令行下使用命令:
    pip install numpy
    成功安装numpy之后安装scipy,仍然使用命令pip install scipy,此时却发现报错了,其实,一般都会报错,正确的打开方式是去网站下载whl,再进行安装,去如下的网址下载scipy包:
    http://www.lfd.uci.edu/~gohlke/pythonlibs/
    找到相应版本的: scipy.png
    下载好之后使用pip命令安装即可:
    pip install scipy-0.19.0-cp35-cp35m-win_amd64.whl
    接下来使用命令 pip install gensim 即可。

    3、将xml的wiki数据转换为text格式

    使用下面的代码对数据进行处理,命名为process_wiki.py,这个代码是python2和python3通用的:

    #!/usr/bin/env python
    # Author: Pan Yang (panyangnlp@gmail.com)
    # Copyrigh 2017
    
    from __future__ import print_function
    
    import logging
    import os.path
    import six
    import sys
    
    from gensim.corpora import WikiCorpus
    
    if __name__ == '__main__':
        program = os.path.basename(sys.argv[0])
        logger = logging.getLogger(program)
    
        logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
        logging.root.setLevel(level=logging.INFO)
        logger.info("running %s" % ' '.join(sys.argv))
    
        # check and process input arguments
        if len(sys.argv) != 3:
            print("Using: python process_wiki.py enwiki.xxx.xml.bz2 wiki.en.text")
            sys.exit(1)
        inp, outp = sys.argv[1:3]
        space = " "
        i = 0
    
        output = open(outp, 'w',encoding='utf-8')
        wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
        for text in wiki.get_texts():
            if six.PY3:
                output.write(b' '.join(text).decode('utf-8') + '\n')
            # ###another method###
            #    output.write(
            #            space.join(map(lambda x:x.decode("utf-8"), text)) + '\n')
            else:
                output.write(space.join(text) + "\n")
            i = i + 1
            if (i % 10000 == 0):
                logger.info("Saved " + str(i) + " articles")
    
        output.close()
        logger.info("Finished Saved " + str(i) + " articles")
    

    使用如下的命令执行代码:
    python process_wiki.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.text
    不过发现报错了:

    报错
    这是因为我们的numpy版本不对,所以我们首先要使用pip卸载掉我们当前的numpy,然后去网站:http://www.lfd.uci.edu/~gohlke/pythonlibs/下载对应的numpy版本并安装即可: numpy.png

    随后使用刚才的命令执行,发现执行成功:

    执行成功.png

    好啦,今天的实验就先做到这里,明天咱们继续!

    相关文章

      网友评论

      • 49f74a2e858e:你好,请问我的执行下来没有报错,但结果显示
        2017-07-11 16:22:08,163: INFO: running C:/Python27/Projects/process_wiki.py
        Using: python process_wiki.py enwiki.xxx.xml.bz2 wiki.en.text
        并没有将文件转换成text格式是什么原因呢
        西早覃_:我运行只有有一个错误:EOFError: Compressed file ended before the end-of-stream marker was reached,你用的IDE是什么呢

      本文标题:windows下使用word2vec训练维基百科中文语料全攻略!

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