gensim实现Doc2Vec和Word2Vec

本文作者:合肥工业大学 管理学院 钱洋 email:[email protected] 内容可能有不到之处,欢迎交流。

未经本人允许禁止转载。

在处理文本时,经常需要将其转化成向量的形式,然后去做分类和聚类,而word2vec和doc2vec方法是一种较为常用的方法。
在python的gensim包中实现了这两种算法,为了以后个人使用方便,这里写成博客,以供翻阅。
以下为数据集的形式:


gensim实现Doc2Vec和Word2Vec_第1张图片

每一行的每一个数字表示词的编号,这里也可以用具体的词。且数据保存在工程的/data/test.txt文本里。以下为Doc2vec的处理程序:

# -*- coding: utf-8 -*-
import sys
import logging
import os
import gensim
import re
import numpy as np
# 引入doc2vec
from gensim.models import Doc2Vec
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)

# 引入日志配置
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

# 加载数据
documents = []
# 使用第一列当做每个句子的“标签”,标签和每个句子是一一对应的
count = 0
with open('../data/test.txt','r') as f:
    for line in f:
        # 使用正则表达式切词
        words = re.split(r'[\s]',line)
        #添加到数组中
        documents.append(gensim.models.doc2vec.TaggedDocument(words, [str(count)]))
        count += 1
# 模型训练
model = Doc2Vec(documents, dm=1, size=100, window=8, min_count=5, workers=4)
# 保存模型
model.save('doc2vec.model')
# 保存向量
corpus = model.docvecs
np.savetxt("../data/d2v.corpus.txt", corpus)

运行该程序便能够成功训练模型,通过numpy的保存操作,就可以将模型得到的向量保存到文本中了,具体如下:


gensim实现Doc2Vec和Word2Vec_第2张图片

加入将上述数据的每一个词表示成指定维度向量的形式,可以使用word2vec方法,以下为测试程序:

# -*- coding: utf-8 -*-
import sys
import logging
import os
# 引入word2vec
from gensim.models import word2vec
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
# 引入日志配置
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

sentences = word2vec.LineSentence(u"../data/test.txt")  # 加载语料
model = word2vec.Word2Vec(sentences, size=100, window=20,min_count=1)  #训练skip-gram模型,默认window=5
# 计算两个词的相似度/相关程度
try:
    y1 = model.similarity(u"564", u"657")
except KeyError:
    y1 = 0
print u"【2123】和【3204】的相似度为:", y1
print"-----\n"
# 计算某个词的相关词列表
y2 = model.most_similar(u"564", topn=20)  # 20个最相关的
print u"和词【564】最相关的词有:\n"
for item in y2:
    print item[0], item[1]
print"-----\n"
# 保存模型,以便重用
model.save("wordvec.model")
# 保存向量
model.wv.save_word2vec_format('word2vec.txt', binary=False)

如下为控制台输出的结果:


gensim实现Doc2Vec和Word2Vec_第3张图片

你可能感兴趣的:(python,深度学习(Deep,Learning),数据挖掘算法,自然语言处理方法及应用,Python3开发,深度学习算法原理与代码剖析)