word2vec原理_word2vec论文阅读笔记
word2vec算是NLP中的经典算法,之前在课程中简单的学过,但面试时经不起深问。痛定思痛,参考Jack(@没搜出来)的总结,笔者重点阅读了Mikolov的原始论文[1]和Xin Rong的详细推导[2]。
Jack:word2vec 相关论文zhuanlan.zhihu.com
Mikolov的原始论文主要从时间复杂度论证了word2vec的效率,但对于其中原理和具体训练方法描述却相对较少,本文将以Xin Rong的推导为主(最后行文可能像是这篇论文的中文缩略版)。
一、bigram情形
笔者认为这是word2vec模型的核心,即用一个词预测另一个词共现概率(显然这两个词的次序、相隔距离都是可以叠加设置的,从而转换成word2vec的两种方法——CBOW和skip-gram)。其框架图如下所示:
图中V是词的数量,即词独热编码的长度,N为隐藏层变量的维度,在这里等于所要训练词向量的维度,该模型相当于用词向量为隐含层,从而从输入层(上下文词)的独热编码预测输出层(目标词)的独热编码。计算隐含层的权重矩阵记为W,从隐含层计算输出层的权重矩阵记为W'。接下来我们需一步步推导其更新方程。
首先从输入层到隐藏层的公式为:
这里可以看到,由于x是独热编码(即对应该向量只有词id位置的值为1,其余值均为0),隐含层相当于取出W(维度为V×N)中词id对应的行向量,这里定义为输入词的向量
对于隐含层到输出层,定义了另一个权重矩阵W'(ps:在源码实际训练中,W'是W转置,共享词的信息),维度为N×V,可理解为词id位置对应的列向量为输出词的词向量。通过隐藏层与输出词词向量作内积,可以认为是隐藏层(此处不使用输入词向量是因为在后续CBOW时,h不等于输入词向量,而是上下文多个词向量平均值)与实际输出的余弦相似度。从而得到每个词与当前位置的匹配度为:
其中,下标j即为输出词的id,
为了将匹配度转化为对应词出现的概率分布,记作y,使用了经典的softmax函数,从而将其映射到0-1之间,这里不列出公式了。模型的目标是使对应真实输出词的匹配度最高(即出现概率最大),从而可以得出目标函数,同时其相反数为损失函数:
其中上标*表示实际对应的情况,即
之后就是对损失函数进行求偏导,从而得出训练时更新方程,分为两部分:
- 隐含层到输出层的权重;
- 输入层到隐含层的权重。
对于第一部分,依靠链式法则进行计算,首先计算损失函数对于匹配度的偏导(预测误差):
其中,
之后通过链式法则,即可计算出代价函数关于W'的偏导:
从而得出:
接着计算代价函数对于W的偏导,首先计算代价函数关于隐含层的偏导:
这里定义EH(维度为N的向量)为W'所有词向量关于预测误差
从而,同样通过链式法则计算代价函数关于W的偏导:
从而得到更新函数为:
由于x是独热编码的缘故,事实上只需更新输入函数的那一行,至此word2vec最核心的部分bigram用单个词上下文信息预测某个词的证明完成,加下来分别增加输入词数量(CBOW)和输出词数量(skip-gram)。
二、CBOW方法
CBOW方法是用词上下文k个词来预测该位置词的信息(通常是该词前k/2个词,该词后k/2个词,但从推导来看由于权重不同,对于窗口和词位置的关系并没有太大关系,前后词数不一定要对称),预测模型的框架图如下所示:
与bigram情况的主要不同在于输入词由一个变为C个,隐含层计算公式为这些词的等权平均数:
由于隐含层到输出层过程相较于bigram情形没有任何变化,对于W'的更新函数也完全相同:
而对于输入层到隐含层过程,可以对于C个输入词分别按照bigram过程进行计算后取平均值,因而可以得出输入层到隐含层权重的更新函数为:
笔者认为可以修改bigram情形中输入词的定义,将其改为输入上下文词独热编码的等权平均值,从而完全套用bigram情形中的公式:
三、Skip-Gram方法
Skip-Gram方法是用中心词预测输出上下文的概率,预测模型框架图如下所示:
与bigram情形的最大区别在于输出词由1个变为C个,从而从损失函数函数开始就要发生变化:
从而可看出等于C次bigram损失函数加和,由此,根据bigram情形损失函数对于单一匹配度的偏导,定义对于上下文输出匹配度的偏导(预测误差):
根据链式法则,损失函数关于隐含层到输出层权重的偏导为:
从而得出隐含层到输出层权重的更新函数为:
同时更新定义EH(维度为N的向量)为W'所有词向量关于预测误差
从而输入层到隐含层的更新函数仍然适用:
笔者认为由推导过程中也可以看出,skip-gram算法虽然输出层的权重是相同的,也可重新定义y为C个上下文词的独热编码等权平均数,从而完全套用bigram情形中的公式(和原公式相比只是更新项相差C倍):
ps: 对于word2vec原理推导应该算完成了,但对于具体计算过程的细节仍存在一些疑问,比如层次softmax和负采样两种计算技巧,留个坑,如果有机会写源码阅读笔记再写。
参考
- ^Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient estimation of word representations in vector space.ICLR Workshop, 2013 https://www.researchgate.net/publication/234131319_Efficient_Estimation_of_Word_Representations_in_Vector_Space
- ^Rong X. word2vec parameter learning explained[J]. arXiv preprint arXiv:1411.2738, 2014. https://www.researchgate.net/publication/268226652_word2vec_Parameter_Learning_Explained
word2vec原理_word2vec论文阅读笔记相关推荐
- 论文阅读笔记——VulDeePecker: A Deep Learning-Based System for Vulnerability Detection
本论文相关内容 论文下载地址--Engineering Village 论文中文翻译--VulDeePecker: A Deep Learning-Based System for Vulnerabi ...
- keras cnn注意力机制_2019 SSA-CNN(自注意力机制)目标检测算法论文阅读笔记
背景 <SSA-CNN Semantic Self-Attention CNN for Pedestrian Detection>是2019 的工作,其作者来自于南洋理工.这篇文章主要是做 ...
- LiDAR-based Panoptic Segmentation via Dynamic Shifting Network(论文阅读笔记)
LiDAR-based Panoptic Segmentation via Dynamic Shifting Network(论文阅读笔记) 环形扫描骨干网络.动态漂移.一致性驱动的融合 一.重点内容 ...
- 论文阅读笔记--Aesthetics-Driven Stereoscopic 3-D Image Recomposition With Depth Adaptation-2018
论文阅读笔记:美学引导的带有深度适应的立体3D图像重构 I.介绍 II.相关工作 A.单目(2D)图像处理 1)美学驱动的重构(Recomposition) 2)图像分割与抠图(Segment and ...
- 论文阅读笔记:Improving Attacks on Speck32 / 64 using Deep Learning
论文阅读笔记:Improving Attacks on Speck32 / 64 using Deep Learning 本文通过神经网络利用了减少轮数的 Speck 的差分性质.为此,作者对神经网络 ...
- 点云配准论文阅读笔记--(4PCS)4-Points Congruent Sets for Robust Pairwise Surface Registration
目录 点云配准系列 写在前面 Abstract摘要 1 Introduction引言 2 Background研究背景 RANSAC Randomized Alignment 3 Approximat ...
- 虚假新闻检测的论文阅读笔记——sigir2021:User Preference-aware Fake News Detection
文章目录 1.虚假新闻检测的相关简介 2.本篇论文引言 3.模型介绍 3.1.内生偏好编码器 3.2.外生内容编码器 3.3.二者信息融合 4.实验 4.1.各模型的实验结果 4.2.消融实验 5.结 ...
- 论文阅读笔记(二)——牛的人脸识别,能做到吗?
论文阅读笔记(二)--牛的人脸识别,能做到吗? 论文简介 论文中文翻译:<牛的人脸识别,能做到吗?> 论文名称:<Face Recognition of Cattle: Can it ...
- [论文阅读笔记] Are Meta-Paths Necessary, Revisiting Heterogeneous Graph Embeddings
[论文阅读笔记] Are Meta-Paths Necessary? Revisiting Heterogeneous Graph Embeddings 购物返利 www.cpa5.cn 本文结构 解 ...
最新文章
- sql,nolock
- 启动文件需要做的工作
- |NOIOJ|动态规划|8462:大盗阿福
- jsp java代码报错,求助!JSP代码中调java服务出参返回正常 weblogic报错BEA-101017
- Mac上安装homebrew(类似于Linux上的apt-get)
- 创建与管理Oracle的分区表和本地索引
- 微信小游戏 - 理论介绍 - 账号注册 - 开发前准备
- js高级学习笔记(b站尚硅谷)-5-回调函数
- C# 程序图标设置/winform 图标
- 360路由器的虚拟服务器设置,360路由器无线万能中继设置教程图解
- 电脑上个别按键失灵可能原因
- 地方科技局重点科技项目在线申报管理系统
- 无人驾驶卡车开上干线,嬴彻科技、主线科技们如何拿下产业化赛点?
- 一度智信:拼多多探路知识普惠
- python 腾讯视频签到_Python处理腾讯视频
- 异步四位二进制计数器逻辑图
- 35 款 JavaScript 图形图表库
- The return type of function ‘main(WordCountToObject.java:28)‘ could not be determined automatically,
- 市场分析(一)——现今各大在线英语词典比较
- VC++环境OpenSSL安装
热门文章
- Debugging into .NET Core源代码的两种方式
- 单元测试02:Open-Cover安装与使用
- 中标麒麟linux卸载qt,国产化 银河麒麟编译Qt程序的问题汇总 | 阿拉灯
- 用python来获取Github IP地址
- 【EPS精品教程】基于DOM和DSM创建垂直模型、加载垂直模型
- Windows之Fiddler抓HTTP和HTTPS请求
- Android之获取指定目录下的所有特殊文件名字
- mysql为什么添加索引_当我添加新索引时,为什么MySQL中索引的基数保持不变?
- sq工程师是做什么的_算法工程师为什么成天做数据,都做哪些数据?
- jq取第一个子元素为select_【转】jquery如何获取第一个或最后一个子元素?