Word2Vec
word2vec将词转变为词向量。从而进行词之间的相似性度量。# etc/bin/python# -*- encoding: utf-8 -*-from time import timefrom gensim.models import Word2Vecclass LoadCorpora(object):def __init__(self, s):sel...
·
word2vec将词转变为词向量。从而进行词之间的相似性度量。
# etc/bin/python
# -*- encoding: utf-8 -*-
from time import time
from gensim.models import Word2Vec
class LoadCorpora(object):
def __init__(self, s):
self.path = s
def __iter__(self):
f = open(self.path, 'r', encoding='utf-8')
for line in f: # 一行数据是一个新闻
yield line.split(' ')
# 一个打印函数
def print_list(a):
for i, s in enumerate(a):
if i != 0:
print('+', )
print(s, )
if __name__ == '__main__':
sentences = LoadCorpora('news.dat')
t_start = time()
# 从预料中找到200个词,进行模型构建
model = Word2Vec(sentences, size=200, min_count=5, workers=8) # 词向量维度为200,丢弃出现次数少于5次的词
model.save('news.model') # 保存模型,以便日后使用
print('OK:', time() - t_start)
model = Word2Vec.load('news.model')
print('词典中词的个数:', len(model.wv.vocab))
# 打印模型中的词
for i, word in enumerate(model.wv.vocab):
print(word, end=' ')
# 计算模型中与橙子相似的词
print('丝绸对应词向量及长度', len(model.wv['丝绸']), model.wv['丝绸'])
result = model.wv.most_similar('丝绸')
print('与丝绸最相近的词:')
for w, s in result:
print('\t', w, s)
# 求任意两个词之间的相似度
print('%s 和 %s 的相似度为:%.6f' % ('丝绸', '橘子', model.wv.similarity('丝绸', '橘子')))
result = model.wv.most_similar(positive=['中国', '城市'], negative=['学生'])
print('中国+城市-学生:')
for word, similar in result:
print('\t', word, similar)
print('========================')
words_list = ('苹果 三星 美的 海尔', '中国 日本 韩国 美国 北京',
'医院 手术 护士 医生 感染 福利', '爸爸 妈妈 舅舅 爷爷 叔叔 阿姨 老婆')
for words in words_list:
print(words, '离群词:', model.wv.doesnt_match(words.split(' ')))
tf-idf将文本映射到词库里的词频向量,从而进行文本分类(见Bayes)
更多推荐
已为社区贡献4条内容
所有评论(0)