word2vec不算新,但是在工业界有广泛应用。该方法利用词在各滑动窗口的共现现象建模词的潜在关系,并最终得到词向量(word embedding)。如果两个词的embedding向量内积较大,则表示它们关系越近。主要参考的是aston zhang的dive into deep learning ,也结合了相关论文和优质博客, 补充一些自己的理解。

word2vec在其思想框架下提出了两个具体模型,即skip-gram和CBOW。刚开始看的时候以为是word2vec是一个具体算法,skip-gram/CBOW是其中的两个模块,实际上它们是word2vec思想框架下的两种独立的实现。

假设单词

有中心词
和 背景词
两种角色,分别用长度为d的词向量表示,其中i为单词表V中的单词下标。以
作为中心,取前后长度为m的窗口,截取一个2m+1个单词序列,并利用词在序列内的共现现象挖掘词的内在联系。以一定的步长滑动窗口得到训练集。窗口内除了
,其他词都定义为背景词。具体概念参考下图:
滑动窗口为2,蓝色背景为中心词,其他为背景词

根据最大似然的思想,既然我们看到了一篇文档,那么我们认为该文档的产生不是偶然。假设文档内各单词独立生成,则可人为定义每个单词的生成概率,进一步得到一篇文档的生成概率,并利用最大似然的思想最大化这个概率,利用滑动窗口内单词共现这一线索去求每个单词的两种词向量

。自此word2vec已完成使命。我们可以利用词向量去完成其他任务,例如聚类等。

跳字模型(skip-gram)

该模型定义已知中心词

生成背景词
的概率:
公式1

其中

的背景词向量,
的中心词向量,该式是一个softmax。假定滑动窗口大小为m,文本序列长度为T,
。则生成文本序列的似然函数为
公式2

等价的log损失函数为

公式3
公式4

其中

公式5

接下来是自己的一些理解。

  1. skip-gram如何与网络结构对应起来。简单来说,前半段(输入层-隐藏层)是查询过程,后半段(隐藏层-输出层)实际上就是一个softmax。
图1

先考虑从输入层到隐藏层的过程。输入层为

的onehot表示,隐藏层参数矩阵实际上是所有中心词的词向量,隐藏层输出的是
的词向量
,是一个“查字典的过程”。例子:

输入第四个词的onehot,与隐藏层矩阵相乘,最后输出第四个词作为中心词的词向量

。该过程表达的是“已知中心词为
”。

再考虑从隐藏层到输出层的过程。隐藏层的输出是

,输出层参数矩阵实际上是所有背景词的词向量,两者做向量内积,第i个输出单元为
的值,最后以softmax形式归一化。该过程表达的是“已知中心词为
,生成背景词
的概率”。例子:

2. 无标签的word2vec内部隐含的有监督学习。既然是NN,那么就存在前向传递和反向传播两个步骤。前者固定参数并计算中间结果,最终输出预测值。后者根据设定好的损失函数(目标函数),固定中间结果并更新参数。损失函数本质上是关于标签与预测值的函数

,所以标签是什么呢?标签其实就是
中的
。例子:

假设

为第四个单词,左边是softmax输出的预测概率,右边是
的onehot形式的label,由于
真的出现了,所以label为1。从模型的似然函数来看,实际上等价于交叉熵

其中

是y_label的第v各分量,因为是onehot形式,化简即得公式3。

3. 为什么一般只使用skip-gram的中心词向量作为词的表征向量

感性认识见此链接。我尝试在公式层面用反向传播过程去理解,但没想明白。以随机梯度下降为例,每个样本产生的损失函数见公式3

该公式是关于任一背景词向量

,
和中心词向量
的函数。反向传播时会更新所有背景词向量和指定中心词向量。每个样本每次反向传播时,背景词向量都会更新,那么为什么skip-gram不取背景词向量作为词的表征呢?

4. 条件概率

中是如何想到用背景词向量乘中心词向量
来对条件概率进行建模的

向量内积本质上就是cosine距离。从物理意义上来说,skip-gram建模的是中心词和背景词的共现,若中心词

和背景词
在滑动窗口内同时出现,则两者隐含语义越接近,向量内积就越大。

CBOW

该模型与skip-gram最大的不同在于条件概率的定义。不同于skip-gram,CBOW定义的是已知背景词等情况下生成中心词的条件概率。由于背景词有多个,一般求所有背景词的平均,然后用skip-gram相同的步骤求解。CBOW一般用背景词向量来表征单词。

CBOW训练速度要比skip-gram快,原因在于一个滑动窗口内只能产生一个sample,而skip-gram可以产生多个。比如滑动窗口含“the man loves his son”, loves为中心词。对于CBOW,只有一个样本,该样本以loves为中心词,“the man his son”作为背景词;对于skip-gram,有多个样本,即<love, the>, <love, man>, <love, his>, <love son>。

skip-gram效果更好一些,尤其是生僻字。原因有两个,一是上一段提到的样本的原因。love在skip-gram有四个sample,可以更新四次参数(假设使用随机梯度下降)。而使用CBOW时"the man his son"只有一个样本,更新一次参数。此外,CBOW用所有背景词的均值来表示背景词信息带入运算,也会损失精度。

