word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间的距离。
它将term转换成向量形式,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。
word2vec计算的是余弦值,距离范围为0-1之间,值越大代表两个词关联度越高。
————————————————
1、分词:
import jieba
jieba.suggest_freq('特定自己的词组', True)
with open('in_the_name_of_people.txt', errors='ignore', encoding='utf-8') as fp:
lines = fp.readlines()
for line in lines:
seg_list = jieba.cut(line)
with open('word.txt', 'a', encoding='utf-8') as ff:
ff.write(' '.join(seg_list)) # 词汇用空格分开
2、训练保存模型文件
from gensim.models import word2vec
# 加载语料
sentences = word2vec.Text8Corpus('word.txt')
# 训练模型
model = word2vec.Word2Vec(sentences)
#保存模型
model.save('近义词.model')
3、加载模型选近义词,词类分析等
from gensim.models import word2vec
model = word2vec.Word2Vec.load('近义词.model')
# 第一个是最常用的,找出某一个词向量最相近的词集合,代码如下:
req_count = 5
for key in model.wv.similar_by_word('我的第一个词', topn =100):
if len(key[0])==3:
req_count -= 1
print(key[0], key[1])
if req_count == 0:
break;
#第二个应用是看两个词向量的相近程度,
print('相似程度===',model.wv.similarity('我的第一个词', '王某某'))
#第三个应用是找出不同类的词
print(model.wv.doesnt_match(u"第一个 第二个 第三个".split()))