欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Word2Vec原理与实现

程序员文章站 2022-06-15 14:39:38
...
Word2Vec,为一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在Word2Vec中词袋模型假设下,词的顺序是不重要的。
训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系。该向量为神经网络之隐藏层[1]

Word2Vec依赖skip-grams或连续词袋(CBOW)来建立神经词嵌入。

word2vec原理(一)CBOW与Skip-Gram模型基础

word2vec原理(二) 基于Hierarchical Softmax的模型

word2vec原理(三) 基于Negative Sampling的模型

将两种词训练模型——CBOW模型和Skip-gram模型进行简单的总结:

CBOW根据中心词W(t)上下文词汇来预测中心词汇,而Skip-Gram模型则根据中心词W(t)来预测周围词。

CBOW模型步骤:

1,上下文单词的one-hot作为输入;

2,所有onehot分别乘以输入权重矩阵W;

3,所得向量相加求平均,作为隐层向量;

4,乘以输出权重矩阵W';

5,得到的向量**函数处理得到目标概率分布;

6,与目标单词的onehot做比较,误差越小越好。

Word2Vec原理与实现

Word2Vec原理与实现

这里列出试过的几种实现方式,一种是利用结巴分词另一种是使用TensorFlow实现GitHub源码,再就是利用gensim库。

后续把自己用的代码贴出来...

—————————手动分割——————————

来啦~

比起TensorFlow中搭建的...应用gensim Word2Vec不能更简单

#!/usr/bin/env python
# -*- coding: utf-8  -*-
# 使用gensim word2vec训练脚本获取词向量

import warnings
warnings.filterwarnings(action='ignore', category=UserWarning, module='gensim')  # 忽略警告
import logging
import os.path
import sys
import multiprocessing
from gensim.corpora import WikiCorpus
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence


if __name__ == '__main__':

    # print(open('/Users/sy/Desktop/pyRoot/wiki_zh_vec/cmd.txt').readlines())
    # sys.exit()
    
    program = os.path.basename(sys.argv[0])
    logger = logging.getLogger(program)

    logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s', level=logging.INFO)
    logger.info("running %s" % ' '.join(sys.argv))

    # inp为输入语料, outp1 为输出模型, outp2为原始c版本word2vec的vector格式的模型
    fdir = 'D:/file_download/BaiduNetdiskDownload/PyCharm_File/wiki_zh_word2vec-master/'
    inp = fdir + 'wiki.zh.simp.seg.txt'
    outp1 = fdir + 'wiki.zh.text.model'
    outp2 = fdir + 'wiki.zh.text.vector'

    # 训练skip-gram模型
    model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5,
                     workers=multiprocessing.cpu_count())

    # 保存模型
    model.save(outp1)
    model.wv.save_word2vec_format(outp2, binary=False)

附带gensim函数库的Word2Vec的参数说明

class gensim.models.word2vec.Word2Vec(sentences=None,size=100,alpha=0.025,window=5min_count=5max_vocab_size=Nonesample=0.001,seed=1workers=3,min_alpha=0.0001sg=0hs=0negative=5cbow_mean=1hashfxn=<built-in function hash>,iter=5,null_word=0trim_rule=Nonesorted_vocab=1batch_words=10000)

参数:

·  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

相关标签: 文本向量化