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)。其框架图如下所示:

8ab6bb328c6b2fc193c6f393226765c7.png

图中V是词的数量,即词独热编码的长度,N为隐藏层变量的维度,在这里等于所要训练词向量的维度,该模型相当于用词向量为隐含层,从而从输入层(上下文词)的独热编码预测输出层(目标词)的独热编码。计算隐含层的权重矩阵记为W,从隐含层计算输出层的权重矩阵记为W'。接下来我们需一步步推导其更新方程。

首先从输入层到隐藏层的公式为:

这里可以看到,由于x是独热编码(即对应该向量只有词id位置的值为1,其余值均为0),隐含层相当于取出W(维度为V×N)中词id对应的行向量,这里定义为输入词的向量

对于隐含层到输出层,定义了另一个权重矩阵W'(ps:在源码实际训练中,W'是W转置,共享词的信息),维度为N×V,可理解为词id位置对应的列向量为输出词的词向量。通过隐藏层与输出词词向量作内积,可以认为是隐藏层(此处不使用输入词向量是因为在后续CBOW时,h不等于输入词向量,而是上下文多个词向量平均值)与实际输出的余弦相似度。从而得到每个词与当前位置的匹配度为:

其中,下标j即为输出词的id,

即第j个输出词对应的词向量,是W'的第j列。

为了将匹配度转化为对应词出现的概率分布,记作y,使用了经典的softmax函数,从而将其映射到0-1之间,这里不列出公式了。模型的目标是使对应真实输出词的匹配度最高(即出现概率最大),从而可以得出目标函数,同时其相反数为损失函数:

其中上标*表示实际对应的情况,即

表示实际输出词对应到模型中的匹配度。

之后就是对损失函数进行求偏导,从而得出训练时更新方程,分为两部分:

  1. 隐含层到输出层的权重;
  2. 输入层到隐含层的权重。

对于第一部分,依靠链式法则进行计算,首先计算损失函数对于匹配度的偏导(预测误差):

其中,

对应
部分,求导后为预测的概率分布;而
对应
的定义为当且仅当下标为
时为1,其余时候都为0。(ps:我认为将记为
可能更直观明了一些。)

之后通过链式法则,即可计算出代价函数关于W'的偏导:

从而得出:

接着计算代价函数对于W的偏导,首先计算代价函数关于隐含层的偏导:

这里定义EH(维度为N的向量)为W'所有词向量关于预测误差

为权重的和,即:

从而,同样通过链式法则计算代价函数关于W的偏导:

从而得到更新函数为:

由于x是独热编码的缘故,事实上只需更新输入函数的那一行,至此word2vec最核心的部分bigram用单个词上下文信息预测某个词的证明完成,加下来分别增加输入词数量(CBOW)和输出词数量(skip-gram)。

二、CBOW方法

CBOW方法是用词上下文k个词来预测该位置词的信息(通常是该词前k/2个词,该词后k/2个词,但从推导来看由于权重不同,对于窗口和词位置的关系并没有太大关系,前后词数不一定要对称),预测模型的框架图如下所示:

bb72f753d49738867025d89e6cf9155d.png

与bigram情况的主要不同在于输入词由一个变为C个,隐含层计算公式为这些词的等权平均数:

由于隐含层到输出层过程相较于bigram情形没有任何变化,对于W'的更新函数也完全相同:

而对于输入层到隐含层过程,可以对于C个输入词分别按照bigram过程进行计算后取平均值,因而可以得出输入层到隐含层权重的更新函数为:

笔者认为可以修改bigram情形中输入词的定义,将其改为输入上下文词独热编码的等权平均值,从而完全套用bigram情形中的公式:

三、Skip-Gram方法

Skip-Gram方法是用中心词预测输出上下文的概率,预测模型框架图如下所示:

3d039d765e95fee95bd56bfc2bfc6fa7.png

与bigram情形的最大区别在于输出词由1个变为C个,从而从损失函数函数开始就要发生变化:

从而可看出等于C次bigram损失函数加和,由此,根据bigram情形损失函数对于单一匹配度的偏导,定义对于上下文输出匹配度的偏导(预测误差):

根据链式法则,损失函数关于隐含层到输出层权重的偏导为:

从而得出隐含层到输出层权重的更新函数为:

同时更新定义EH(维度为N的向量)为W'所有词向量关于预测误差

为权重的和,即:

从而输入层到隐含层的更新函数仍然适用:

笔者认为由推导过程中也可以看出,skip-gram算法虽然输出层的权重是相同的,也可重新定义y为C个上下文词的独热编码等权平均数,从而完全套用bigram情形中的公式(和原公式相比只是更新项相差C倍):

ps: 对于word2vec原理推导应该算完成了,但对于具体计算过程的细节仍存在一些疑问,比如层次softmax和负采样两种计算技巧,留个坑,如果有机会写源码阅读笔记再写。

参考

  1. ^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
  2. ^Rong X. word2vec parameter learning explained[J]. arXiv preprint arXiv:1411.2738, 2014. https://www.researchgate.net/publication/268226652_word2vec_Parameter_Learning_Explained

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GraphQL:来来来,Union

Union就是把不相干的一些数据实体,合并起来,一起供外部查询。不用像webapi,完成查询不同的数据,需要多次请求。一次请求,获取多样数据,减少请求次数,这也是GraphQL的优势之一。怎么弄&#xff0…

每个程序员都应该知道的基础数论

这篇文章讨论了数论中每个程序员都应该知道的几个重要概念。本文的内容既不是对数论的入门介绍,也不是针对数论中任何特定算法的讨论,而只是想要做为数论的一篇参考。如果读者想要获取关于数论的更多细节,文中也提供了一些外部的参考文献&…

powerbi视觉对象_玩转Power BI的图片可视化

​制作可视化报告时,为了展示效果,有时候需要用图片来展示,在 Power BI 中,关于图片的自定义视觉对象主要有下面三个,利用他们可以很轻松的进行图片可视化。下面来看看这些视觉对象的效果。样本数据如下:为…

.gpg 进程 linux,小知识之Linux系统中的最大进程数,最大文件描述,最大线程数...

