词语相似度计算

在商品搜索的过程中,可以计算用户输入的关键字与数据库中商品名间的相似度,在商品数据库中找出相似度最大的商品,推荐给用户。比如“凳子”跟“椅子”的语意更相近,跟“香蕉”或“冰箱”的语意相对较远,这种相近的程度就是词语的相似度。在实际的工程开发中可以通过word2vec实现词语相似度的计算。

from sklearn.datasets import fetch_20newsgroupsnews = fetch_20newsgroups(subset='all')
X, y = news.data, news.targetfrom bs4 import BeautifulSoup
import nltk, re# 把段落分解成由句子组成的list(每个句子又被分解成词语)
def news_to_sentences(news):news_text = BeautifulSoup(news, 'lxml').get_text()tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')raw_sentences = tokenizer.tokenize(news_text)# 对每个句子进行处理,分解成词语sentences = []for sent in raw_sentences:sentences.append(re.sub('[^a-zA-Z]', ' ', sent.lower().strip()).split())return sentencessentences = []for x in X:sentences += news_to_sentences(x)# import numpy
# # 将预处理过的"词库"保存到文件中,便于调试
# numpy_array = numpy.array(sentences)
# numpy.save('sentences.npy', numpy_array)
#
# # 将预处理后的"词库"从文件中读出,便于调试
# numpy_array = numpy.load('sentences.npy')
# sentences = numpy_array.tolist()from gensim.models import word2vecmodel = word2vec.Word2Vec(sentences, workers=2, size=300, min_count=20, window=5,sample=1e-3)model.init_sims(replace=True)# 保存word2vec训练参数便于调试
# model.wv.save_word2vec_format('word2vec_model.bin', binary=True)
# model.wv.load_word2vec_format('word2vec_model.bin', binary=True)print('词语相似度计算:')
print('morning vs morning:{0}').format(model.n_similarity('morning', 'morning'))
print('morning vs afternoon:{0}').format(model.n_similarity('morning', 'afternoon'))
print('morning vs hello:{0}').format(model.n_similarity('morning', 'hello'))
print('morning vs shell:{0}').format(model.n_similarity('morning', 'shell'))# 运行结果
morning vs morning:1.0
morning vs afternoon:0.871482
morning vs hello:0.731609
morning vs shell:0.709714

调试技巧

在开发调试的过程中,会出现错误,需要重新运行程序。如果每次修改后,都从头开始执行,肯定会消耗很多无用的时间。比如,预处理后的文本结果和word2vec的训练参数,这些中间结果可以保持下来,当遇到问题时,就可以从文件中读取结果,而不需要每次都从头开始。

gensim库word2vec的使用详解

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)# 训练后的模型保存与加载
model.save(fname)
model = Word2Vec.load(fname)# 模型使用(词语相似度计算等)
model.most_similar(positive=['woman', 'king'], negative=['man'])
#输出[('queen', 0.50882536), ...] model.doesnt_match("breakfast cereal dinner lunch".split())  # 找出不匹配的词语
#输出'cereal' model.similarity('woman', 'man')  # 两个词的相似性距离
#输出0.73723527 model['computer']     # 输出单词向量
#输出array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)

参数解释:

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

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

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

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

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

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

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

详细参数说明可查看word2vec源代码。

