负采样:如何高效训练词向量

news2024/11/20 15:16:39

Negative Sampling

1.何为负采样

负采样是一种用于训练词嵌入模型的采样方法,特别适用于处理大规模词汇表的情况。负采样的目标是降低计算成本并改善模型的性能,同时有效地训练词向量。
在这里插入图片描述

2.为什么需要负采样

在传统的词嵌入模型中,如Word2Vec,要计算每个词汇在上下文中的概率分布,需要使用softmax函数对整个词汇表进行运算。然而,当词汇表非常庞大时,全局计算softmax会变得非常耗时,因为其计算复杂度与词汇表的大小成正比。

为了解决这个问题,负采样提出了一种更高效的训练策略。负采样的核心思想是将训练目标简化为仅关注正样本(即目标词汇的上下文词汇)和一小部分负样本(即从训练数据中未出现的词汇)之间的关系。相比于原始的softmax分类器需要更新整个权重矩阵,通过负采样这种方式,负采样大大减少了计算量,使得模型训练更加高效。

3.负采样详细的原理

基本思想

对于每个训练样本,我们只需要更新一小部分的权重,而不是更新所有的权重。也就是,对于每个训练样本(中心词和上下文词),负采样算法会从词汇表中随机选择一些负样本(通常是一些未出现在上下文中的词汇),并将它们作为负类标签。然后,只有这些负样本的权重会被更新,而其他词汇的权重保持不变。

什么是负采样当中的负样本

概括地说,负样本的选择通常基于词频分布,较低频率的词汇更有可能被选为负样本。

在负采样中,负样本是指从训练数据中未出现的词汇,用于与正样本(目标词汇的上下文词汇)进行对比和训练。选择合适的负样本是负采样方法的关键之一,通常采用基于词频分布的采样,根据词汇在语料库中的出现频率来选择负样本,即词频较低的词汇被选中作为负样本的概率较高,而词频较高的词汇被选中的概率较低
在这里插入图片描述

如图,当使用负采样时,我们首先需要定义一个负样本采样函数。这个函数根据词汇表中每个词汇的频率分布,以一定的概率选择负样本。

为了提高训练效果,通常会根据词汇表中单词的出现频率来选择负样本。

出现频率较低的单词被选作负样本的原因是,这些单词在正样本(真实配对)中出现的机会较少,因此将它们作为负样本可以更好地区分出真实的上下文词。

以skip-gram中的负采样为例:

这是原本的全局softmax函数,在词汇表规模特别大的时候会耗费大量的计算资源,归一化的时间也会变得很慢
在这里插入图片描述
加上负采样之后:

针对一个真正的配对(中心词和其上下文窗口中的一个词)与多个噪声配对(中心词与一个随机词)进行二元逻辑回归训练。

模型通过训练二元逻辑回归模型来区分真正的配对和噪声配对。真正的配对由中心词和上下文窗口中的一个词组成,而噪声配对则是将中心词与一个随机选择的词进行配对。
在这里插入图片描述
我们的目标现在变成最大化两个词在第一个对数项中共同出现的概率,并最小化噪声词的概率。也就是说在训练过程中,作者希望模型能够准确地预测真实的词对(中心词和上下文词),同时尽量将噪声词与中心词的共现概率降低(图中第二点)

具体步骤(用一个例子说明)

核心目标:我们希望真正的context word softmax出来的值尽可能接近1,其他则尽可能小

对于负样本词汇,我们希望模型能够将它们的预测概率降低,以更好地区分正样本和负样本。我们选择的负样本词汇在训练样本中并不真实地与中心词共现,因此我们希望模型能够将它们与正样本词汇区分开来。

例如,假设我们有一个包含以下词汇的句子:
“the cat sat on the mat”

现在,我们要训练一个word2vec模型,其中词汇表包含词汇:“the”, “cat”, “sat”, “on”, “mat”。

步骤一:构建训练样本
以Skip-gram模型为例,选择中心词和上下文词对作为训练样本。假设我们设置上下文窗口大小为1,那么我们可以构建以下的训练样本:
对于中心词 “the”,上下文词为 [“cat”]。
对于中心词 “cat”,上下文词为 [“the”, “sat”]。
对于中心词 “sat”,上下文词为 [“cat”, “on”]。
对于中心词 “on”,上下文词为 [“sat”, “the”, “mat”]。
对于中心词 “mat”,上下文词为 [“on”]。
步骤二:负样本采样
对于每个训练样本,我们需要选择一些负样本。假设我们选择两个负样本。我们使用负采样函数根据词汇表中每个词汇的频率分布,以一定的概率选择负样本。
例如,负样本采样函数根据频率分布选择了负样本词汇:“dog"和"house”。

步骤三:更新权重
对于每个训练样本,我们更新权重,以使模型更好地预测上下文词汇。对于中心词和上下文词对,我们将它们视为正样本,更新它们对应的权重。同时,对于负样本词汇,我们将它们视为负样本,仅更新它们对应的权重。