今天来了解一下linux里面的一些小知识:(一)Linux系统中最大可以起多少个进程?(1)32位系统中最多可以起32768个进程(2)64位系统中最多可以起2的22次方(4194304)约420万个如何查看linux系统默认的最大进程数,这里以centos7(x64)作为例子:[roote…

东南大学计算机网络_东南大学,2020年东南大学高考录取分数线分析

各位读者大家好,今天给大家介绍的是南京重点大学—东南大学。小编一直从事高等教育领域的写作,感兴趣的读者可以关注一下小编~1.学校基础东南大学,简称“东大”,是中华人民共和国教育部直属、中央直管副部级建制的全国重点大学&am…

Goodbye 2020,Welcome 2021 | 沉淀 2021

引言2021年,已开启二月的篇章,农历新年也张灯结彩而来,只不过要留守过年。在这辞旧迎新之际,踏入而立之年之时,正是算账的好时候,数一数今年的成长,讲一讲来年的期望,最重要的还是要…

试着翻译24小时自学SQL第四版

最近发现自己在SQL方面的功课学的很不到家,就饿补下了,就上网找了这本 Sams Teach Yourself SQL in 24Hours 这本书,感觉还是不错的而且都到第四版了,翻译了下目录感觉还是很值得学习的,悔不该在大三的时候没有好好的学好数据库啊,现在出来工作了感觉这方面是所有程序的基础,作…

python变量的作用_python 变量的作用范围

python 的变量作用域分三种 1: local 指当前作用域 通过locals() 能获取该命名空间的对象的dict 2:global 对应某个 .py 模块的作用域 通过globals() 能获取该命名空间的对象的dict 3:builtin 最顶层的作用域。 每次执行一个函数时, 就会创建新的局部命名空间。 解…

程序员必须知道的十大基础实用算法及其讲解

本文盘点程序员必须知道的十大基础实用算法及其讲解。 算法一:快速排序算法 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(nlogn) 次比较。在最坏状况下则需要Ο(n2) 次比较,但这种状况并不常见。事实上&#…

sql 日期和当前日期时间差_详解PostgreSQL 如何获取当前日期时间

概述开发数据库应用或者调试代码时,经常需要获取系统的当前日期和时间,今天主要看一下 PostgreSQL 中提供的相关函数。一、当前日期CURRENT_DATECURRENT_DATE 函数用于获取数据库服务器的当前日期:postgres# SELECT CURRENT_DATE;调用该函数时…

聊聊如何构建自驱团队(3)

聊聊如何构建自驱团队(3)“道“和”术“对于技术出生的管理者在进行问题思考时,总会深陷“术”和“道”两层维度问题的困扰:“道”就是平时大家提到的理论实践,而“术”则是与实际相匹配的一些方法。敏捷项目管理为构建…

linux c 数据库访问框架,linux c 开发通用结构,框架

了解其它语言的框架例:java Struts1、Struts2、Hibernate、Mybatis、Ibatis、Spring 等等,利用这些框架能够快速的开发出稳定的应用程序,在java中这些框架的功能主要提供一些浓缩版的功能。仔细思索:其它语言的通用结构?例&#x…

python list常用方法_Python中列表(List)的基本用法

一、列表的创建 list((3, 5, 7, 9, 11)) list(range(1, 10, 2)) """ 字符串、集合、字典的键、字典的键:值对转列表 """ list(hello, world) list({3, 7, 8}) list({a:3, b:9, c:78}) list({a:3, b:9, c:78}.items()) ""&q…

我们只知大势将至,却不知未来已来

❈ 凯文•凯利 《必然》: 未来的一切事物的生命都将是无穷尽的升级,而且迭代的速度不断的在加速。包括看得见的事物,也包括看不见的审美观和价值观。无论你使用一项工具的时间有多长,不断的升级都会把你变成一个菜鸟,从…

c#爬虫-1688官网自动登录

背景在1688官网里面有很多信息是需要登录才能看得到的,比如商家的联系电话等等。那么我们在抓取它的网页的时候,肯定是需要维持登录状态才能得到对应的内容。这里面就会涉及到自动登录的问题。登录地址https://login.1688.com/member/signin.htm自动登录…

tensorrt轻松部署高性能dnn推理_部署环境之:tensorRT的插件

TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxnet、Pytor…

linux网卡驱动 pdf,Linux下网卡驱动程序.pdf

zekairecv 于 2015-10-04 00:58:57发表:谢谢weilee1 于 2015-04-19 17:41:05发表:看看雪语阑风 于 2014-12-04 11:03:39发表:楼主好人Doctor易 于 2014-10-08 13:06:25发表:也不说网卡型号吗wzj3521787 于 2014-09-12 11:12:10发表:这是指网卡驱动编程还是编译lcdstrongman_hw …

python数学计算_初学者Python学习笔记--数学计算

四则运算 加减乘除 1 2 3 10 - 6 4 5 * 5 25 20 / 5 4.0 3 ** 3 27 取整计算 13//3 4 取余数计算 13%3 1 计算顺序,括号>乘除>加减 4 5 - (36) * 2 -9 特殊赋值,可以用_来分割数字,简便识别 num 111_222_333 num 111222333 四舍五入…

做一个网站多少钱?

「一辆车子多少钱?一个房子多少钱?」 这问题在工程师或设计师的眼里就如「一辆车子多少钱?一个房子多少钱?」,这个问题实在空泛到一个让人无法言语的境界,这也是我最常被问到的问题「做一个网站多少钱?」。…

[Abp 源码分析]多租户体系与权限验证

点击上方蓝字关注我们0.简介承接上篇文章我们会在这篇文章详细解说一下 Abp 是如何结合 IPermissionChecker 与 IFeatureChecker 来实现一个完整的多租户系统的权限校验的。1.多租户的概念多租户系统又被称之为 Saas ,比如阿里云就是一个典型的多租户系统&#xff0…