一. 引言 

本文仅作简要概述,萌新可扫盲用。不涉及算法推导过程,具体算法推导过程请关注参考文献2。笔者也会将自己的学习推导过程附在文章后,有兴趣者可以留言交流,共同学习。

二. 参考资料总结

1. Mikolov原论文(两篇):

《Efficient Estimation Of Word Representations In Vector Space》

贡献:

《Distributed Representations Of Sentences And Documents》

贡献:

2. Xin Rong的论文:

《Word2Vec Parameter Learning Explained》

(重点推荐!理论完备;易懂;直击要害;)

【R.I.P,Rong Xin于2017年驾驶飞机失事,缅怀;感谢为科研奉献了如此优秀的论文】

3. [NLP] 秒懂词向量Word2vec的本质 - 穆文的文章 - 知乎 https://zhuanlan.zhihu.com/p/26306795(本文主要借鉴、学习路线;感觉写的有很多勘误,作者学习后予以改进)

三. 正文

3.1 什么是Word2Vec?

NLP中最细粒度的是词语,词语组成句子,句子再组成段落、篇章、文档。所以处理NLP的问题,首先就要拿词语开刀。由于机器本质上处理的是数值型数据,所以想利用机器学习处理文本首先就是要将符号形式的文本,转换成数值形式,或者说是嵌入到一个数学空间中,即词嵌入(word embedding),而 Word2Vec 即是其中一种方法。

大部分的有监督机器学习模型都可以归结为:f\left ( x \right )\rightarrow y

在NLP中,把 x 视为一个句子中的一个词语,y 是这个词语的上下文词语,则 f 便是 NLP 中经常出现的语言模型(language model)。这个模型的目的就是判断(x, y)是不是符合符合自然语言规则,或者直白些说:“是不是人话?”。

值得注意的是:将文本映射到数学空间中,以向量的形式可以保留其语义。很著名的例子当属: 'King' - 'Man' + 'Woman' = 'Queen' 旨在用向量的运算推导出语义。

笔者认为;Word2Vec 正是来源于这两个思想。

3.2 Skip-gram 和 CBOW 模型

  • 将一个词语作为输入,来预测它的上下文; 即 “ Skip-Gram 模型”
  • 将某个词语的上下文作为输入,来预测这个词语; 即 ” CBOW (Continuous Bag-of-Word) 模型“

3.2.1 Skip-gram 和 CBOW 的简单形式(Bigram)

首先撇开Word2Vec,前文提到,机器只能处理数值型数据,那词语 x 的原始输入形式应该如何定义呢?这里就要引入 one-hot encoding(独热编码),本质上即用一个仅含一个 1、其他均为 0 的向量作为唯一标识编码。

接下来,我们来看一下 Skip-gram (简单形式,仅预测下一个词)的网络结构:

其中,V 代表了总共有多少个词语(即词汇表数量),x 为词语的 one-hot encoding 形式,y 代表在这 V 个词上输出的概率,我们希望输出的 y 与真实值 y_hat 相同。

首先需要说明的是隐藏层左侧,由于是one-hot encoding形式,对于第 j 个词,只会用到 W 矩阵中的第 j 行。另外,隐藏层的激活函数(即左侧W)其实是线性的,并不做任何的处理!

(即h = W^{T}x并不经过激活函数)

需要注意的是 N 是自定义的,而且即是隐藏层节点个数。

同理,由于h为N-dim向量,与W‘做矩阵乘法时,每个词仅会用到某一列。隐藏层右侧我们需要使用Sigmoid激活函数得到词向量每个维度的概率,并取maximum为预测词;

训练这个神经网络利用Bp算法,本质上是链式求导,此处不展开说明。

Word2Vec 的精髓实际上即是将 1 x V 的独热编码表示降维成 N 维的词向量形式。(我们称其为Input Vector)其中 V >> N。以及在后将其“转换为” 另一种 N 维的词向量形式。 (W’ 的某一列,我们称其为Output Vector) 

即:Input Vector 和 Output Vector 是 词w 的两种不同的表达形式!其向量均为 N-dim。

另外,我们需要注意:

1. 在输入某个词x时,迭代只会更新对应 W 的行,因为其他行的导数均为 0。

2. Rong论文推导中 EH 是 所有词汇输出向量的预测误差权重按比例组成。

3. 每个输入向量的更新迭代取决于词汇表中所有词汇向量,并且预测误差越大,迭代作用效果越大;

4. 可视化显示:输出向量会被拉扯来拉扯去。直观的原因正是向量被其他词汇的单词共同拉扯作用;输入向量同理。

5. 若有效,在多轮迭代后,输入/输出向量的相对位置最终会相对稳定。

3.2.2 Skip-gram 的一般情形

这些模型如何并联、cost function形式,详见参考资料2。

3.2.3 CBOW 的一般情形

这些模型如何并联、cost function形式,详见参考资料2。

3.3 Word2Vec 的training trick(优化计算效率)

相信很多初次踩坑的同学,会跟我一样陷入 Mikolov 那篇论文(参考资料1.)里提到的 hierarchical softmax 和 negative sampling 里不能自拔,但其实,它们并不是 Word2vec 的精髓,只是它的训练技巧,但也不是它独有的训练技巧。 Hierarchical softmax 只是 softmax 的一种近似形式,而 negative sampling 也是从其他方法借鉴而来。

