Word2Vec原理详解

  • 摘要
  • Word2Vec的Intuition
  • 表示单词间的相似度
  • Word2Vec的模型
  • Negative Sampling
  • 参考资料

摘要

一般来说表示词向量最简单的方式就是 one-hot encoding,这种方法的优势显而易见:处理起来十分方便。但是其缺点也十分明显:表示容量太低,在词典大小十分庞大是容易造成维度灾难,无法表示语义等等,Word2Vec词向量编码技术很大程度上解决了one-hot encoding的一部分问题。Word2Vec在大量的语料库上训练,得到单词的向量表示(Distribution representation),与one-hot encoding的稀疏表示不同,word2vec训练得到的向量每一位都是实值,可以大大缩减向量维度,并且可以通过距离计算得到单词之间的相似度。

Word2Vec的Intuition

主观上来讲,在一篇文章中相近的单词语义上更为接近,即中心词与其上下文单词的语义接近,这里的中心词和上下文单词是Word2Vec中的两个概念:中心词就是每次训练时我们关注的词;上下文单词是中心词前window size(window size是一个超参数)个单词和中心词后window size个单词的集合,一共2 * window size个单词(忽略中心词前面或后面没有单词的情况)。

表示单词间的相似度

我们的假设是,中心词与它的上下文单词语义接近,也就是学得的向量相似度大,那么这里如何定义相似度呢?我们采用内积的方式表示相似度。这里我们定义 www 表示中心词,ccc 表示相应的上下文单词,VwV_{w}Vw​ 表示中心词的词向量, VcV_{c}Vc​ 表示中心词的词向量,那么他们之间的内积VwTVcV_{w}^{T}V_{c}VwT​Vc​ 相比于VwV_{w}Vw​ 与其他非上下文单词的内积要大,也就是中心词和其上下文单词的相似度更大。进一步我们定义条件概率 P(c∣w)=exp(VwTVc)∑c′∈vocabexp(VwTVc′)P(c\ | \ w) = \frac{exp({V_{w}^{T}V_{c}})}{\sum\limits_{c^{'}\in{vocab}}exp(V_{w}^{T}V_{c^{'}})}P(c ∣ w)=c′∈vocab∑​exp(VwT​Vc′​)exp(VwT​Vc​)​ 这个公式应该也十分好理解,就是一个简单的softmax。至此我们已经定义了单词间的相似度和给定中心词,上下文单词的条件概率。

Word2Vec的模型

Word2Vec采用了两种模型,CBOW和Skip-Gram,在实践中,Skip-Gram要更加常用。这两种模型都十分的简单直接。
简单来说,CBOW是利用上下文单词预测中心词,Skip-gram使用中心词预测上下文单词。最后输出的概率就是上文提到的softmax。训练过程也很直接,label是中心词的上下文单词,反向传播就可以训练出词向量表示。
但是这种训练方法有显而易见的缺点,计算softmax的分母时,我们需要遍历整个词典,如果词典非常大的话,就会造成训练十分缓慢,这时我们需要采用一种计算复杂度更小的近似的方式来进行训练。

Negative Sampling

