Word2vec模型

介绍一下Word2vec模型以及在Lee Evaluation语料库上进行使用

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

Word2vec是一种基于神经网络的而且被广泛使用的算法,也可以看成“深度学习”的一种算法,虽然它本身层次可能并不深。

Word2vec通过使用大量的没有注释过的文本,自动的学习单词之间的关系。这个算法的输出是向量,每一个单词对应一个具有显性的线性关系的向量,比如下面的例子

  • vec(“king”) - vec(“man”) + vec(“woman”) =~ vec(“queen”)

  • vec(“Montreal Canadiens”) – vec(“Montreal”) + vec(“Toronto”) =~ vec(“Toronto Maple Leafs”)

可以看到,“国王”的向量减去“男人”的向量加上“女人”的向量大约等于“女王”的向量

word2vec模型在自动文本标注、推荐系统和机器翻译等应用领域具有很大的应用价值

回顾:Bag-of-words模型

在开始介绍Word2vec模型之前,必须确保你对Bag-of-words已经有了了解,这里先对词袋(bag-of-words)模型进行回顾:

Bag-of-words模型是将每个文档转换成一个固定长度的整数向量的方法,比如说有以下的两个句子:

  • John likes to watch movies. Mary likes movies too.

  • John also likes to watch football games. Mary hates football.

词袋模型可能给出的对应的两个向量为:

  • [1, 2, 1, 1, 2, 1, 1, 0, 0, 0, 0]

  • [1, 1, 1, 1, 0, 1, 0, 1, 2, 1, 1]

输出的向量每一个都有10个元素,每个元素代表的值是某个特定的单词出现的次数,元素的顺序并没有规定,在上面的例子中使用的顺序可能是下面这样:

["John", "likes", "to", "watch", "movies", "Mary", "too", "also", "football", "games", "hates"].

词袋模型出乎意料的很有效,但是也存在一些不足

词袋模型的不足:

<1>词袋模型丢失了词序,那么就意味着“John likes Mary” 和 “Mary likes John”这两个句子具有相同的向量,但是很明显这两个句子的含义并不相同。

<2>词袋模型并没有学习到底层的单词之间的联系,所以两个句子之间的距离不能够反应意义上的差异。

对于第一个不足,可以通过让词袋模型考虑长度为n的词组作为固定长度的向量来表示文档,可以获取到局部的词序,但是却存在着稀疏性和高维性。

而Word2vec模型可以很好地解决第二个不足

介绍:Word2vec模型

Word2vec模型是一种较新的模型,它可以使用浅层的神经网络来把单词嵌入到低维向量空间。

模型的输出是一组单词的向量,在这个向量空间当中,向量在上下文的基础上具有相似的意义,彼此距离较远的向量具有不同的含义。

比如说,“strong”和“powerful”可能距离很近,但是“strong”和“paris”距离较远。

Word2vec模型的版本

Word2vec模型存在两个版本,分别是

1、Skip-grams(SG)

2、Continuous-bag-of-words(CBOW)

以Skip-grams模型举例,它通过使用窗口在数据上进行移动而产生的词对(word1,word2)进行训练,根据给定的输入词训练出一个1-hidden-layer的神经网络,从而来给出附近词语对输入词语的预测的概率分布。

一个单词的one-hot编码通过“投影层”到达隐藏层,这些投影的权重就是单词的嵌入。

如果隐藏层有300个神经元,那么这个网络就会产生300维的单词嵌入。

CBOW模型和Skip-grams模型很相似,它也是使用一个单隐层的神经网络。通过使用多个目标词的上下文词语来预测目标词。

同样的,将一个one-hot词转化为和隐藏层相同宽度的投影权重就是对应词的嵌入。

Word2vec Demo

现在我们来看看word2vec到底能做些啥,我们来加载一个预先训练好的模型,并且对它进行测试。

首先获取在googlenews中的数据集的一部分上训练的模型,这个模型大概覆盖了300万个单词和短语,如果想要自己手动训练这个模型,可能会需要花费几个小时,如果只是加载这个训练好的模型,只需要几分钟就可以。

import gensim.downloader as api
wv = api.load('word2vec-google-news-300')

注意:这个模型很大,大概2GB,如果真的要下载国内的网络比较慢,要下挺久。

最常用的一个方法,是检索一下这个模型里面的词汇表,你可以这么做:

for index, word in enumerate(wv.index_to_key):if index == 10:breakprint(f"word #{index}/{len(wv.index_to_key)} is {word}")
word #0/3000000 is </s>
word #1/3000000 is in
word #2/3000000 is for
word #3/3000000 is that
word #4/3000000 is is
word #5/3000000 is on
word #6/3000000 is ##
word #7/3000000 is The
word #8/3000000 is with
word #9/3000000 is said

另一个方法是获取这个模型得到的单词的向量:

vec_king = wv['king']

注意!模型不能够为没见过的词给出向量表示!

所以你可以这么做:

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

Word2vec模型可以支持一些现成的单词相似性的任务,你可以观察到模型对单词给出的输出:

pairs = [('car', 'minivan'),   # a minivan is a kind of car('car', 'bicycle'),   # still a wheeled vehicle('car', 'airplane'),  # ok, no wheels, but still a vehicle('car', 'cereal'),    # ... and so on('car', 'communism'),
]
for w1, w2 in pairs:print('%r\t%r\t%.2f' % (w1, w2, wv.similarity(w1, w2)))
'car'   'minivan'       0.69
'car'   'bicycle'       0.54
'car'   'airplane'      0.42
'car'   'cereal'        0.14
'car'   'communism'     0.06

你可以打印出与“car”或者“minivan”最相似的5个单词:

