python根据词向量计算相似度_Python 利用Word2Vec计算词语相似度(gensim实现)

使用 gensim 训练中文词向量,计算词语之间的相似度。

输入:语料库,txt文件。

输出:余弦相似度。

实现代码:

# -*- coding: utf-8 -*-

import logging

from gensim import models

from gensim.models import word2vec

def main():

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

sentences = word2vec.LineSentence("output.txt")

model = word2vec.Word2Vec(sentences, size=250)

# 保存模型,供以后使用

model.save("word2vec.model")

# 模型读取

# model = word2vec.Word2Vec.load("your_model_name")

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

model = models.Word2Vec.load('word2vec.model')

print("提供 3 种测试模式\n")

print("输入一个词,则去寻找前一百个该词的相似词")

print("输入两个词,则去计算两个词的余弦相似度")

print("输入三个词,进行类比推理")

while True:

try:

query = input('')

q_list = query.split()

if len(q_list) == 1:

print("相似词前 100 排序")

res = model.most_similar(q_list[0], topn=100)

for item in res:

print(item[0] + "," + str(item[1]))

elif len(q_list) == 2:

print("计算 Cosine 相似度")

res = model.similarity(q_list[0], q_list[1])

print(res)

else:

print("%s之于%s,如%s之于" % (q_list[0], q_list[2], q_list[1]))

res = model.most_similar([q_list[0], q_list[1]], [q_list[2]], topn=100)

for item in res:

print(item[0] + "," + str(item[1]))

print("----------------------------")

except Exception as e:

print(repr(e))

if __name__ == "__main__":

main()

gensim的参数解释:

from gensim.models import Word2Vec

model = Word2Vec(sentences, sg=1, size=100, window=5, min_count=5, negative=3, sample=0.001, hs=1, workers=4)

sg=1是skip-gram算法,对低频词敏感;默认sg=0为CBOW算法。

size是输出词向量的维数,值太小会导致词映射因为冲突而影响结果,值太大则会耗内存并使算法计算变慢,一般值取为100到200之间。

window是句子中当前词与目标词之间的最大距离,3表示在目标词前看3-b个词,后面看b个词(b在0-3之间随机)。

min_count是对词进行过滤,频率小于min-count的单词则会被忽视,默认值为5。

negative和sample可根据训练结果进行微调,sample表示更高频率的词被随机下采样到所设置的阈值,默认值为1e-3。

hs=1表示层级softmax将会被使用,默认hs=0且negative不为0,则负采样将会被选择使用。

workers控制训练的并行,此参数只有在安装了Cpython后才有效,否则只能使用单核。

你可能感兴趣的:(python根据词向量计算相似度_Python 利用Word2Vec计算词语相似度(gensim实现))