word2vec训练中文语料

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32113189/article/details/83541947

最近在做一个问答系统,看了很多论文,主要学习作者是如何进行做问答的,大都是这个过程:
1、构建语料库;
2、训练词向量;
3、问题间和问答间的相似度对比;
4、在线搜索答案。
5、信息抽取;
6、生成答案。
网上大都是对wiki百科开源的中文语料进行训练的,很多作者都会对自己构建的语料进行向量模型计算,因此,我也需要进行训练,可供选择的两种算法一种是word2vec算法,一种是Glove算法,但是现在Glove算法还不能在windows系统上进行训练,因此,只能选择word2vec算法进行模型训练了。下面是训练自己中文语料步骤。
1、对语料进行分词、去除停用词
很明显,这两步对训练模型很重要,能提升很大的准确率,不多说,直接贴代码

def main():
       logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
       #以下是停用词,大家可以根据自己对停用词和具体的需求进行设置
      stopword_set = ['的','得','地',',','。','?',':',';','、','!','@','#','¥','%','&'
          , '*','(',')','-','=','+','[',']','{','}','1','2','3','4','5','6','7','8','9','0','~','`','$'
          , '<','>','/','是']
      #output接收处理好的文件
      output = open('../resource/wiki_text.txt','w',encoding='utf-8')
      #打开语料文本
      with open('C:/Users\Administrator\Desktop/wikizh.txt','r',encoding='utf-8') as f:
          for texts_num,line in enumerate(f):
              line = line.strip('\n')
              words = jieba.cut(line,cut_all=False)
              for word in words:
                  if word not in stopword_set:
                      output.write(word + ' ')
              output.write('\n')
              if(texts_num + 1) % 10000 == 0:
                  logging.info('已完成前%d行的分词'%(texts_num + 1))
      output.close()

2、对语料进行训练
网上有很多公开讲word2vec的使用方法的,在此,默认大家已经对算法有了基础的了解,如果实在不了解,可以联系我,我会进行讲解。代码如下:

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) < 4:
        print(globals()['__doc__'] % locals())
        sys.exit(1)
    inp, outp1, outp2 = sys.argv[1:4]

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

    # trim unneeded model memory = use(much) less RAM
    # model.init_sims(replace=True)
    model.save(outp1)
    model.wv.save_word2vec_format(outp2, binary=False)

python ***.py 训练语料路径 训练模型名称.model(以.model结尾) 训练词向量名称.vector(以.vevtor结尾)
以上的代码是使用word2vec训练自己的语料,但是如果想区得更好的效果,需要对算法进行深一步的改进,大家可以试试,如果能取得更好的效果,那么对接下来的问答效果也会产生很大的影响。

猜你喜欢

转载自blog.csdn.net/qq_32113189/article/details/83541947