print(wv.most_similar(positive=['car', 'minivan'], topn=5))
[('SUV', 0.8532192707061768), ('vehicle', 0.8175783753395081), ('pickup_truck', 0.7763688564300537), ('Jeep', 0.7567334175109863), ('Ford_Explorer', 0.7565720081329346)]

或者你可以召出来不属于这个某个列表中的单词:

print(wv.doesnt_match(['fire', 'water', 'land', 'sea', 'air', 'car']))
car

Gensim库的使用——Word2vec模型(一)模型的简单介绍与加载预训练的模型进行测试相关推荐

  1. 使用torchvision.models.inception_v3(pretrained=True)加载预训练的模型每次都特别慢

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 使用torchvision.models.inception_v3(pretrained=True)加载预训练的模型每次 ...

  2. torch编程-加载预训练权重-模型冻结-解耦-梯度不反传

    1)加载预训练权重 net = torchvision.models.resnet50(pretrained=False) # 构建模型 pretrained_model = torch.load(p ...

  3. tensorflow加载预训练好的模型图(.pb文件)

    千万不要试图在jupyter notebook中打开.pb模型文件,否则你会得到: 这时候我以为shi编码的问题,开始转换编码,转换完成后发现shi乱ma. 后来网上查了,.pb文件里面存储的shi模 ...

  4. 如何用pytorch做文本摘要生成任务(加载数据集、T5 模型参数、微调、保存和测试模型,以及ROUGE分数计算)

    摘要:如何使用 Pytorch(或Pytorchlightning) 和 huggingface Transformers 做文本摘要生成任务,包括数据集的加载.模型的加载.模型的微调.模型的验证.模 ...

  5. NLP中的对话机器人——预训练基准模型

    引言 本文是七月在线<NLP中的对话机器人>的视频笔记,主要介绍FAQ问答型聊天机器人的实现. 场景二 上篇文章中我们解决了给定一个问题和一些回答,从中找到最佳回答的任务. 在场景二中,我 ...

  6. keras: 用预训练的模型提取特征

    keras提供了VGG19在ImageNet上的预训练权重模型文件,其他可用的模型还有VGG16.Xception.ResNet50.InceptionV3 4个. VGG19在keras中的定义: ...

  7. python怎么使用预训练的模型_Tensorflow加载Vgg预训练模型操作

    很多深度神经网络模型需要加载预训练过的Vgg参数,比如说:风格迁移.目标检测.图像标注等计算机视觉中常见的任务.那么到底如何加载Vgg模型呢?Vgg文件的参数到底有何意义呢?加载后的模型该如何使用呢? ...

  8. python的pth打开方式_pytorch 加载(.pth)格式的模型实例

    有一些非常流行的网络如 resnet.squeezenet.densenet等在pytorch里面都有,包括网络结构和训练好的模型. 按官网加载预训练好的模型: import torchvision. ...

  9. 【Tensorflow 2.0 正式版教程】ImageNet(二)模型加载与训练

    前面的教程都只在小模型.小数据库上进行了演示,这次来真正实战一个大型数据库ImageNet.教程会分为三部分:数据增强.模型加载与训练.模型测试,最终在ResNet50上可以达到77.72%的top- ...

  10. NLP之PTM:自然语言处理领域—预训练大模型时代的各种吊炸天大模型算法概述(Word2Vec→ELMO→Attention→Transfo→GPT系列/BERT系列等)、关系梳理、模型对比之详细攻略

    NLP之PTM:自然语言处理领域-预训练大模型时代的各种吊炸天大模型算法概述(Word2Vec→ELMO→Attention→Transformer→GPT系列/BERT系列等).关系梳理.模型对比之 ...

最新文章

  1. 我这样理解技术人的成长过程
  2. CUDA系列学习(四)Parallel Task类型 与 Memory Allocation
  3. Jquery中使用SweetAlert使弹窗更漂亮
  4. 2021-05-10 矩阵AB和矩阵BA有什么联系?
  5. c++中的fork函数_linux c语言 fork() 和 exec 函数的简介和用法
  6. 无法连接NVIDIA驱动:NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver
  7. [JZOJ100047] 【NOIP2017提高A组模拟7.14】基因变异
  8. [翻译]进化游戏的层次结构 - 用组件来重构你的游戏实体
  9. PHP获取数组中重复值的键值
  10. usb uvc协议 1
  11. unity 实现PPT动画效果切换图片
  12. windows的hosts文件在哪?
  13. 从零开始搭建聊天机器人网页—Vue
  14. Unity创建游戏物体的三种方法
  15. 组织架构与中台建设,回顾阿里小米京东美团四大商业巨头的战略变迁
  16. mDNS原理的简单理解
  17. 快速打造微信小程序(超详细)
  18. Hbase Coprocessor(协处理器)的使用
  19. 笨方法学python 习题29-31
  20. 2022网络搭建国赛题交换机安全配置

热门文章

  1. php 微信下载临时素材,php 微信开发之新增上传/获取下载临时素材
  2. 阿里巴巴实习生招聘开始啦
  3. native工具备份mysql数据库_Navicat Premium实现mysql数据库备份/还原
  4. modelica学习笔记4
  5. WRONGTYPE Operation against a key holding the wrong kind of value
  6. 剖析广州“开四停四”交通限行的实现技术
  7. 文本挖掘学习笔记(三):文档相似度、文档分类和情感分析
  8. 如何自动生成目录,并设置目录格式(一看就懂)
  9. dos攻击防范 php,DOS攻击和DDOS攻击的区别
  10. 无人机飞行控制逻辑以及不稳定原因分析