1.正样本权重的更新:
首先,我们计算中心词"cat"的词向量和上下文词"the"的词向量之间的内积,得到一个预测值。假设这个内积为0.8,并将其输入到sigmoid函数中,得到一个概率值为0.689,表示在给定"cat"的情况下,"the"出现的概率。
然后,我们将这个概率值与实际上下文词"the"的标签进行比较。假设标签为1,表示"the"是正样本。我们计算预测值与实际值之间的差距,即损失。假设损失为0.2。

接下来,我们计算损失函数对中心词"cat"和上下文词"the"的词向量的偏导数。假设得到的偏导数分别为[0.1, 0.2]和[0.05, 0.15]。然后,根据学习率来更新中心词和上下文词的词向量。假设学习率为0.01,我们可以将中心词和上下文词的词向量更新如下:

中心词"cat"的词向量更新为[0.1, 0.2] - 0.01 * [0.1, 0.2] = [0.099, 0.198]
上下文词"the"的词向量更新为[0.05, 0.15] - 0.01 * [0.05, 0.15] = [0.0495, 0.1485]

负样本权重的更新:
现在,我们来处理负样本词汇"dog"和"house"。
首先,我们计算负样本词汇"dog"的词向量和中心词"cat"的词向量之间的内积,得到一个预测值。假设这个内积为-0.6,并将其输入到sigmoid函数中,得到一个概率值为0.354,表示在给定"cat"的情况下,"dog"出现的概率。

然后,我们将这个概率值与负样本词汇"dog"的标签进行比较。假设标签为0,表示"dog"是负样本。我们计算预测值与实际值之间的差距,即损失。假设损失为0.354。

接下来,我们计算损失函数对负样本词汇"dog"的词向量的偏导数。假设得到的偏导数为[-0.2, -0.1]。然后,根据学习率来更新负样本词汇"dog"的词向量。假设学习率为0.01,我们可以将负样本词汇"dog"的词向量更新如下:

负样本词汇"dog"的词向量更新为[-0.2, -0.1] - 0.01 * [-0.2, -0.1] = [-0.202, -0.101]

在更新负样本的权重时,我们计算了负样本词汇的预测概率,并将其与实际值进行比较。如果模型在预测负样本时的概率接近于1,说明模型将其错误地预测为正样本,这样就无法区分正样本和负样本了。因此,我们希望通过更新权重,降低负样本的预测概率,使得模型能够更好地区分正样本和负样本。

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

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

相关文章

CleanMyMac X2024讲解及如何下载?

您是否曾经为Mac电脑的性能下降、存储空间不足而烦恼?是否希望有一个简单而高效的解决方案来优化您的Mac系统?那么,我向您介绍一款非常出色的工具:CleanMyMac X。它能够轻松处理这些问题,并让您的Mac恢复到最佳状态。 …

C++前缀和算法的应用:向下取整数对和 原理源码测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 向下取整数对和 给你一个整数数组 nums &#xff0c;请你返回所有下标对 0 < i, j < nums.length 的 floor(nums[i] / nums[j]) 结果之和。由于答案可能会…

2023-10-17 LeetCode每日一题(倍数求和)

2023-10-17每日一题 一、题目编号 2652. 倍数求和二、题目链接 点击跳转到题目位置 三、题目描述 给你一个正整数 n &#xff0c;请你计算在 [1&#xff0c;n] 范围内能被 3、5、7 整除的所有整数之和。 返回一个整数&#xff0c;用于表示给定范围内所有满足约束条件的数…

深度学习推荐系统架构、Sparrow RecSys项目及深度学习基础知识

文章目录 &#x1f31f; 技术架构&#xff1a;深度学习推荐系统的经典技术架构长啥样&#xff1f;&#x1f34a; 一、深度学习推荐系统的技术架构&#x1f34a; 二、基于用户行为的推荐&#x1f34a; 三、基于多模态数据的推荐&#x1f34a; 四、基于知识图谱的推荐 &#x1f3…

CEC2023:基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2023(提供MATLAB代码及参考文献)

一、动态多目标优化问题 1.1问题定义 1.2 动态支配关系定义 二、 基于自适应启动策略的混合交叉动态多目标优化算法 基于自适应启动策略的混合交叉动态多目标优化算法&#xff08;Mixture Crossover Dynamic Constrained Multi-objective Evolutionary Algorithm Based on Se…

【Overload游戏引擎细节分析】Lambert材质Shader分析

一、经典光照模型&#xff1a;Phong模型 现实世界的光照是极其复杂的&#xff0c;而且会受到诸多因素的影响&#xff0c;这是以目前我们所拥有的处理能力无法模拟的。经典光照模型冯氏光照模型(Phong Lighting Model)通过单独计算光源成分得到综合光照效果&#xff0c;然后添加…

Modelsim无法生成LICENSE的问题

