目录

  • 1 目的和思想
  • 2 模型原理
    • 2.1 skip-gram的原理
    • 2.2 CBOW的原理
    • 2.3 归一化(softmax)
      • 2.3.1 Hierarchical softmax(层次softmax)
      • 2.3.2 Negative Sampling(负采样)
  • 3 优化
    • subsampling of frequent words(重采样)
  • 4 模型复杂度
  • 5 超参数
  • 6 word2vec相关知识
    • 6.1 one-hot和分布式表示
    • 6.2 word-embedding(词嵌入)—分布式表示
    • 6.3 马尔科夫假设
    • 6.4 log-linear model (log线性模型)
    • 6.5 Glove 模型
    • 6.6 word2vec优缺点
      • 6.6.1 优点
      • 6.6.2 缺点
  • 7 word2vec 总结
  • 8 word2vec 函数使用
    • 8.1 输入
    • 8.2 函数及参数
    • 8.3 输出及应用

1 目的和思想

word2vec模型的目的:求出能表示出词与词之间的关系的词向量
word2vec的整体思想:句子中相近的词之间是有联系的
word2vec属于无监督模型
模型出自论文: Efficient Estimation of Word Representations in Vector Space

2 模型原理

模型实现(两种方法):

  1. skip-gram+softmax
  2. CBOW+softmax

2.1 skip-gram的原理

skip-gram是利用中心词预测周围window内的词
内部是通过矩阵计算实现的,实现如图
skip-gram 原理图详细步骤:

  1. 首先将中心词转换成一个1*V的one-hot矩阵
  2. 设置W和W’这两个矩阵作为中心词矩阵和周围词矩阵,再对两个矩阵随机初始化
  3. 将中心词one-hot矩阵和W作矩阵相乘得到中心词的词向量,是一个1*d的矩阵
  4. 将中心词的词向量与W’作矩阵相乘得到周围词的词向量
  5. 再对周围词的词向量作softmax归一化处理,得到每个词的概率
  6. 接下来就是反向传播来调整W和W’这两个矩阵数据进行优化

2.2 CBOW的原理

CBOW是利用周围词预测中心词

2.3 归一化(softmax)

主要是在输出层上改进

2.3.1 Hierarchical softmax(层次softmax)

通过其将维度V变为log2V,采用哈夫曼树的思想将softmax转换成计算log2V个sigmoid

2.3.2 Negative Sampling(负采样)

得到一个正样本概率和几个负样本概率,共K+1个样本,效果比多分类好

3 优化

subsampling of frequent words(重采样)

通过将词频大的,被删除的概率大,词频小的,被删除的概率小,原因是出现次数多的词往往含有的信息少,例如:“a”、“the”

4 模型复杂度

模型复杂度是通过模型训练时所使用的参数个数来评估的,通过计算得到各模型复杂度
NNLM:Q=ND+NDH+Hlog2V
RNNLM:Q=HH+Hlog2V
CBOW+HS:Q=ND+Dlog2V
skip-gram+HS:Q=C(D+Dlog2V)
CBOW+NEG:Q=N
D+D*(K+1)
skip-gram+NEG:Q=C(D+D*(K+1))

5 超参数

  1. 利用genism做word2vec时,其中dim表示每个词的维度,dim一般选择100-500之间,min_count一般选择2-10之间,如果数据集少则将min_count调为1
  2. epochs表示迭代次数,需要根据特定的情况来设置大小
  3. window表示窗口大小,通常大小设置为2,也可以根据需求来设置

6 word2vec相关知识

6.1 one-hot和分布式表示

  1. one-hot编码是将一个词转换成[0 0 0 0 0 1 0…]
  2. 分布式表示是将一个词转换成[0.5 0.3 0 0.12 0.7 0.69…],分布式相比one-hot更能表示词间关系,并且使用了一个1*d(d为上文所提到的dim)的向量来表示一个词

6.2 word-embedding(词嵌入)—分布式表示

可以进行词的向量空间的映射,可以表示词的(上下文)含义,就是用空间位置表示之间关系

6.3 马尔科夫假设

