文章目录

  • gensim的核心概念
  • Word2Vec简介
  • Word2Vec初试探
    • 将单词可视化
  • 训练自己的Word2Vec模型

gensim的核心概念

  1. Document: 文档。可以是一个一句话,或者一段话
  2. Corpus: 文档的集合
  3. Vector: 文档向量。将文档通过数学向量表示。
  4. Model: 模型。将文档转换为向量的模型。将文档转换为向量并不是直接用死算法转的,和机器学习一样,首先是训练模型,然后用训练好的模型将文档转为向量。
import gensim
gensim.__version__
'4.0.1'

Word2Vec简介

建议看这篇文章:https://zhuanlan.zhihu.com/p/26306795/

简单点说,word2vec就是将一个单词映射成一个高维向量,例如google训练的word2vec模型将man这个单词映射成一个300维的向量。

这么做的好处有:

  1. 将文本数字化,可以用于计算,比如计算man和woman两个单词的距离
  2. 可以计算单词之间的相似程度

Word2Vec初试探

word2vec是一个需要训练的模型,官方提供了训练好的模型供人们玩。

下载这个文件,然后将其放在当前目录下

链接:https://pan.baidu.com/s/1Y5no1IDg6qtCwolOQVV_8A
提取码:at9e

加载模型:

wv = gensim.models.KeyedVectors.load_word2vec_format("GoogleNews-vectors-negative300.bin.gz", binary=True) # wv = word2vec

如果上面这句报错,请参考这篇文章:https://stackoverflow.com/questions/57507832/unable-to-allocate-array-with-shape-and-data-type

wv就是加载好的模型,可以很方便的使用模型获取单词的向量

vec_king = wv['king']
vec_king.shape
(300,)

可以看出,king这个单词是一个300维度的向量

如果传递了一个不在词库中的单词,则会报错

try:vec_cameroon = wv['huluanxiede']
except KeyError:print("The word 'cameroon' does not appear in this model")
The word 'cameroon' does not appear in this model

计算两个单词的相似度:

wv.similarity('man', 'woman')  # 两个单词相似度很高
0.76640123
wv.similarity('woman', 'hello')  # 两个单词没什么关系,相似度很低
0.105804786

查询单词的最相似的5个单词

wv.most_similar(positive=['man'], topn=5)
[('woman', 0.7664012908935547),('boy', 0.6824870705604553),('teenager', 0.6586930751800537),('teenage_girl', 0.6147903203964233),('girl', 0.5921714305877686)]

将单词可视化

定义一些动物和颜色的单词:

animals = ['dog', 'cat', 'panda', 'elephant', 'tiger', 'lion', 'monkey', 'koala']
colors = ['black', 'blue', 'green', 'purple', 'yellow', 'red', 'pink', 'orange']
cars = ['bicycle', 'bus', 'bike', 'motor', 'plane', 'ship', 'car']

将上述单词转为300维的向量:

animals_vec = wv[animals]
colors_vec = wv[colors]
cars_vec = wv[cars]

使用sklearn的PCA库,对数据进行降维:

from sklearn.decomposition import PCApca = PCA(n_components=2)
pca.fit(animals_vec)
animals_vec = pca.transform(animals_vec)pca.fit(colors_vec)
colors_vec = pca.transform(colors_vec)pca.fit(cars_vec)
cars_vec = pca.transform(cars_vec)

将上述点绘制成图像:

import matplotlib.pyplot as pltplt.scatter(animals_vec[:, 0], animals_vec[:, 1], marker='o')
plt.scatter(colors_vec[:, 0], colors_vec[:, 1], marker='x')
plt.scatter(cars_vec[:, 0], cars_vec[:, 1], marker='+')
plt.show()

从上图可以看出,比较相似的单词距离较近(虽然降维后不太明显)。

训练自己的Word2Vec模型

sentences = [['I', 'like', 'dog'],['I', 'like', 'cat'],['I', 'go', 'to', 'school', 'by', 'bus'],['I', 'go', 'to', 'work', 'by', 'subway'],
]  # 分好词的句子
"""
vector_size: 要将单词转化为多少维的向量
min_count: 当语料库中某个单词出现的次数小于min_count时,忽略该单词
window: 训练时,会考虑该单词的上下文。window表示考虑几个单词。一般情况下,该值越大,训练耗时越长,效果越好。
"""
model = gensim.models.Word2Vec(sentences=sentences, vector_size=10, min_count=1, window=2)
model.wv['dog'] # 获取dog单词的词向量
array([-0.08619688,  0.03665738,  0.05189884,  0.05741937,  0.07466917,-0.06167676,  0.01105614,  0.06047282, -0.02840052, -0.06173522],dtype=float32)
print("dog和cat的相似度:", wv.similarity('dog', 'cat'))
print("bus和subway的相似度:", wv.similarity('bus', 'subway'))
print("dog和bus的相似度:", wv.similarity('dog', 'bus'))
dog和cat的相似度: 0.7609457
bus和subway的相似度: 0.4529537
dog和bus的相似度: 0.16011381