参考资料

  1. 10.1. 词嵌入(word2vec) dive into deep learning, 第10.1节词嵌入。
  2. 论文 word2vec Parameter Learning Explained
  3. 穆文:[NLP] 秒懂词向量Word2vec的本质
  4. Word2Vec教程-Skip-Gram模型
  5. word2vec 中的SkipGram 和CBOW的区别

cbow word2vec 损失_word2vec个人总结-理论篇相关推荐

  1. cbow word2vec 损失_word2vec是如何得到词向量的?

    前言 word2vec是如何得到词向量的?这个问题比较大.从头开始讲的话,首先有了文本语料库,你需要对语料库进行预处理,这个处理流程与你的语料库种类以及个人目的有关,比如,如果是英文语料库你可能需要大 ...

  2. cbow word2vec 损失_Word2Vec的核心思想

    本文介绍Word2Vec是基于Skip-Gram架构,本文只介绍核心思想,具体权重更新参考论文. 本文与论文同时饮用较好! 理解Word2Vec核心思想的步骤是先理解one word -> on ...

  3. cbow word2vec 损失_Word2vec之CBOW

    一.Word2vec word2vec是Google与2013年开源推出的一个用于获取word vecter的工具包,利用神经网络为单词寻找一个连续向量看空间中的表示.word2vec是将单词转换为向 ...

  4. cbow word2vec 损失_词向量word2vec之CBOW算法

    词向量模型之CBOW模型的原理与实现 关于词向量模型word2rec,平台里只有skip-gram一个模型的代码实现,本项目将对word2rec算法的第二个模型--CBOW模型进行补充 此项目用于交流 ...

  5. cbow word2vec 损失_Skip-gram和CBOW知识点

    本文涉及的内容: 如何构造HuffMan树 Hierarchical Softmax似然函数 skip-gram似然函数 CBOW似然函数 Negative Sampling方法 一 HuffMan树 ...

  6. 【机器学习】Logistic Regression 的前世今生(理论篇)

    Logistic Regression 的前世今生(理论篇) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需转载,请附上 ...

  7. 基于pnpm + lerna + typescript的最佳项目实践 - 理论篇

    本文来自作者@金虹桥程序员 投稿 原文链接:https://juejin.cn/post/7043998041786810398 本系列文章分为两篇:理论篇和实践篇 理论篇:介绍pnpm(pnpm的特 ...

  8. YOLO系列专题——YOLOv3理论篇

    YOLOv3理论篇 YOLOv3实践篇 背景介绍: YOLOv3的基本思想与YOLOv2大致相同,过程如下: 将输入图像分成S*S个格子,每个格子负责预测中心在此格子中的物体: 每个格子预测B个bou ...

  9. YOLO系列专题——YOLOv2理论篇

    YOLOv2理论篇 YOLOv2实践篇 背景介绍: YOLOv1和同时期的SSD属于两个单阶段检测模型,以速度快著称.但是YOLOv1的诸多缺陷导致精准度较差.召回率低.估计YOLOv2参考了SSD或 ...

最新文章

  1. asp.net 页面中点击按钮后无反应的解决方法
  2. .net 门槛高不高之我见
  3. JEECG Framework 3.4.3 GA 版本发布
  4. 红旗linux的安装命令,红旗linux安装【处理思路】
  5. 2D Perlin噪点
  6. 电子计算机电缆用引流线,本质安全防爆电路用仪表计算机电缆
  7. 你不可不会的几种移动零的方法
  8. Opencv之Vs编译
  9. 为什么谋生是不道德的
  10. 宿舍计算机管理制度,【宿舍门禁系统能统计夜不归宿吗】_学生宿舍门禁系统使用管理规定(试行)...
  11. python 找色点击_[原创]python实现触动精灵引擎找色找字函数,为机器学习添加手脚...
  12. 流量星球:实操!利用“拼多多砍价群”日吸100+精准女粉引流技术
  13. Update join 修正数据
  14. h5/web 原生定位、高德、腾讯地图定位
  15. js发布订阅原理,代码解析
  16. excel生成动态进度条
  17. 深度学习(四):卷积神经网络(CNN)模型结构,前向传播算法和反向传播算法介绍。
  18. 如何用div+css布局页面
  19. Docker之Docker概述
  20. 蓝桥杯第八届真题 :迷宫

热门文章

  1. 重磅独家 | 腾讯AI Lab AAAI18现场陈述论文:用随机象限性消极下降算法训练L1范数约束模型
  2. MySQL 5.7 基于GTID的半同步复制
  3. 大剑无锋之分布式和微服务分别是什么?【面试推荐】
  4. hive 运行命令后FAILED: Execution Error, return code 137 from org.apache.hadoop.hive.ql.ex ec.mr.MapredLoc
  5. java基础---IO字符流
  6. 【Python】简单的apscheduler定时任务
  7. 【SQL Join】两个字段关联到同一个表,如何使用left join
  8. 【Java爬虫】我的第一个爬虫 -- 简单抓取网页源代码
  9. 小师妹学JavaIO之:MappedByteBuffer多大的文件我都装得下
  10. java 中的fork join框架