下一个词的出现仅依赖于前面的一个词或几个词
语言模型的基本思想:句子中下一个词的出现和前面的词是有关系的,所以可以用前面的词预测下一个词

  1. N-gram(Language Model)
    N-gram是一个基于概率的判别模型,它的输入是一句话(单词的顺序序列),输出是这句话的概率,即这些单词的联合概率
    模型中每一个单词都要依赖于从第一个单词到它之前一个单词的影响
  2. NNLM(前向神经网络语言模型)
    NNLM利用了马尔科夫假设,模型是针对每t-1个词的输入来预测下一个词,也即是第t个词是什么,因此模型的实际输出是一个向量1*V,该向量的每一个分量依次对应下一个词为词典中某个词的概率。所以V维的概率值中必定有一个最大的概率,而其他的概率较小
  3. RNNLM(循环神经网络语言模型)
    和NNLM的不同点是:RNNLM是通过前面训练所生成的是s(t-1)和当前训练词的s(t)进行计算,也就是说当前词会受到之前所有词的影响
  4. 语言模型的评估指标:困惑度(perplexity)
    句子概率越大,语言模型越好,困惑度越小
  5. 语言模型困惑度和Loss的关系
    pp(s)=exp(L)

6.4 log-linear model (log线性模型)

将语言模型看成一个多分类问题,相当于线性分类器加上softmax

y=softmax(wx+b)y=softmax(wx+b)y=softmax(wx+b)

6.5 Glove 模型

Word2vec和glove都是可以将词编成向量
两者最直观的区别在于:word2vec是一种基于预测的模型,GloVe是一种基于统计的模型
从算法实现的角度来说,它们区别在于loss的计算是不同的

6.6 word2vec优缺点

6.6.1 优点

  1. 相比one-hot编码,更能表示词间的关系

6.6.2 缺点

  1. 在训练过程中仅仅考虑了window范围内的词间关系,没有考虑到全局词
  2. 对于中文语料效果不好,分词粒度会严重影响训练效果
  3. 对于现在的词来说,一词可能会有多个意思,但是word2vec并不能将其表现出来

7 word2vec 总结

word2vec主要是利用词向量来表示每个词之间的关系,也许有些词在人的眼里发现不出什么相似之处,但是通过电脑计算却能发现,例如:A与B有关系,B与C有关系,那A和C有关系吗? 所以为了表示词间关系,并且不能像one-hot编码那样词与词是独立的,就需要使用这个模型

8 word2vec 函数使用

8.1 输入

少量数据用list存储

texts = [['human', 'interface', 'computer'],['survey', 'user', 'computer', 'system', 'response', 'time'],['eps', 'user', 'interface', 'system'],['system', 'human', 'system', 'eps'],['user', 'response', 'time'],['trees'],['graph', 'trees'],['graph', 'minors', 'trees'],['graph', 'minors', 'survey']]

8.2 函数及参数

