gensim 快速入门 Word2Vec

article/2025/8/22 21:36:24

文章目录

  • 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

http://chatgpt.dhexx.cn/article/QcOjuyXe.shtml

相关文章

vue获得焦点事件处理函数中控制其失去焦点,但是失去焦点后该获得焦点事件一直被触发

当input获取焦点的时候需要判断另一个操作是否已完成,否则需要引导用户先去执行另一个操作,是则允许输入。 另一个操作跟当前操作是在同一个页面上,无法通过“下一步”进行控制。 解决思路是: 当input获取焦点的时候&#xff0…

div失去焦点事件onblur()无效

初学js事件&#xff0c;想做一个点击时变红&#xff0c;取消聚焦时变白的div&#xff0c;于是我这样写代码&#xff1a; <div style"width: 100px;height: 50px;border: 1px solid;"></div> <script>let div document.getElementsByTagName(&quo…

input失去焦点事件和点击事件冲突的解决思路

首先说一下应用场景 el-input框为禁用状态时&#xff0c;点击取消禁用&#xff0c;并显示后方两个按钮&#xff0c; 点击绿色按钮保存input框当前值&#xff0c;失去焦点或点击红色框时恢复改变前的值 思路就是不在input上的失去焦点方法&#xff0c;而是手动调用失去焦点方法…

input中blur失去焦点事件与点击事件冲突

场景&#xff1a; 当在输入框里输入手机号的时候&#xff0c;输入框高亮&#xff0c;并且关闭按钮显示&#xff0c;input失焦时关闭按钮隐藏 现象&#xff1a; 遇到的问题是&#xff0c;当我们点击关闭按钮清空input框数据时&#xff0c;发现只是关闭按钮隐藏了&#xff0c…

div失去焦点事件onblur()不触发解决方法

需求&#xff1a; 做一个弹出框组件&#xff0c;文字点击时会在文字下方弹出一个框&#xff0c;在vue3中监听div元素的blur事件发现事件并不会在div失去焦点时触发 解决方法 bug原因&#xff1a;在vue中div默认不触发事件,除非将元素添加tabindex"-1"属性才会触发…

JavaScript学习(二十一)——表单相关事件(焦点事件)

表单事件实际上就是对元素获得或失去焦点的动作进行控制。可以利用表单事件来改变获得或失去焦点的元素样式&#xff0c;这里所指的元素可以是同一类型&#xff0c;也可以是多个不同类型的元素。 获取焦点与失去焦点事件 获得焦点事件(onfocus) 是当某个元素获得焦点时触发事件…

特征工程 - 数据分析 - 峰度 and 偏度

特征工程 - 数据分析 - 峰度 and 偏度 偏度峰度 偏度 偏度&#xff08;Skewness&#xff09;用来描述数据分布的对称性。 当偏度 <0 时&#xff0c;称为负偏&#xff0c;数据出现左侧长尾&#xff1b;当偏度>0时&#xff0c;称为正偏&#xff0c;数据出现右侧长尾。 正态…

python金融分析小知识(6)——偏度与峰度的计算

Hello 大家好&#xff0c;我是一名新来的金融领域打工人&#xff0c;日常分享一些python知识&#xff0c;都是自己在学习生活中遇到的一些问题&#xff0c;分享给大家&#xff0c;希望对大家有一定的帮助&#xff01; 相信大家在平时的统计分析中&#xff0c;一定会用到数组偏…

使用Excel计算峰度(Kurtosis)和偏度(Skewness)

峰度&#xff08;Kurtosis&#xff09;和偏度&#xff08;Skewness&#xff09; 峰度是描述总体中所有取值分布形态陡缓程度的统计量。计算公式是&#xff1a; 在Excel中的公式是&#xff1a;KURT 因为是与标准正态分布比较&#xff0c;而标准正态分布的四阶矩为3&#xff0c;…

Resnet解读

pytorch的resnet模块在torchvision的models中。 里面可以选择的resnet类型有&#xff1a; _all_列表的每一个resnet都提供了实现的函数&#xff1a; def resnet18(pretrainedFalse, progressTrue, **kwargs):"""Constructs a ResNet-18 model.Args:pretrained …

