word2vec原理推导

word2vec作为神经概率语言模型的输入,其本身其实是神经概率模型的副产品,是为了通过神经网络学习某个语言模型而产生的中间结果。具体来说,“某个语言模型”指的是“CBOW”和“Skip-gram”。具体学习过程会用到两个降低复杂度的近似方法——Hierarchical Softmax或Negative Sampling。两个模型乘以两种方法,一共有四种实现。

一、CBOW

1.一个单词上下文

2.参数更新

3.多个单词上下文

二、Skip-gram

1.网络结构

2.参数更新

三、优化

原始的CBOW模型和Skip-Gram 模型的计算量太大,非常难以计算。

  1. 模型在计算网络输出的时候,需要计算误差 。对于CBOW 模型,需要计算V个误差(词汇表的大小),对于 Skip-Gram 模型,需要计算CV个误差。 另外,每个误差的计算需要用到 softmax 函数,该 softmax 函数涉及到O(V)复杂度的运算:$\sum _{j=1} ^ V exp(u_j)$ 。
  2. 每次梯度更新都需要计算网络输出。 如果词汇表有 100万 单词,模型迭代 100 次,则计算量超过 1 亿次。

虽然输入向量的维度也很高,但是由于输入向量只有一位为 1,其它位均为 0,因此输入的总体计算复杂度较小。

word2vec 优化的主要思想是:限制输出单元的数量。

事实上在上百万的输出单元中,仅有少量的输出单元对于参数更新比较重要,大部分的输出单元对于参数更新没有贡献。

有两种优化策略:

  • 通过分层softmax来高效计算softmax函数。
  • 通过负采样来缩减输出单元的数量。

1.分层softmax

  分层 softmax 是一种高效计算 softmax 函数的算法。 经过分层 softmax 之后,计算 softmax 函数的算法复杂度从O(V)降低到O(logV) ,但是仍然要计算V-1个内部节点的向量表达 。

(1)CBOW

(2)Skip-gram

2.负采样

在网络的输出层,真实的输出单词对应的输出单元作为正向单元,其它所有单词对应的输出单元为负向单元。

  1. 正向单元的数量为1,毋庸置疑,正向单元必须输出。
  2. 负向单元的数量为V-1,其中V为词表的大小,通常为上万甚至百万级别。如果计算所有负向单元的输出概率,则计算量非常庞大。可以从所有负向单元中随机采样一批负向单元,仅仅利用这批负向单元来更新。这称作负采样。

负采样的核心思想是:利用负采样后的输出分布来模拟真实的输出分布。

参考链接:

【1】word2vec原理(一) CBOW与Skip-Gram模型基础

【2】word2vec原理推导与代码分析-码农场

【3】Hierarchical Softmax(层次Softmax) - 知乎

原文地址:https://www.cnblogs.com/nxf-rabbit75/p/11875847.html

时间: 2024-11-09 09:47:09

word2vec原理推导的相关文章

梯度优化、LR【原理+推导】

1   线性目标的梯度优化 损失函数: 算法1 : 批量梯度下降BGD 每次迭代使用所有样本来对参数进行更新. 损失函数: 代数形式: 矩阵形式: 更新: 代数形式伪代码:      矩阵形式伪代码: 算法2:随机梯度下降SGD 每次迭代使用一个样本来对参数进行更新. 一个样本的损失函数: 代数形式伪代码: 矩阵形式伪代码 #  python n_batch = 1 batch = np.random.choice(X.shape[0],n_batch) X_batch,y_batch = X[

网络编程(七):CAP原理推导和应用

在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性 (Consistency)(等同于所有节点访问同一份最新的数据副本) 可用性(Availability)(对数据更新具备高可用性) 网络分区容忍性(Partition tolerance)(以实际效果而言,分区相当于对通信的时限要求.系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A

word2vec原理

http://www.hankcs.com/nlp/word2vec.html http://www.cnblogs.com/peghoty/p/3857839.html word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了很多人的关注.由于 word2vec 的作者 Tomas Mikolov 在两篇相关的论文 [3,4] 中并没有谈及太多算法细节,因而在一定程度上增加了这个工具包的神秘感.一些按捺不住的人于是选

SVM数学原理推导

//2019.08.17 #支撑向量机SVM(Support Vector Machine)1.支撑向量机SVM是一种非常重要和广泛的机器学习算法,它的算法出发点是尽可能找到最优的决策边界,使得模型的泛化能力尽可能地好,因此SVM对未来数据的预测也是更加准确的. 2.支撑向量机SVM有两种:Hard Margin SVM和Soft Margin SVM,对于第一种严格的支撑向量机算法主要解决的是线性可分的数据问题,而第二种SVM是在第一种的基础上改进而来,可以解决普遍的数据问题,对于问题的线性可

flask的local的使用,以及local的原理推导

flask的local的使用以及原理的推导 import time from threading import Thread, local, get_ident # 获取线程的id # 这是使用local对象的写法,下面我们会分析推导local对象的原理 a = local() def task(arg): a.value = arg time.sleep(1) print(a.value) for i in range(10): t = Thread(target=task, args=(i,

Word2Vec原理及代码

一.分布式词表示(Distributed Represantation) Word2Vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,具体思想可由Tomas Mikolov的两篇论文一探究竟.此文是我对Word2Vec学习的总结.分布式词表示使用低维.稠密.连续的向量来表示词.它们通过“有指导”的方法直接学习词向量,也称为词嵌入(Word Embedding).它的发展历程由最初的LSA.LDA.NNLM发展到后来的诸如RNNLM.Word2Ve

线性回归算法原理推导

原文地址:https://www.cnblogs.com/Kctrina/p/9901961.html

机器学习——简单线性回归(原理推导+算法描述+代码实现)

实验环境:Python 3.6 编辑器:Jupyter Notebook 6.0.1 实验要求:可以调用numpy.pandas基础拓展程序包,不可以调用sklearn机器学 ——————————————————我是分割线喵———————————————————— ————————————(如果想要代码可以直接下拉到最后)———————————— 线性模型的一般形式:   向量形式: 线性模型的优点: 1.形式简单.易于建模 2.可解释性 3.是非线性模型的基础,可以在线性模型的基础上引入层级结

[白话解析] 带你一起梳理Word2vec相关概念

[白话解析] 带你一起梳理Word2vec相关概念 0x00 摘要 本文将尽量使用易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来说,运用感性直觉的思考来帮大家梳理Word2vec相关概念. 0x01 导读 1. 原委 本来只是想写Word2vec,没想到一个个知识点梳理下来,反而Word2vec本身只占据了一小部分.所以干脆就把文章的重点放在梳理相关概念上,这样大家可以更好的理解Word2vec. 为了讨论Word2vec,我们需要掌握(或者暂且当做已知)的先决知识点有: 独热编码 /