zoukankan      html  css  js  c++  java
  • Windows下基于python3使用word2vec训练中文维基百科语料(二)

    在上一篇对中文维基百科语料处理将其转换成.txt的文本文档的基础上,我们要将为文本转换成向量,首先都要对文本进行预处理

    步骤四:由于得到的中文维基百科中有许多繁体字,所以我们现在就是将繁体字转换成简体字

    opencc工具进行繁简转换,首先去下载opencc:https://bintray.com/package/files/byvoid/opencc/OpenCC
    下载完成之后解压即可,随后使用命令:
    opencc -i wiki.zh.text -o wiki.zh.jian.text -c t2s.json进行转换
    将之前获得的wiki.zh.text和解压后的opencc放在一个文件夹中,然后用上述命令执行,将转换后的简体中文保存在 wiki.zh.jian.text
     
    步骤五:得到简体中文文档后,对中文首先进行分词,分词采用jieba,代码如下:
     1 #文章分词
     2 import jieba
     3 import jieba.analyse
     4 import codecs
     5 def cut_words(sentence):
     6    #print sentence
     7     return " ".join(jieba.cut(sentence)).encode('utf-8')
     8 f=codecs.open('wiki.zh.jian.text','r',encoding="utf8")
     9 target = codecs.open("wiki.zh.jian.seg.txt", 'w',encoding="utf8")
    10 print ('open files')
    11 line_num=1
    12 line = f.readline()
    13 while line:
    14     print('---- processing', line_num, 'article----------------')
    15     line_seg = " ".join(jieba.cut(line))
    16     target.writelines(line_seg)
    17     line_num = line_num + 1
    18     line = f.readline()
    19 f.close()
    20 target.close()
    21 exit()
    22 while line:
    23     curr = []
    24     for oneline in line:
    25         #print(oneline)
    26         curr.append(oneline)
    27     after_cut = map(cut_words, curr)
    28     target.writelines(after_cut)
    29     print ('saved',line_num,'articles')
    30     exit()
    31     line = f.readline1()
    32 f.close()
    33 target.close()

    如图:分词完毕

    步骤六:分词结束,就可以训练词向量

    参数说明:

    class gensim.models.word2vec.Word2Vec(sentences=None,size=100,alpha=0.025,window=5, min_count=5, max_vocab_size=None, sample=0.001,seed=1, workers=3,min_alpha=0.0001, sg=0, hs=0, negative=5, cbow_mean=1, hashfxn=<built-in function hash>,iter=5,null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000)  
    参数含义如下(转自http://blog.csdn.net/szlcw1/article/details/52751314):
    · sentences:可以是一个·ist,对于大语料集,建议使用BrownCorpus,Text8Corpus或·ineSentence构建。
    · sg: 用于设置训练算法,默认为0,对应CBOW算法;sg=1则采用skip-gram算法。
    · size:是指特征向量的维度,默认为100。大的size需要更多的训练数据,但是效果会更好. 推荐值为几十到几百。
    · window:表示当前词与预测词在一个句子中的最大距离是多少
    · alpha: 是学习速率
    · seed:用于随机数发生器。与初始化词向量有关。
    · min_count: 可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉, 默认值为5
    · max_vocab_size: 设置词向量构建期间的RAM限制。如果所有独立单词个数超过这个,则就消除掉其中最不频繁的一个。每一千万个单词需要大约1GB的RAM。设置成None则没有限制。
    · sample: 高频词汇的随机降采样的配置阈值,默认为1e-3,范围是(0,1e-5)
    · workers参数控制训练的并行数。
    · hs: 如果为1则会采用hierarchica·softmax技巧。如果设置为0(defau·t),则negative sampling会被使用。
    · negative: 如果>0,则会采用negativesamp·ing,用于设置多少个noise words
    · cbow_mean: 如果为0,则采用上下文词向量的和,如果为1(defau·t)则采用均值。只有使用CBOW的时候才起作用。
    · hashfxn: hash函数来初始化权重。默认使用python的hash函数
    · iter: 迭代次数,默认为5
    · trim_rule: 用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)或者一个接受()并返回RU·E_DISCARD,uti·s.RU·E_KEEP或者uti·s.RU·E_DEFAU·T的函数。
    · sorted_vocab: 如果为1(defau·t),则在分配word index 的时候会先对单词基于频率降序排序。
    · batch_words:每一批的传递给线程的单词的数量,默认为10000
     
    具体代码如下:
     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 import logging
     4 import os
     5 import sys
     6 import multiprocessing
     7 wiki.zh.text.model wiki.zh.text.vector
     8 from gensim.models import Word2Vec
     9 from gensim.models.word2vec import LineSentence
    10 
    11 if __name__ == '__main__':
    12     program = os.path.basename(sys.argv[0])
    13     logger = logging.getLogger(program)
    14 
    15     logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
    16     logging.root.setLevel(level=logging.INFO)
    17     logger.info("running %s" % ' '.join(sys.argv))
    18 
    19     # check and process input arguments
    20     if len(sys.argv) < 4:
    21         print(globals()['__doc__'] % locals())
    22         sys.exit(1)
    23     inp, outp1, outp2 = sys.argv[1:4]
    24 
    25     model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5,
    26                      workers=multiprocessing.cpu_count(),iter=100)#向量维度是400维,迭代100次
    27 
    28     # trim unneeded model memory = use(much) less RAM
    29     # model.init_sims(replace=True)
    30     model.save(outp1)
    31     model.wv.save_word2vec_format(outp2, binary=False)

    使用命令开始训练
    python train_word2vec_model.py wiki.zh.jian.seg.txt wiki.zh.text.model wiki.zh.text.vector

    训练过程如下图:

    迭代到100轮:

    保存结果如图,表示结束:

    这时候就表示训练好了,现在就可以开始使用啦!!!

     
     
     


  • 相关阅读:
    Java
    HashMap数据结构与实现原理解析(干货)
    Java
    Java
    Java
    面向对象基础
    Java
    Java
    Java
    shell脚本
  • 原文地址:https://www.cnblogs.com/gaofighting/p/9105614.html
Copyright © 2011-2022 走看看