博客
关于我
【NLP】之 Word2vec(将评论转为词向量)
阅读量:162 次
发布时间:2019-02-27

本文共 1723 字,大约阅读时间需要 5 分钟。

Word2vec简介

Word2vec是一种通过浅层神经网络生成词向量的模型,其核心思想是通过上下文预测单词的出现概率,从而学习词向量。Word2vec主要包含两个训练模型:CBOW(Contextual Bag of Words)和Skip-Gram(也称Skip n-gram)。

CBOW模型

CBOW模型通过上下文预测当前词语的出现概率,其输入数据是特定词语的上下文词向量,输出是该词语的词向量。CBOW模型的训练过程可以看作是一种多分类任务,其中分类标签是语料库中的所有词汇。CBOW模型的特点是上下文距离可自定义,且上下文词语的权重相等。

Skip-Gram模型

Skip-Gram模型与CBOW相反,其输入是特定词语的词向量,输出是该词语的上下文词向量。Skip-Gram模型的训练目标是最小化输入词向量与目标词向量之间的余弦相似度误差,并通过Softmax归一化得到概率分布。

Word2vec的核心模型结构包括输入层、隐藏层和输出层,隐藏层的激活函数通常是双曲函数。

Word2vec训练

Word2vec需要使用训练语料库来学习词向量。本文使用维基百科中文语料库(1.61GB,337336篇文章)进行训练。

数据处理

  • 数据抽取:使用gensim的WikiCorpus处理原始语料包,提取文章内容。
  • 数据预处理
    • 将繁体字转换为简体字(可使用OpenCC工具)。
    • 进行结巴分词及去停用词处理。
  • 模型训练:设置词向量维度为200维,上下文窗口大小为5,最小词频为5。核心训练代码如下:
  • import loggingimport os.pathimport sysfrom gensim.corpora import WikiCorpusfrom gensim.models import Word2Vec程序名 = os.path.basename(sys.argv[0])logger = logging.getLogger(程序名)logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')logger.info("运行 %s" % ' '.join(sys.argv))if len(sys.argv) < 4:    print(globals()['__doc__'] % locals())    sys.exit(1)输入文件路径, 输出模型路径, 输出词向量路径 = sys.argv[1:4]模型 = Word2Vec(    LineSentence(输入文件路径),    size=200,    window=5,    min_count=5,    workers=2)模型保存路径 = 输出模型路径模型.wv.save_word2vec_format(输出词向量路径, binary=False)

    运行训练命令:

    python word2vec_model.py 输入文件路径 输出模型路径 输出词向量路径

    用Word2vec将评论转为词向量

    在Word2vec训练完成后,利用预训练模型将评论转为词向量。具体操作如下:

  • 将评论中的每个词转化为词向量。
  • 计算评论向量为所有词向量的平均值或加权求和。
  • 核心代码如下:

    from gensim.models import Word2Vecimport codecsimport numpy as np加载预训练模型:w2v_model = Word2Vec.load('wiki.zh.1.6gr.model')处理评论:vec = np.zeros([1, 200])count = 0for word in words:    if word:        try:            vec += w2v_model[word]            count += 1        except KeyError:            continuevec /= count

    词向量结果

    通过上述方法,可以将评论转化为向量形式,便于后续分析和应用。

    转载地址:http://djkd.baihongyu.com/

    你可能感兴趣的文章
    POJ1417 True Liars —— 并查集 + DP
    查看>>
    Poj1459 Power Network 预流推进
    查看>>
    POJ1502(MPI Maelstrom)
    查看>>
    poj1568 Find the Winning Move[极大极小搜索+alpha-beta剪枝]
    查看>>
    poj1730 - Perfect Pth Powers(完全平方数)(水题)
    查看>>
    poj1753——Flip Game
    查看>>
    poj1936 假期计划第一水
    查看>>