ResNet算法

Daily learning2 Q1&#xff1a;过拟合&#xff08;overfitting&#xff09;&#xff0c;欠拟合&#xff08;underfitting&#xff09;&#xff1f; A1:欠拟合&#xff1a;根本原因是特征维度过少&#xff0c;模型过于简单&#xff0c;导致拟合的函数无法满足训练集&#xff0c…

Resnet代码详解

这篇文章是用来讲解Resnet(残差网络)代码的&#xff0c;结合代码理解残差网络结构。 目录 Bottleneck类 Conv33 Conv11 BasicBlock ResNet _make_layer代码解析 完整的ResNet代码&#xff1a; 可以直接调用torch内置的resnet官方代码。 from torchvision.models impo…

ResNet结构的pytorch实现

文章目录 1.ResNet的创新1&#xff09;亮点2&#xff09;原因 2.ResNet的结构1&#xff09;浅层的残差结构2&#xff09;深层的残差结构3&#xff09;总结 3.Batch Normalization4.参考代码 1.ResNet的创新 现在重新稍微系统的介绍一下ResNet网络结构。 ResNet结构首先通过一个…

Resnet论文解读

摘要&#xff1a; 提出了一种残差结构&#xff0c;这些残差网络的集合在ImageNet测试集上实现了3.57%的误差。该结果在ILSVRC 2015分类任务中获得第一名。 介绍&#xff1a; 主要讲述的就是针对 深度越深&#xff0c;精确度达到了一种饱和的状态&#xff0c;然后就会产生退化…

了解ResNet

产生背景 网络的层数越多&#xff0c;就能够提取更多的特征&#xff0c;但是如果只是简单的增加深度&#xff0c;就会导致梯度爆炸。也有文章提出&#xff0c;解决该问题的方法是正则化初始化和中间的正则化层&#xff0c;但是这样会导致另一个问题&#xff0c;退化,网络的层数…

ResNet网络

1.1.ResNet的提出 残差网络(ResNet) 是由来自Microsoft Research的4位学者提出的卷积神经网络&#xff0c;在2015年的ImageNet大规模视觉识别竞赛&#xff08;ImageNet Large Scale Visual Recognition Challenge, ILSVRC&#xff09;中获得了图像分类和物体识别的优胜。 网络…

ResNet详解——通俗易懂版

ResNet学习 什么是ResNet为什么要引入ResNet&#xff1f;ResNet详细解说 本篇博客主要是自己对论文的一些解读以及参考一些博客后的理解&#xff0c;如若有不对之处&#xff0c;请各位道友指出。多谢&#xff01; 2015年刚提出ResNet的Paper 2016对ResNet进行改进之后的Paper …

CNN经典网络模型(五):ResNet简介及代码实现(PyTorch超详细注释版)

目录 一、开发背景 二、网络结构 三、模型特点 四、代码实现 1. model.py 2. train.py 3. predict.py 4. spilit_data.py 五、参考内容 一、开发背景 残差神经网络(ResNet)是由微软研究院的何恺明、张祥雨、任少卿、孙剑等人提出的&#xff0c; 斩获2015年ImageNet竞赛…

ResNet详解+PyTorch实现

1.Resnet简介 深度残差网络&#xff08;Deep residual network, ResNet&#xff09;的提出是CNN图像史上的一件里程碑事件&#xff0c;由于其在公开数据上展现的优势&#xff0c;作者何凯明也因此摘得CVPR2016最佳论文奖。 Resnet是残差网络(Residual Network)的缩写&#xff…

点估计

1.说明&#xff1a; 设总体 X 的分布函数形式已知, 但它的一个或多个参数为未知, 借助于总体 X 的一个样本来估计总体未知参数的值的问题称为点估计问题. 在统计问题中往往先使用最大似然估计法, 在最大似然估计法使用不方便时, 再用矩估计法. 2.常用构造估计量的方法 1&#…