按照网上的破解教程&#xff0c;将mgls.dll和mgls64.dll属性都是去掉只读后&#xff0c;点击patch64_dll.bat文件生成LICENSE&#xff0c;发现在弹出的对话框中一直提示找不到其文件&#xff0c;无法正常生成LICENSE。 解决方法&#xff1a; 1.按winR键或者在电脑搜索界面中输…

C/C++ const相关 常量指针 常指针 常指针常量 顶层底层const

文章目录 前言const限定符初始化const引用指针和const顶层和底层const总结 前言 在看const相关内容的时候&#xff0c;对const的一些概念还存在部分疑惑&#xff0c;容易搞混&#xff0c;尤其是在变量声明这种情况下。 这篇博客就主要写一下const的相关。 const限定符 const主…

npm 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

一、报错&#xff1a; npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c; 然后再试一次。 所在位置 行:1 字符: 1npm init -y~~~ CategoryInfo : ObjectNotFo…

✔ ★【备战实习(面经+项目+算法)】 10.21学习时间表(总计学习时间:5h30min)(算法刷题:7道)

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…

模拟量开关量防抖算法(模拟量超限报警功能块)

模拟量信号的防抖,除了了可以采用延时方法。还可以采用死区过滤器实现,死区过滤器详细算法解读和完整源代码,请查看下面文章博客: PLC信号处理系列之死区滤波器(DeadZone)-CSDN博客(*死区滤波器*)ELSErValue:=rX;END_IF;博途PLC信号处理系列之限幅消抖滤波_RXXW_Dor的博…

ucos练习

文章目录 简单实验在开始任务中创建优先级不同的多个任务使用信号量进行同步 UCOS 硬件实现任务管理任务调度 zynq ucos 简单实验 在开始任务中创建优先级不同的多个任务 int main() {UCOSStartup(MainTask);return 0; }void MainTask (void *p_arg) {OS_ERR os_err;…

42905-2023 碳化硅外延层厚度的测试 红外反射法

1 范围 本文件描述了采用红外反射法测试碳化硅外延层厚度的方法。 本文件适用于 n 型掺杂浓度大于110⁸ cm⁻ 的碳化硅衬底上同质掺杂浓度小于110⁵ cm⁻ 的 同质碳化硅外延层厚度的测试&#xff0c;测试范围为3μm&#xff5e;200μm。 2 规范性引用文件 下列文件中的内容…

Go并发编程之一

一、前言 新年学新语言Go系列文章已经完结&#xff0c;用了最简单的例子去了解Go基础语法&#xff0c;但Go最牛B的是它对并发的友好支持&#xff0c;每一门语言都有它自己独特的优势&#xff0c;如Java适合大型工程化项目&#xff0c;Python适合做数据分析及运维脚本&#xff0…

我单方面宣布:腾讯云服务器优惠价格(双11特价)

2023腾讯云双十一服务器优惠价格表多少钱一年&#xff1f;轻量服务器2核2G3M、2核2G4M、2核4G5M、4核8G12M、8核16G18M、16核32G28M和云服务器CVM标准型S5实例优惠价格&#xff0c;腾讯云百科今年双11服务器价格会在当前的价格基础上享受个9折优惠&#xff0c;可领券 https://c…

42911-2023 碳纤维增强复合材料 密封压力容器加速吸湿和过饱和调节方法

1 范围 本文件描述了碳纤维增强复合材料加速吸湿和过饱和调节的方法&#xff0c;该方法在温度高于100 ℃但低 于试验材料玻璃化转变温度(T) 的饱和水蒸气密封压力容器中进行。 本文件适用于玻璃化转变温度大于150℃的热固性碳纤维增强复合材料。热塑性碳纤维增强复合 材料也…

YOLOV8目标检测——模型训练

文章目录 1下载yolov8&#xff08;[网址](https://github.com/ultralytics/ultralytics)&#xff09;2用pycharm打开文件3训练自己的YOLOV8数据集4run下运行完了之后没有best.pt文件5导出为onnx文件 本章内容主要解决如何训练自己的YOLOV8模型。 1下载yolov8&#xff08;网址&a…

17.1 隐藏执行CMD命令

本章内容涉及使用Socket API和CMD命令行工具实现本地CMD命令执行、无管道正向CMD和无管道反向CMD三种功能。执行本地CMD实现使用CreateProcess函数创建一个新的CMD进程&#xff0c;并将标准输入、输出和错误输出重定向到当前进程的标准输入、输出和错误输出。无管道正向CMD和无…

vue阻止浏览器刷新,达到业务逻辑的实现,在Ts+vue中使用组件内路由守卫

vue阻止浏览器刷新&#xff0c;达到业务逻辑的实现 有类似的需求&#xff0c;页面存在编辑框或者文本输入或者其他&#xff0c;当用户进入编辑状态时&#xff0c;如果没有点击保存就离开页面&#xff0c;需弹窗提示。chrome浏览器手动刷新时如果处于编辑状态也弹出相应的阻止功…

如何处理前端文件上传?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…