面试:关于word2vec的相关知识点Hierarchical Softmax和NegativeSampling

本文主要是介绍面试:关于word2vec的相关知识点Hierarchical Softmax和NegativeSampling,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、为什么需要Hierarchical Softmax和Negative Sampling

从输入层到隐含层需要一个维度为N×K的权重矩阵,从隐含层到输出层又需要一个维度为K×N的权重矩阵,学习权重可以用反向传播算法实现,每次迭代时将权重沿梯度更优的方向进行一小步更新。但是由于Softmax激活函数中存在归一化项的缘故,推导出来的迭代公式需要对词汇表中的所有单词进行遍历,使得每次迭代过程非常缓慢,由此产生了Hierarchical Softmax和Negative Sampling两种改进方法。

2.Hierarchical Softmax

层次softmax基本思想是将复杂的归一化概率分解为一系列条件概率乘积的形式: 

每一层条件概率对应一个二分类问题,通过逻辑回归函数可以去拟合。对v个词的概率归一化问题就转化成了对logv个词的概率拟合问题。

Hierarchical softmax通过构造一棵二叉树将目标概率的计算复杂度从最初的V降低到了logV的量级。但是却增加了词与词之间的耦合性。比如一个word出现的条件概率的变化会影响到其路径上所有非叶子节点的概率变化。间接地对其他word出现的条件概率带来影响。

哈夫曼树是带权路径和最短的最优二叉树,所以通过对词表中的词进行树构造,可以生成一个哈夫曼树,越接近根节点的词,其词频是越高的,我们需要优先更新,越向下,词频越低,更新频率也小一点,通过这样的方式就可以实现训练速度的加快。
具体来说,CBOW是上下文预测中间词,我们将上下文初始化的词嵌入进行求和得到一个X表示,哈夫曼树的每一个节点都是一个逻辑回归判断,从根节点开始,向下判断,直到落到目标节点上,此时把已走的路径的LR值相乘,即得到此时的条件概率,而训练的目标就是使得整个条件概率达到最大。

3.NegativeSampling

对于词袋大小V而言,如果V非常大,即使是构建哈夫曼树,复杂度也会很高,所以提出使用负采样。使用负采样的时候,可以明显感觉到训练速度快于层次softmax,而且不需要构建复杂的哈弗曼树。

什么是负样本呢?
  例如在CBOW中,我们是知道了C o n t e x t ( w ) Context(w)Context(w),然后来预测单词w ,那么这个时候,相对于C o n t e x t ( w ) Context(w)Context(w),我们提供一组结果,这些结果中包含正确的解w ,剩下的都是错误的解,那么w ww就是正样本,剩下的解就是负样本。

也就是说,正常情况下的预测结果是包括大量正样本和负样本的,但是由于词表V非常大,所以我们每次只随机采样一定数量个负样本参与到损失函数的计算中。

4.Hierarchical Softmax和Negative Sampling作用方面

负采样进行时,更倾向于采样高词频负样本,其对高词频更友好;
层级softmax虽然越接近root节点,词频会越高,但不代表其不对低频词进行更新,只是这样设计的层级softmax训练速度会加快,所以相比负采样策略,其对低词频更加友好。

CBOW上下文预测中间词时,是去尽可能的找到最为合适的中间词,很大可能性会对低词频词进行忽略;而SG中间词预测上下文时,低词频词同样会被模型考虑进去,这相当于给了低频词更多的学习机会,所以其对低频词更加友好。

这篇关于面试:关于word2vec的相关知识点Hierarchical Softmax和NegativeSampling的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088662

相关文章

嵌入式软件工程师应聘知识点

嵌入式软件工程师应聘 修改浏览权限 | 删除 数据结构(C语言)部分常考的知识点: 1、局部变量能、全局变量和静态变量 2、堆和栈 3、Const、volatile、define、typedef的用途 4、链表(比如链表的插入、删除和排序) 5、排序(考查冒泡法的较多) 6、可重入函数 、malloc函数 7、指针(常考函数指针,函数指针,数组指针,指针数组和

RecastNavigation之Poly相关类

Poly分成正常的Poly 和 OffMeshPoly。 正常的Poly 又分成 原始的Poly 和 Detail化的Poly,本文介绍这两种。 Poly的边分成三种类型: 1. 正常边:有tile内部的poly与之相邻 2.border边:没有poly与之相邻 3.Portal边:与之相邻的是外部tile的poly   由firstLink索引 得到第一个连接的Poly  通

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

SQL Server中,always on服务器的相关操作

在SQL Server中,建立了always on服务,可用于数据库的同步备份,当数据库出现问题后,always on服务会自动切换主从服务器。 例如192.168.1.10为主服务器,12为从服务器,当主服务器出现问题后,always on自动将主服务器切换为12,保证数据库正常访问。 对于always on服务器有如下操作: 1、切换主从服务器:假如需要手动切换主从服务器时(如果两个服务

C++面试八股文:std::deque用过吗?

100编程书屋_孔夫子旧书网 某日二师兄参加XXX科技公司的C++工程师开发岗位第26面: 面试官:deque用过吗? 二师兄:说实话,很少用,基本没用过。 面试官:为什么? 二师兄:因为使用它的场景很少,大部分需要性能、且需要自动扩容的时候使用vector,需要随机插入和删除的时候可以使用list。 面试官:那你知道STL中的stack是如何实现的吗? 二师兄:默认情况下,stack使

Java面试八股之JVM参数-XX:+UseCompressedOops的作用

JVM参数-XX:+UseCompressedOops的作用 JVM参数-XX:+UseCompressedOops的作用是启用对象指针压缩(Ordinary Object Pointers compression)。这一特性主要应用于64位的Java虚拟机中,目的是为了减少内存使用。在传统的64位系统中,对象引用(即指针)通常占用8字节(64位),而大部分应用程序实际上并不需要如此大的地址空间

华为某员工爆料:偷偷跑出去面试,被面试官鄙视了。第一句话就问:华为淘汰的吧,35岁了,这个年龄在华为能混得下去吗?身体没啥毛病吧

“你都35岁了,难不成是被华为淘汰的?在华为混不下去了吧?身体没啥毛病吧,我们这体检可是很严的。” 近日,一位华为员工在朋友圈爆料,自己在面试时遭到了面试官的无理取闹和人身攻击,原因仅仅是因为他35岁了,曾经在华为工作过。 这番话,充满了傲慢与偏见,让人听了义愤填膺。这位面试官的言行,不仅是对求职者的不尊重,更是对职场规则的践踏。 面试本应是双向选择的过程,企业和求职者在相互了解的基

相关网站

力扣  https://leetcode-cn.com/contest/weekly-contest-124

神经网络第三篇:输出层及softmax函数

在上一篇专题中,我们以三层神经网络的实现为例,介绍了如何利用Python和Numpy编程实现神经网络的计算。其中,中间(隐藏)层和输出层的激活函数分别选择了 sigmoid函数和恒等函数。此刻,我们心中不难发问:为什么要花一个专题来介绍输出层及其激活函数?它和中间层又有什么区别?softmax函数何来何去?下面我们带着这些疑问进入本专题的知识点: 1 输出层概述 2 回归问题及恒等函数 3