python 环境下gensim中的word2vec的使用笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/philosophyatmath/article/details/52354413

centos 7, python2.7, gensim (0.13.1)

语料:

http://211.136.8.18/files/10940000015A9F94/mattmahoney.net/dc/text8.zip

程序:

# -*- coding: utf-8 -*-
'''
Created on 2016年8月29日
测试gensim使用
@author: root
'''

from gensim.models import word2vec
import logging
import numpy as np
# 主程序
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
sentences = word2vec.Text8Corpus(u"/media/sf_workspace/nlp-workspace/nltk-test/word2vec/data/text8")  # 加载语料
n_dim=200
model = word2vec.Word2Vec(sentences, size=n_dim)  # 训练skip-gram模型; 默认window=5
# n_dim = 300
# #Initialize model and build vocab
# imdb_w2v = Word2Vec(size=n_dim, min_count=1)
# imdb_w2v.build_vocab(sentences)

# #Train the model over train_reviews (this may take several minutes)
# imdb_w2v.train(sentences)
# obtain the word vectors as follows:
text=["hi","no"]
vec = np.zeros(n_dim).reshape((1, n_dim))
print type(vec)
count = 0.
for word in text:
    try:
        vec += model[word].reshape((1, n_dim))
        print vec
        count += 1.
    except KeyError:
        continue
if count != 0:
    vec /= count
print count
print vec


# 计算两个词的相似度/相关程度
y1 = model.similarity("woman", "man")
print u"woman和man的相似度为:", y1
print "--------\n"

# 计算某个词的相关词列表
y2 = model.most_similar("good", topn=20)  # 20个最相关的
print u"和good最相关的词有:\n"
for item in y2:
    print item[0], item[1]
print "--------\n"

# 寻找对应关系
print ' "boy" is to "father" as "girl" is to ...? \n'
y3 = model.most_similar(['girl', 'father'], ['boy'], topn=3)
for item in y3:
    print item[0], item[1]
print "--------\n"

more_examples = ["he his she", "big bigger bad", "going went being"]
for example in more_examples:
    a, b, x = example.split()
    predicted = model.most_similar([x, b], [a])[0][0]
    print "'%s' is to '%s' as '%s' is to '%s'" % (a, b, x, predicted)
print "--------\n"

# 寻找不合群的词
y4 = model.doesnt_match("breakfast cereal dinner lunch".split())
print u"不合群的词:", y4
print "--------\n"

# 保存模型,以便重用
model.save("text8.model")
# 对应的加载方式
# model_2 = word2vec.Word2Vec.load("text8.model")

# 以一种C语言可以解析的形式存储词向量
model.save_word2vec_format("text8.model.bin", binary=True)
# 对应的加载方式
# model_3 = word2vec.Word2Vec.load_word2vec_format("text8.model.bin", binary=True)

if __name__ == "__main__":
    pass

中文

语料格式示例:

一一
一一列举
一一对应 一丁点 一丁点儿 一万年
一丈红
一下
一下子
一不做
一不小心
一专多能
一世
一丘之貉
一业
一丛
一丝一毫
一丝不挂
一丝不苟
一个
一个劲
一个样
一中
一中一台
一中全会
一举
一举一动
一举两得
一举多得

# -*- coding: utf-8 -*-
'''
Created on 2016年8月29日
测试gensim使用,处理中文语料
@author: root
'''

from gensim.models import word2vec
import logging
import sys
reload(sys) #重新载入sys
sys.setdefaultencoding("utf8") #设置默认编码格式
# 主程序
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
sentences = word2vec.Text8Corpus(u"/media/sf_workspace/nlp-workspace/nltk-test/word2vec/data/test1.txt")  # 加载语料
model = word2vec.Word2Vec(sentences,min_count=1, size=200)  # 训练skip-gram模型

# 计算两个词的相似度/相关程度
y1 = model.similarity(u"淮南子", u"淮南子")
print  y1
print "--------\n"

# 计算某个词的相关词列表
y2 = model.most_similar(u"淮南子", topn=20)  # 20个最相关的
for item in y2:
    print item[0], item[1]
print "--------\n"

# 寻找对应关系
print u"书-不错,质量-"
y3 = model.most_similar([u'质量', u'不错'], [u'书'], topn=3)
for item in y3:
    print item[0], item[1]
print "--------\n"

# 寻找不合群的词
y4 = model.doesnt_match(u"书 书籍 教材 很".split())
print u"不合群的词:", y4
print "--------\n"

# 保存模型,以便重用
model.save(u"书评.model")
# 对应的加载方式
# model_2 = word2vec.Word2Vec.load("text8.model")

# 以一种C语言可以解析的形式存储词向量
model.save_word2vec_format(u"书评.model.bin", binary=True)
# 对应的加载方式
# model_3 = word2vec.Word2Vec.load_word2vec_format("text8.model.bin", binary=True)

# if __name__ == "__main__":
#     pass

参考:

https://districtdatalabs.silvrback.com/modern-methods-for-sentiment-analysis

猜你喜欢

转载自blog.csdn.net/philosophyatmath/article/details/52354413
今日推荐