作者采用了两种近似方式,这里主要阐述比较常用的negative sampling方式。
原始的目标函数可以写作:θ=arg max⁡θ∏w∈corpus∏c∈context(w)P(c∣w;θ)\theta=\argmax \limits_{\theta}\prod\limits_{w\in{corpus}}\prod\limits_{c\in_{context(w)}}P(c\ |\ w;\ \theta)θ=θargmax​w∈corpus∏​c∈context(w)​∏​P(c ∣ w; θ),进一步可以取对数转换为连加形式:θ=arg max⁡θ∑w∈corpus∑c∈context(w)logP(c∣w;θ)\theta=\argmax \limits_{\theta}\sum\limits_{w\in{corpus}}\sum\limits_{c\in_{context(w)}}logP(c\ |\ w;\ \theta)θ=θargmax​w∈corpus∑​c∈context(w)​∑​logP(c ∣ w; θ)
这里的θ\thetaθ 就是要求的词向量矩阵。由于求条件概率P(c∣w)P(c\ | \ w)P(c ∣ w) 要遍历整个词典,计算复杂度过高,所以这种方法在实践上效果并不好。负采样是一种能够有效降低计算复杂度的方式。
负采样就是每次迭代时,并不遍历整个词典,而是采样一定数量的负样本进行训练(也就是名字负采样的由来)。我们先看一下负采样的目标函数,对照一下原始的目标函数。
KaTeX parse error: Limit controls must follow a math operator at position 14: \theta=argmax\̲l̲i̲m̲i̲t̲s̲_{\theta}\sum\l…
这里的σ\sigmaσ 就是sigmoid函数,DpD_{p}Dp​表示中心词和上下文单词对的集合,DnD_{n}Dn​表示中心词和非上下文单词对的集合。www表示中心词, ccc表示中心词的上下文单词, c′c^{'}c′表示非上下文单词,(w,c)(w, c)(w,c)表示正样本单词对,(w,c′)(w, c^{'})(w,c′)表示负样本单词对。
这里使用了逻辑回归的思想,我们把中心词和其上下文单词对作为正样本,我们希望他们的内积越大越好,也就是σ(VwTVc)\sigma(V_{w}^{T}V_{c})σ(VwT​Vc​) 越大越好,中心词和其上下文单词被分为正样本的概率也就越大;相反,每次迭代过程,我们从负样本集合DnD_{n}Dn​ 中采样一定数量的负样本,我们希望负样本单词对中心词和非上下文单词的内积越小越好,也就是σ(−VwTVc′)\sigma(-V_{w}^{T}V_{c^{'}})σ(−VwT​Vc′​) (其为负样本的概率)越大越好。这与目标函数是一致的,每次迭代过程就是做了一次逻辑回归分类,期望模型能正确区分正负样本。这样每次随机梯度下降计算梯度的代价非常小,大大加快了训练的速度。

参考资料

Word2Vec详解
Distributed Representations of Words and Phrases
and their Compositionality

Word2Vec原理详解相关推荐

  1. word2vec原理详解及实战

    目录 1)前言 1.1 语言模型 1.2N-gram模型 1.3词向量表示 2)预备知识 2.1 sigmoid函数 2.2 逻辑回归 2.3贝叶斯公式 2.4 Huffman编码 3)神经网络概率语 ...

  2. 【转载】word2vec 中的数学原理详解

    文章目录 一.前言 二.预备知识 三.背景知识 四.基于 Hierarchical Softmax 的模型 五.基于 Negative Sampling 的模型 六.若干源码细节 原文传送门: wor ...

  3. 转:word2vec 中的数学原理详解

    1,目录和前言 https://blog.csdn.net/itplus/article/details/37969519 2,预备知识:逻辑回归.贝叶斯公式.霍夫曼树 https://blog.cs ...

  4. Word2vec结构详解及原理推导

    目录 统计语言模型 神经概率语言模型 Word2vec Hierarchical Softmax Huffman 树 CBOW 和 Skip-gram Negative Sampling CBOW 和 ...

  5. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  6. LVS原理详解(3种工作方式8种调度算法)--老男孩

    一.LVS原理详解(4种工作方式8种调度算法) 集群简介 集群就是一组独立的计算机,协同工作,对外提供服务.对客户端来说像是一台服务器提供服务. LVS在企业架构中的位置: 以上的架构只是众多企业里面 ...

  7. jQuery中getJSON跨域原理详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp28 jQuery中getJSON跨域原理详解 前几天我再开发一个叫 河蟹工 ...

  8. nginx配置文件及工作原理详解

    nginx配置文件及工作原理详解 1 nginx配置文件的结构 2 nginx工作原理 1 nginx配置文件的结构 1)以下是nginx配置文件默认的主要内容: #user nobody; #配置用 ...

  9. EMD算法之Hilbert-Huang Transform原理详解和案例分析

    目录 Hilbert-Huang Transform 希尔伯特-黄变换 Section I 人物简介 Section II Hilbert-Huang的应用领域 Section III Hilbert ...

最新文章

  1. wxpython分割窗口_wxPython实现分隔窗口
  2. 【GNN】一份完全解读:是什么使神经网络变成图神经网络?
  3. 【 C 】彻底学会字符串常量
  4. 圣诞日记2010-12-25:认清形势,看清方向,正确选择,努力拼搏(更新 )
  5. ubuntu下使用filezilla上传文件权限问题(open for write: permission denied)
  6. php封装数据库操作类,php简单数据库操作类的封装
  7. 高数.........
  8. NumPy Cookbook 带注释源码 五、NumPy 音频和图像处理
  9. 丰胸神器?网友曝椰树椰汁新广告低俗 疑似虚假宣传被调查...
  10. 募捐:请帮助一名 Linux 程序员的女儿
  11. Hive Hooks介绍
  12. Fiddler使用AutoResponder进行本地文件和线上文件的映射
  13. 手机端仿ios的银行下拉脚本五
  14. PHP 实现文件下载实例
  15. AOJ-759 会绕圈的数
  16. 微信小程序云开发教程-云开发对微信小程序带来的变革作用
  17. 简单的网站项目开发流程 .
  18. win系统连接交换机并设置固定ip地址
  19. (跨模态)AI作画——使用stable-diffusion生成图片
  20. 服务器名称指示SNI

热门文章

  1. Saltstack练手之部署lamp架构其一: 实现效果
  2. 从和老婆吵架看项目管理
  3. android+drawrect边框,drawRect:绘图
  4. 1042: 【入门】求1992个1992的乘积的末两位数是多少
  5. 刘强东新建三大事业群背后的野心,要在技术上战胜阿里巴巴
  6. 揭秘捷码运行引擎到底是如何工作的?
  7. 什么是SQL注入攻击?列举抵御SQL注入攻击的方式?
  8. 神兽保佑 码无BUG
  9. 动态网站设计的色彩应用
  10. 写给新手,从不懂到入门,一只老鸟的嵌入式入门心得