为什么要用训练技巧呢? 如我们刚提到的,Word2vec 本质上是一个语言模型,它的输出节点数是 V 个,对应了 V 个词语,本质上是一个多分类问题,但实际当中,词语的个数非常非常多,会给计算造成很大困难,所以需要用技巧来加速训练。

在每一个训练实例进行训练的过程中,对于 W‘ 中某一列,我们都需要迭代一次词汇表中的每一个词。在训练大型语料库时,这代价无疑是难以承受的。

hierarchical softmax

  • 本质是把 N 分类问题变成 log(N)次二分类
  • negative sampling

    • 本质是预测总体类别的一个子集

2019年更新:最新的语言模型 Bert 也借鉴了 Word2vec 的 CBOW 模式,请阅读文章:

穆文:[NLP] 从语言模型看Bert的善变与GPT的坚守133 赞同 · 8 评论文章正在上传…重新上传取消

Word2Vec学习(自用)相关推荐

  1. Python实现Word2vec学习笔记

    Python实现Word2vec学习笔记 参考: 中文word2vec的python实现 python初步实现word2vec 中英文维基百科语料上的Word2Vec实验 GitHub代码地址 1 文 ...

  2. Word Embedding与Word2Vec学习

    一.词嵌入背景 Embed这个词,英文的释义为, fix (an object) firmly and deeply in a surrounding mass, 也就是"嵌入"之 ...

  3. Word2vec学习

    翻译文档,以便之后查看 1.word2vec模型 classgensim.models.word2vec.Word2Vec(sentences=None, corpus_file=None, vect ...

  4. 【机器学习】word2vec学习笔记(三):word2vec源码注释

    1. word2vec地址 官网地址:https://code.google.com/archive/p/word2vec/ GitHub地址:https://github.com/tmikolov/ ...

  5. word2vec学习+使用介绍

    word2vec是google的开源工具,很值得学习使用,推荐大家使用!代码已跑通顺利运行. word2vec是一个将单词转换成向量形式的工具.可以把对文本内容的处理简化为向量空间中的向量运算,计算出 ...

  6. 【机器学习】word2vec学习笔记(一):word2vec源码解析

    0. word2vec地址 官网地址:https://code.google.com/archive/p/word2vec/ GitHub地址:https://github.com/tmikolov/ ...

  7. Google Word2vec 学习手札

    1 前文 其实我自己也不太清楚我要用这个干什么,只是觉得可能有用,所以先装起来吧. 2 安装 这里我按照官方的步骤,并适当的增加相应内容 1.首先下载源代码(需要科学上网法): https://cod ...

  8. Word2Vec 学习心得

    本文没什么干货,主要是前后看了大概一个星期,反复去读源码和解读文章,终于感觉这东西不那么云山雾罩了.同时也发现网上很多材料有点扯淡,99% 的博文不过是把别人的东西用自己的话说一下,人云亦云.好多人自 ...

  9. word2vec学习总结

    词向量定义 词向量定义:机器通过读大量文档无监督学习词的意思.其过程如图所示,向神经网络输入一个词,找到对应的词向量,这个词向量是多维的投影到二维空间,可以看到,越相似的词距离越接近, 学习是无监督的 ...

最新文章

  1. linux 网络编程 2---(TCP编程)
  2. 【MySql】 BlackHole :黑洞引擎
  3. 计算机刚过国家线能调剂到哪些学校,2020考研:刚过国家线好不好调剂?这4个调剂策略!考生要知道...
  4. html页面左右布局透明背景,HTML透明背景
  5. python pymysql使用连接池连接mysql示例
  6. switchpreference 事件_Vue 3 自定义事件
  7. Linux安装RabbitMQ及问题
  8. 100亿+数据量,每天50W+查询,携程酒店数据智能平台实践
  9. ML-Agents案例之看图配对
  10. Few Shot Vid2Vid 论文心得
  11. Windows10息屏快的问题解决办法(在更改屏幕和睡眠时间无效的情况下)
  12. 利用useRef hooks 解决 定时器关闭不到的问题
  13. Python爬虫进阶之爬取篮球赛数据
  14. java计算机毕业设计冠军体育用品购物网站MyBatis+系统+LW文档+源码+调试部署
  15. 【ML05】Feature Scaling 特征缩放
  16. 考研数学-初数1主讲人:郑小松-2020年07月04日
  17. 2021年最新Web前端面试题精选大全及答案
  18. 如何提高本地文件上传至百度云的速度_【软件推荐】满速下载软件,说出来你可能不信最高速度达到150m/s...
  19. 同指数幂相减公式_指数幂的指数幂的运算法则
  20. 手机便签内容如何保存到电脑

热门文章

  1. 计算机音乐安顺学院教务网络管理系统,安顺学院教务网络管理系统http://jwxt.asu.edu.cn/jwweb/...
  2. 为什么在css中设置了font-family: 微软雅黑没有用
  3. 大连东软信息学院计算机排名,一骑绝尘!大连东软信息学院排名怎么样?
  4. 香港公司、香港离岸公司和岛屿公司3者区别
  5. 主成分分析——PCA降维Python实现及碎石图
  6. Flutter网络请求Dio库的使用及封装
  7. 台式计算机蓝屏代码08e,Win8.1电脑开机出现蓝屏代码0x000008e如何解决
  8. 【canvas 背景色】透明背景转换成白色
  9. php 的pre,pre标签的作用是什么
  10. electron+vue3全家桶+vite项目搭建【九】集成vite-plugin-mock-server 模拟后端请求