Python基于word2vec的词语相似度计算相关推荐

  1. 词语相似度计算:6、实验报告

    词汇相似度计算报告 摘要 1 一.简介 2 二.工具和资源说明 5 三.实验方法 5 3.1.方法1 5 3.2.方法2 6 3.3.方法3 6 3.4.方法4 7 3.5.方法5 7 3.6.方法6 ...

  2. 同义词词林 java_基于同义词词林扩展版的词语相似度计算

    词语相似度计算 词义相似度计算在很多领域中都有广泛的应用,例如信息检索.信息抽取.文本分类.词义排歧.基于实例的机器翻译等等.国内目前主要是使用知网和同义词词林来进行词语的相似度计算. 本文主要是根据 ...

  3. 基于多重继承与信息内容的知网词语相似度计算 - 论文及代码讲解

    文章目录 概念 example.py HybridSim.py howNet.py 论文:<基于多重继承与信息内容的知网词语相似度计算>-2017-张波,陈宏朝等 查看 代码:https: ...

  4. 基于信息内容的词林词语相似度计算 - 论文及代码讲解

    文章目录 论文 同义词林简介 特点 代码 获取词的编码 求IC值 求相似度 选取相似度最大值 论文:<基于信息内容的词林词语相似度计算 >-2018-彭琦,朱新华等 查看 代码:https ...

  5. Google开源word2vec,文本相似度计算工具

    Google开源word2vec,文本相似度计算工具 谷歌已经使用Deep Learning技术开发了许多新方法来解析语言,目前,谷歌开源了一款基于Deep Learning的学习工具--word2v ...

  6. Python简单实现基于VSM的余弦相似度计算

    在知识图谱构建阶段的实体对齐和属性值决策.判断一篇文章是否是你喜欢的文章.比较两篇文章的相似性等实例中,都涉及到了向量空间模型(Vector Space Model,简称VSM)和余弦相似度计算相关知 ...

  7. 机器学习算法Python实现:word2vec 求词语相似度

    #!/usr/bin/env Python3 # coding=utf-8 import jieba jieba.load_userdict("C:\\Users\\Desktop\\s_p ...

  8. 【NLP实战】基于ALBERT的文本相似度计算

    实战是学习一门技术最好的方式,也是深入了解一门技术唯一的方式.因此,NLP专栏推出了实战专栏,让有兴趣的同学在看文章之余也可以自己动手试一试. ALBERT是一个比BERT要轻量,效果更好的模型,本篇 ...

  9. 基于Java的文本相似度计算

    目录 1. 前言 1.1 开发环境: 1.2 初步设想 1.3 参考资料 2. HanLP 2.1 在Java中使用HanLP库 2.2 分词函数 3. 双文本对比 3.1 步骤分解 3.2 完整代码 ...

最新文章

  1. 100多次竞赛后,他研发了一个几乎可以解决所有机器学习问题的框架
  2. android 禁用组件,android
  3. Vue.js下拉框-详细省市联动示例
  4. 推荐一个妹子,播报汽车新闻
  5. 【Python入门】Python之OS模块39个常用函数详解
  6. oracle 复制组删除,利用copy在ASM磁盘组之间迁移
  7. EOJ_1017_座位分配
  8. React开发(240):dva概念5reducer
  9. portainer使用阿里云docker镜像加速器
  10. 代码走查与代码审查区别
  11. 利用TouchDelegate提升用户体验
  12. 剽悍一只猫《一年顶十年》读书笔记
  13. jQuery幻灯片插件Skippr
  14. e在计算机语言,请问e语言是什么?怎样使用?
  15. vs2015最详细的使用教程(有图)
  16. 获取王者荣耀皮肤所有高清图片-Python
  17. nyist--周期串
  18. 1.android入门不能忽视的问题之出现“ClassNotFoundException: Didn't find class ...Activity on path: DexPathLis”错误
  19. 三子棋(五子棋,多子棋)的实现:c语言
  20. GPS反演潮位修复方法

热门文章

  1. 20行Python代码开发植物识别 app!这样还怕认不出菜的尴尬吗?
  2. Android逆向工程工具Dare的使用方法(Mac OS X中)
  3. 我的世界光影mod怎么用_我的世界1.7.2光影水反整合包怎么用 使用方法详解
  4. 如何给PPT文件添加水印?
  5. PHP 根据身份证号识别 - 星座,生肖,性别
  6. 激光slam课程学习笔记--第11课:3D激光SLAM介绍
  7. 【点宽专栏】天风证券——商品期货CTA专题报告(三)策略的趋势过滤
  8. IEC 61000-3-2 2018 电磁兼容性(EMC) - 第3-2部分:限值 - 谐波电流发射限值(设备输入电流≤16A/相) 标准更新
  9. 测试两台电脑之间的网速
  10. linux系统下进行两个硬盘之间的拷贝