gensim 快速入门 Word2Vec相关推荐

  1. 带你少走弯路:强烈推荐的Keras快速入门资料和翻译(可下载)

    上次写了TensorFlow和PyTorch的快速入门资料,受到很多好评,读者强烈建议我再出一个keras的快速入门路线,经过翻译和搜索网上资源,我推荐4份入门资料,希望对大家有所帮助. 备注:另外两 ...

  2. gensim词向量Word2Vec安装及《庆余年》中文短文本相似度计算 | CSDN博文精选

    作者 | Eastmount 来源 | CSDN博文精选 (*点击阅读原文,查看作者更多精彩文章) 本篇文章将分享gensim词向量Word2Vec安装.基础用法,并实现<庆余年>中文短文 ...

  3. BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自 | GitHub    作者 | Jay Alammar 转自 | 机器之心 如 ...

  4. BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南

    2019-12-31 10:50:59 选自GitHub 作者:Jay Alammar 参与:王子嘉.Geek AI 如果你是一名自然语言处理从业者,那你一定听说过最近大火的 BERT 模型.本文是一 ...

  5. 使用NeMo快速入门NLP、实现机器翻译任务,英伟达专家实战讲解,内附代码

    对话式AI是当前AI领域最火热的细分领域之一,其中自然语言处理(NLP)是最为困难的问题之一. 那么,零基础.对会话式AI感兴趣的小伙伴们如何快速入门 NLP领域? 近日,英伟达x量子位发起的NLP公 ...

  6. 带你少走弯路:强烈推荐的Pytorch快速入门资料和翻译(可下载)

    上次写了TensorFlow的快速入门资料,受到很多好评,读者强烈建议我出一个pytorch的快速入门路线,经过翻译和搜索网上资源,我推荐3份入门资料,希望对大家有所帮助. 备注:TensorFlow ...

  7. 【自然语言处理】Gensim中的Word2Vec

    Gensim中的Word2Vec BOW 和 TF-IDF 都只着重于词汇出现在文件中的次数,未考虑语言.文字有上下文的关联,针对上下文的关联,Google 研发团队提出了词向量 Word2vec,将 ...

  8. 机器学习——Google 快速入门课程(综合版)

    前言 本文参考 Google 谷歌官网机器学习的快速入门课程,整体课程比较好理解,供大家学习参考:文章也会结合自己的理解进行优化.看到官网的消息2021/7之后就不提供中文版的机器学习快速入门课程了, ...

  9. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

最新文章

  1. 底盘智能化的关键技术探讨
  2. 面向对象的三大特性(封装、继承、多态)
  3. C++ 落选,2021 年最想学习的五大编程语言
  4. [Python] isinstance() for checking object type
  5. 前端学习(1715):前端系列javascript之页面配置
  6. 前端捕捉轨迹_基于JavaScript实现每日签到打卡轨迹功能
  7. CSS 浮动 float属性
  8. 点击button自动提交表单原因及解决方案
  9. android基础入门布局讲解(2)
  10. 数字信号处理实验二 IIR数字滤波器设计及软件实现
  11. Matlab 官网培训 - 大型项目-风力发电机数据模型构建-Catching the Wind
  12. Android网络操作和优化相关
  13. Android6.0权限的处理
  14. 素人程序员:如何在技术浪潮更迭中保持较高成长速度?
  15. HQChart使用教程60-新版k线训练使用教程
  16. 长安大学计算机科学与技术(交通信息工程)课程专业课,浙江大学软件学院公布考试大纲!又有多所学校公布专业目录...
  17. 构建数据大治理生态体系,保障数字经济创新发展
  18. blob/URL.createObjectURL()/reader.readAsDataURL/文件上传
  19. oracle 定时任务删除数据
  20. linux中常见的校验用正则表达式

热门文章

  1. Java后端开发-大厂校招面试真题汇总【语雀图灵周瑜CSDN】
  2. AKH-L零序电流互感器(安科瑞-卓宋兰)
  3. package_josn解释
  4. c语言中rand()函数
  5. GKFX捷凯官网:gkfx-cn com 八种炒汇交易操作技巧详解
  6. 使用vs2008c++语言开发activex控件教程,使用VS2008C 开发ActiveX控件.pdf
  7. 家具渲染效果图可以用3dmax云渲染吗?
  8. java 容器的嵌套_嵌套容器 —— 在 Podman 容器内构建并运行 Buildah
  9. 浪潮之巅第五章——奔腾的芯(Intel)
  10. BATJ经典软件测试面试题目(内附答案)