十五、中文词向量训练二

中文词向量训练二

1. Gensim工具训练中文词向量

1.1 中文词向量过程

  • 源程序:train_word2vec_model.py

  • 执行方法:在命令行终端执行下列代码.

    python train_word2vec_model.py wiki.zh.text.seg wiki.zh.text.model wiki.zh.text.vector
    
  • wiki.zh.text.seg为输入文件,wiki.zh.text.modelwiki.zh.text.vector为输出文件,model存储了训练的词向量模型,vector存储了训练的权重。

Word2vec训练词向量的参数

  • LineSentence(inp):按行读取; 单词已经过预处理并被空格分隔。
  • size:是每个词的向量维度;
  • window:是词向量训练时的上下文扫描窗口大小,窗口为5就是考虑前5个词和后5个词;
  • min-count:设置最低频数,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃
  • workers:是训练的线程数,默认是当前运行机器的处理器核数。

在这里插入图片描述

2. 中文词向量测试

2.1 加载训练的词向量

  • 加载过程:model = gensim.models.Word2Vec.load("wiki.zh.text.model")

  • 查看单词的向量:

    for word in model.wv.index2word:
    	print(word, model[word])
    
  • 输出结果:

在这里插入图片描述

2.2 寻找相近的词语

  • 语言学:result= model.most_similar(u”语言学”)
  • 财富:result= model.most_similar(u”财富”)
  • 输出结果:
    在这里插入图片描述

2.3 完整代码

""" 1. 训练词向量代码"""
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# train_word2vec_model.py用于训练模型

import logging
import os.path
import sys
import multiprocessing
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence

if __name__ == '__main__':
    # sys.argv[0]获取的是脚本文件的文件名称
    program = os.path.basename(sys.argv[0])
    # sys.argv[0]获取的是脚本文件的文件名称
    logger = logging.getLogger(program)
    # format: 指定输出的格式和内容,format可以输出很多有用信息,
    # %(asctime)s: 打印日志的时间
    # %(levelname)s: 打印日志级别名称
    # %(message)s: 打印日志信息
    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:得到的词向量
    inp, outp1, outp2 = sys.argv[1:4]
    """
    LineSentence(inp):格式简单:一句话=一行; 单词已经过预处理并被空格分隔。
    size:是每个词的向量维度; 
    window:是词向量训练时的上下文扫描窗口大小,窗口为5就是考虑前5个词和后5个词; 
    min-count:设置最低频率,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃; 
    workers:是训练的进程数(需要更精准的解释,请指正),默认是当前运行机器的处理器核数。这些参数先记住就可以了。
    sg ({0, 1}, optional) – 模型的训练算法: 1: skip-gram; 0: CBOW
    alpha (float, optional) – 初始学习率
    iter (int, optional) – 迭代次数,默认为5
    """
    model = Word2Vec(LineSentence(inp), size=100, window=5, min_count=5,
                     workers=multiprocessing.cpu_count())
    model.save(outp1)
    model.wv.save_word2vec_format(outp2, binary=False)

"""2. 使用词向量代码"""
# coding:utf-8

import gensim

model = gensim.models.Word2Vec.load("wiki.zh.text.model")

count = 0
for word in model.wv.index2word:
    print(word,model[word])
    count += 1
    if count==5:
        break

result = model.most_similar(u"语言学")
for e in result:
    print(e)

3 Word2vec的优缺点

3.1 Word2vec的优点

  • 由于 Word2vec 会考虑上下文,比之前的方法维度更少,所以速度更快。
  • 通用性很强,可以用在各种 NLP 任务中。
    在这里插入图片描述

Word2vec的缺点

  • 由于词和向量是一对一的关系,所以多义词的问题无法解决。
  • Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值