本文共 1723 字,大约阅读时间需要 5 分钟。
Word2vec是一种通过浅层神经网络生成词向量的模型,其核心思想是通过上下文预测单词的出现概率,从而学习词向量。Word2vec主要包含两个训练模型:CBOW(Contextual Bag of Words)和Skip-Gram(也称Skip n-gram)。
CBOW模型通过上下文预测当前词语的出现概率,其输入数据是特定词语的上下文词向量,输出是该词语的词向量。CBOW模型的训练过程可以看作是一种多分类任务,其中分类标签是语料库中的所有词汇。CBOW模型的特点是上下文距离可自定义,且上下文词语的权重相等。
Skip-Gram模型与CBOW相反,其输入是特定词语的词向量,输出是该词语的上下文词向量。Skip-Gram模型的训练目标是最小化输入词向量与目标词向量之间的余弦相似度误差,并通过Softmax归一化得到概率分布。
Word2vec的核心模型结构包括输入层、隐藏层和输出层,隐藏层的激活函数通常是双曲函数。
Word2vec需要使用训练语料库来学习词向量。本文使用维基百科中文语料库(1.61GB,337336篇文章)进行训练。
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训练完成后,利用预训练模型将评论转为词向量。具体操作如下:
核心代码如下:
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/