# 引入 word2vec
from gensim.models import word2vec
# 构建模型
model = word2vec.Word2Vec(sentences=texts,  # 分好的词,一般为listmin_count=1,      # 去掉词频少于1的单词,默认5size = 10,        # 向量维度,默认100alpha=0.025,      # 学习率window=5,          # 周围词与预测词的最大距离sample=0.001,      # 高频词汇的随机降采样的配置阈值seed=1,            # 随机数生成,初始化w和w'min_alpha=0.0001,  # 最小学习率sg=0,              # 0: skip-gram, 1: CBOW,默认0hs=0,              # 1: Hierarchical softmax, 0:Negative Sampling, 默认为0cbow_mean=1,       # 0: 采用上下文词向量的和, 1: 采用均值, 默认1,只有使用CBOW的时候才起作用iter=5,            # 迭代次数,默认5trim_rule=None,    # 设置留下或者删除的词sorted_vocab=1,    # 将单词按词频排序batch_words=10000  # 传递给线程的单词数量)

gensim函数库的Word2Vec的参数说明

8.3 输出及应用

输出值为time的size维的向量

# 进行词向量输出
print(model['time'])
# 输出 computer 相近的top5词
model.most_similar(positive=['human', 'computer'], negative=['user'], topn=5)
# 计算 woman和 man相似度
model.wv.similarity('woman', 'man')
# 和 man最相近的词
model.most_similar(['man'])

word2vec 词向量相关推荐

  1. 【python gensim使用】word2vec词向量处理中文语料

    word2vec介绍 word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间 ...

  2. NLP—word2vec词向量简介

    NLP处理的数据都是文字,而文字是无法直接被计算机计算的,于是人们想出了使用独热编码的方式来表示单词. <span style="font-size:16px;">浙江 ...

  3. word2vec词向量 文本分类实现(TensorFlow版,算法TextCNN)

    之前也写过word2vec词向量文本分类实现,不过那是基于Keras. 今天来写下tensoflow版的代码. 再来感受下它的魅力. tensorflow比Keras更接近底层,可以更方便让我们理解W ...

  4. 深度学习(四十二)word2vec词向量学习笔记

    word2vec词向量学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/51564783 个人微博:黄锦池-hjimce 一.使用原版word ...

  5. word2vec词向量训练及中文文本类似度计算

    本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...

  6. word2vec实例详解python_在python下实现word2vec词向量训练与加载实例

    项目中要对短文本进行相似度估计,word2vec是一个很火的工具.本文就word2vec的训练以及加载进行了总结. word2vec的原理就不描述了,word2vec词向量工具是由google开发的, ...

  7. python训练Word2Vec词向量

    一.模型训练 1.安装gensim pip install gensim gensim中封装了包括word2vec.doc2vec等模型,word2vec采用了CBOW(Continuous Bag- ...

  8. 使用gensim框架及Word2Vec词向量模型获取相似词

    使用gensim框架及Word2Vec词向量模型获取相似词 预备知识 Word2Vec模型下载 加载词向量模型 预备知识 gensim框架 gensim是基于Python的一个框架,它不但将Pytho ...

  9. Word2Vec词向量模型代码

    Word2Vec也称Word Embedding,中文的叫法是"词向量"或"词嵌入",是一种计算非常高效的,可以从原始语料中学习字词空间向量的预测模型.Word ...

  10. 在Keras的Embedding层中使用预训练的word2vec词向量

    文章目录 1 准备工作 1.1 什么是词向量? 1.2 获取词向量 2 转化词向量为keras所需格式 2.1 获取所有词语word和词向量 2.2 构造"词语-词向量"字典 2. ...

最新文章

  1. OpenStack如何实现高可用集群介绍
  2. 深入浅出Docker(一):Docker核心技术预览
  3. 【Netty】Bootstrap引导
  4. 替代还是扩展:云的下一站真是雾计算?
  5. 使用nginx做反向代理和负载均衡效果图
  6. 当深度学习遇上图: 图神经网络的兴起!(文末送书)
  7. leetcode —— 面试题 17.12. BiNode
  8. Docker基础(2)——基础操作
  9. rabbit mq 入门
  10. python不会英语不会数学怎么自学-26岁了,自学Python怎么样?
  11. Windows 2003 + ISA 2006+单网卡×××配置(3)
  12. 【每日一具18】基于HTTP协议的局域网文件共享软件
  13. linux键盘映射默认,Linux 中的键盘映射
  14. 新建文本html,创建邮件模板时html内容和文本内容哪种好
  15. 华为认证工程师HCNE培训资料
  16. API接口管理平台源码thinkPHP
  17. python经典代码
  18. 2021届毕业应届生到现在的职场工作,从一个懵懂大学生到IT职场人的转变
  19. games101:七,加速光线追踪(AABB、BVH、SAH)+ 作业6
  20. 信号与系统实验 01 - | 连续系统频域分析的MATLAB实现

热门文章

  1. matlab 水平投影,matlab图像处理方面的问题。水平投影和垂直投影!
  2. MySQL基础回顾(六):数据查询语言DQL---select查询语句总结(篇一)
  3. gearhost php,美国免费稳定全能空间:GearHost
  4. 扫一扫vin码就能识别车架号的OCR技术
  5. 全球及中国中药行业发展机遇及投资价值评估报告2021-2027年
  6. Markdown的简单使用方法
  7. Ubuntu的man手册中英文切换
  8. 将王者荣耀头像设置成和微信头像不一样
  9. Random Walk(随机游走)
  10. Unity3D摄像机裁剪——NGUI篇