牛骨文教育服务平台(让学习变的简单)
博文笔记

windows下用Anaconda3做基于维基百科中文word2vec训练

创建时间:2017-07-11 投稿人: 浏览次数:1446

1.下载维基百科中文语料

http://www.52nlp.cn/中英文维基百科语料上的Word2Vec实验中下载中文维基百科数据,也可从中文数据的下载地址是:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2。

2.xml的wiki数据转换为text格式

参考http://www.mamicode.com/info-detail-1699780.html这篇博客

import logging
import os.path
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 (globals()["__doc__"] % locals())
        sys.exit(1)
    inp, outp = sys.argv[1:3]
    space = b""
    i = 0
    output = open(outp, "w",encoding="utf-8")
    wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
    for text in wiki.get_texts():
        s=space.join(text)
        s=s.decode("utf8") + "
"
        output.write(s)
        i = i + 1
        if (i % 10000 == 0):
            logger.info("Saved " + str(i) + " articles")
    output.close()
    logger.info("Finished Saved " + str(i) + " articles")
然后打开cmd,输入python G:维基百科语料process_wiki.py G:维基百科语料zhwiki-latest-pages-articles.xml.bz2 G:维基百科语料wiki.zh.text
(因为我是直接打开cmd,没有在维基百科语料中打开,因此需要标清楚每个文件的路径,不然就会提示错误:No such file or directory)

3.进行繁化简

首先先安装opencc 安装exe的版本 到https://bintray.com/package/files/byvoid/opencc/OpenCC 中下载

opencc-1.0.1-win64.7z
解压到自定义目录下,我给解压在了C盘下 C:Usersxiaolinopencc-1.0.1-win64

参考一下博客上面写在wiki.zh.text所在文件下打开命令窗口运行该命令C:Usersxiaolinopencc-1.0.1-win64opencc.exe -i wiki.zh.text -o Wiki.zh.text.jian -c  zht2hs.iniz

出现发现opencc-1.0.1-win64中没有这个文件,

然后阅读了http://blog.sina.com.cn/s/blog_703521020102zb5v.html这篇博客知道 t2s.json Traditional Chinese to Simplified Chinese 繁體到簡體

所以更改命令为C:Usersxiaolinopencc-1.0.1-win64opencc.exe -i wiki.zh.text -o wiki.zh.text.jian -c C:Usersxiaolinopencc-1.0.1-win64 2s.json

-i表示输入文件,-o表示输出文件,t2s.json表示繁体转换为简体

这样就实现了化繁为简


4.进行分词

用python自带的结巴分词进行分词

import jieba
import jieba.analyse
import jieba.posseg as pseg
import codecs,sys
def cut_words(sentence):
    #print sentence
    return " ".join(jieba.cut(sentence)).encode("utf-8")
f=codecs.open("wiki.zh.text.jian","r",encoding="utf-8")
target = codecs.open("wiki.zh.jian.fenci.txt", "w",encoding="utf-8")
print ("open files")
line_num=1
line = f.readline()
while line:
    print("---- processing ", line_num, " article----------------")
    line_seg = " ".join(jieba.cut(line))
    target.writelines(line_seg)
    line_num = line_num + 1
    line = f.readline()
f.close()
target.close()
exit()
while line:
    curr = []
    for oneline in line:
        #print(oneline)
        curr.append(oneline)
    after_cut = map(cut_words, curr)
    target.writelines(after_cut)
    print ("saved",line_num,"articles")
    exit()
    line = f.readline1()
f.close()
target.close()
5.训练Word2vec模型

参考https://magicly.me/word2vec-first-try-md/这篇博客

用52nlp的训练模型可能是内存不足,还是其他问题,总是出现slowly version gensim.doc2vec is being used,但是一直没有结果运行出来,参考这个博客,试了一下这个代码,在spyder3里跑了一下,结果跑通了。

import multiprocessing

from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence

inp = "G:\维基百科语料\wiki.zh.jian.fenci.txt"
outp1 = "G:\维基百科语料\wiki-zh-model"
outp2 = "G:\维基百科语料\wiki-zh-vector"

model = Word2Vec(LineSentence(inp), size = 400, window = 5, min_count = 5, workers = multiprocessing.cpu_count())

model.save(outp1) ## 以二进制格式存储
model.save_word2vec_format(outp2, binary = False) ## 以文本格式存储, 一行是一个词的vector
运行结果如下:

运行完之后会得到三个文件:wiki-zh-model、wiki-zh-model.syn1neg.npy、wiki-zh-model.wv.syn0.npy


5.进行word2vec模型测试

from gensim.models import Word2Vec

model = Word2Vec.load("G:\维基百科语料\wiki-zh-model")
# model = Word2Vec.load_word2vec_format("./wiki-zh-vector", binary = False) # 如果之前用文本保存话, 用这个方法加载
res = model.most_similar("游泳")
print(res)
测试结果:


任务完成!!!

不过还需要改进的是可以在分词前把文档进行一些处理:去掉英文、去掉停用词、去掉标点符号等等

可以参考:http://www.cnblogs.com/little-horse/p/6701911.html


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。