word2vec中的CBOW和Skip-gram

word2cev简单介绍

Word2Vec是一种用于学习词嵌入(word embeddings)的技术,旨在将单词映射到具有语义关联的连续向量空间。Word2Vec由Google的研究员Tomas Mikolov等人于2013年提出,它通过无监督学习从大规模文本语料库中学习词汇的分布式表示。目前Word2Vec有两种主要模型:Skip-gram和Continuous Bag of Words (CBOW)。前面已经讨论过它们的基本思想,简要总结如下:

1.Skip-gram: 从一个词预测其周围的上下文词,引入了独立假设,认为上下文的每个词都可以独立预测。
2.CBOW: 从上下文的词预测中心词,通过对上下文词的平均进行预测。

无论是Skip-gram还是CBOW,它们都使用神经网络进行训练,其中词向量是模型学习的参数。这些词向量在向量空间中被设计成使得语义相似的词在空间中距离较近。Word2Vec的训练通常涉及大量的文本数据,以便能够学到通用的词汇表示。Word2Vec模型在自然语言处理领域的应用广泛,包括词义相似度计算、文档相似度、命名实体识别等任务。得到的词嵌入可以被用作其他自然语言处理任务的输入特征,或者通过进一步微调可以适应特定任务的语境。

一.CBOW

CBOW(Continuous Bag of Words)是一种用于自然语言处理中的词嵌入模型,它的思想是从周围的上下文词语预测中心词。具体来说,CBOW的目标是根据上下文中的词语来预测当前位置的目标词语。

1.1CBOW的训练步骤

CBOW的训练过程包括以下步骤:

构建词嵌入表: 首先,为语料库中的每个词语构建一个词向量(词嵌入)。这些词向量可以随机初始化,然后在训练过程中不断调整。上下文窗口: 对于每个训练样本,模型会选择一个中心词,然后从该中心词的上下文中选择周围的2n个词语作为输入。这个上下文窗口的大小由超参数n决定。预测中心词: 使用选定的上下文词向量的平均值或拼接它们,作为输入,通过一个神经网络预测中心词。这个神经网络通常包含一个或多个隐藏层。损失函数: 使用损失函数(通常是交叉熵损失函数)来度量预测的中心词和实际中心词之间的差异。反向传播: 通过反向传播算法来调整词向量,使得损失函数最小化。这会更新词嵌入表中的每个词的向量表示。

1.2训练优化的策略

CBOW(Continuous Bag of Words)模型训练词向量时使用的优化策略通常是随机梯度下降(SGD)或其变体。以下是CBOW训练词向量时的一般优化策略:

梯度下降算法: CBOW通常使用随机梯度下降(SGD)或其变体来最小化损失函数。
SGD每次从训练数据中随机选择一个小批量样本,计算损失,并更新模型参数以减小损失。
这个过程不断迭代,直到达到预定的迭代次数或损失满足某个条件。学习率调度: 为了稳定和加速训练过程,可以使用学习率调度策略。
学习率是梯度下降中用于控制参数更新幅度的超参数。
学习率调度允许在训练过程中逐渐降低学习率,以便在接近最优解时更加细致地调整模型参数。负采样: 在CBOW的训练中,通常需要对负样本进行采样,以便更有效地训练模型。
负采样是指在计算损失时,不是对所有可能的词汇进行预测,而是从负样本中随机选择一小部分来计算损失。
这样可以减少计算复杂度,加速训练。批量训练: 与在线学习相对,批量训练使用整个训练数据集的子集进行参数更新。
批量训练可以带来更加稳定的收敛和更高的训练效率。参数初始化: 初始化词向量和神经网络参数对于训练的成功非常重要。
通常,可以使用小量的随机数来初始化参数,以确保在训练过程中网络能够学到有用的表示。层次化softmax: 在CBOW模型中,层次化softmax是一种用于优化训练过程的策略,特别是在大规模词汇量的情况下。
层次化softmax通过构建一个二叉树结构,将词汇表中的词语划分为不同的类别,从而降低了计算复杂度。
这种策略可以有效地加速训练过程,尤其在训练大规模语料库时表现得更为明显。
层次化softmax的主要思想是将词汇表中的词语组织成一棵二叉树,其中每个叶子节点表示一个词语。
通过在树上进行二进制编码,可以用较少的比特数来表示较常见的词汇,从而减少了计算的复杂度。
训练时,模型通过遵循从树根到叶子节点的路径,来预测目标词语。

以下是使用层次化softmax进行CBOW训练的步骤:

构建二叉树: 将词汇表中的词语组织成一个二叉树结构。频率较高的词语通常位于树的较底层,而频率较低的词语位于较高层。路径编码: 为了在树上表示每个词语,对每个内部节点和叶子节点分配一个二进制编码。通常,可以使用哈夫曼编码等方法。训练过程: 在CBOW的训练过程中,通过预测目标词语的路径,使用层次化softmax计算损失。这样可以避免对整个词汇表进行全面的计算,提高了训练的效率。
层次化softmax的主要优势在于,它可以在保持模型性能的同时,显著减少计算开销。
然而,它的构建和实现可能相对复杂,需要一些额外的工作来准备树结构和路径编码。

CBOW的优点之一是它相对较快地训练,因为它对上下文中的词语进行平均处理,减少了模型参数的数量。然而,它可能在处理稀有词汇或短语的能力上略逊于Skip-gram模型。

二.Skip-gram

Skip-gram是一种用于自然语言处理中的词嵌入模型,与CBOW(Continuous Bag of Words)相反,它的思想是从当前词预测上下文的词语。具体来说,Skip-gram的目标是在给定中心词的情况下预测其周围的上下文词语。

Skip-gram与CBOW之间的核心差异在于其独立假设性。在Skip-gram中,每个上下文词都被认为是独立的,模型的目标是独立地预测每个上下文词,而不是像CBOW那样对上下文词的平均进行预测。这使得Skip-gram更适合处理包含复杂语法和语义关系的语料库。

2.1训练步骤

Skip-gram的训练过程包括以下步骤:

构建词嵌入表: 与CBOW类似,首先为语料库中的每个词语构建一个词向量,这些词向量可以随机初始化。上下文窗口: 对于每个训练样本,模型会选择一个中心词,并从该中心词的上下文中选择周围的词语作为目标预测。预测上下文词: 使用选定的中心词的词向量,通过一个神经网络预测上下文词。这个神经网络通常包含一个或多个隐藏层。损失函数: 使用损失函数(通常是交叉熵损失函数)来度量预测的上下文词和实际上下文词之间的差异。反向传播: 通过反向传播算法来调整词向量,使得损失函数最小化。这会更新词嵌入表中的每个词的向量表示。

Skip-gram的优势之一是它在处理罕见词汇和捕捉词汇之间的复杂关系方面表现较好。然而,由于每个上下文词都被独立预测,训练过程可能会更慢,特别是在大规模语料库中。

2.2优势

1.处理罕见词汇: Skip-gram相对于CBOW在处理罕见词汇方面表现更好。这是因为Skip-gram的目标是从一个词语预测其上下文,因此对于罕见词汇,通过训练模型学到的词向量可能更具有泛化性,能够更好地捕捉它们的语义信息。

2.捕捉复杂关系: Skip-gram的独立假设性使其更能够捕捉词汇之间的复杂关系。每个上下文词都被独立预测,这允许模型在学习过程中更灵活地调整每个词的向量表示,从而更好地捕捉词汇的细粒度语义信息。

2.3挑战

训练速度慢: 由于每个上下文词都被独立预测,Skip-gram的训练过程相对较慢,尤其是在大规模语料库中。这是因为对于每个训练样本,需要更新多个参数,导致计算复杂度较高。

存储需求高: 由于Skip-gram需要学习每个词语的词向量,对于大规模的词汇表,存储这些词向量可能需要大量的内存。这可能成为在资源受限环境中应用Skip-gram时的一个挑战。

参数数量多: Skip-gram的模型参数数量与词汇表的大小相关。当词汇表很大时,模型的参数数量也会增加,可能导致模型的训练和存储变得更为复杂。

总体而言,Skip-gram模型在某些任务和语境下表现得很好,但在实际应用中需要权衡其优势和挑战。在资源受限或对训练时间要求较高的情况下,研究人员可能会选择其他词嵌入模型或采用一些技术来加速训练过程。

word2vec中的CBOW和Skip-gram和传统语言模型的优化目标采用了相同的方式,但是最终的目标不同。语言模型的最终目标是为了通过一个参数化模型条件概率以便更好的预测下一个词,但是词向量是通过条件概率获得词向量矩阵。

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

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

相关文章

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑦

单元测试 一、任务要求 题目1&#xff1a;任意输入2个正整数值分别存入x、y中&#xff0c;据此完成下述分析&#xff1a;若x≤0或y≤0&#xff0c;则提示&#xff1a;“输入不符合要求。”&#xff1b;若2值相同&#xff0c;则提示“可以构建圆形或正方形”&#xff1b;若2<…

【Scala】——变量数据类型运算符

1. 概述 1.1 Scala 和 Java 关系 1.2 scala特点 Scala是一门以Java虚拟机&#xff08;JVM&#xff09;为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言&#xff08;静态语言需要提前编译的如&#xff1a;Java、c、c等&#xff0c;动态语言如&#…

vue2 el-table行悬停时弹出提示信息el-popover

实现方法&#xff0c;用到了cell-mouse-enter、cell-mouse-leave两个事件&#xff0c;然后在表格的首列字段中&#xff0c;加个el-popover组件&#xff0c;当然你也可以选择在其他字段的位置来显示提示框&#xff0c;看自己的需求了。 示例代码&#xff1a; <el-table cell…

神州数码集团荣获“TiDB 社区最佳贡献企业”

日前&#xff0c;神州数码在 TiDB 开源社区中获得了“TiDB 社区最佳贡献企业”奖。PingCAP 颁发该奖项以认可生态企业在社区中的卓越贡献和积极参与。 神州数码与 PingCAP 最早于 2020 年 12 月 28 日进行战略合作&#xff0c;基于全球领先的开源分布式关系型数据库 TiDB&…

强化学习求解TSP(七):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于奖励的决策问题。它是一种无模型的学习方法&#xff0c;通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策&#xff0c;该函数表示在给定状态下采取某个动作所获…

内网穿透的应用-使用Docker部署开源建站工具—Halo,并实现个人博客公网访问

文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤&#xff1a;1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 本篇文章介绍如何在CentOS下使用D…

AI技术已经发现了一种新材料,可以在电池制造中减少对锂的需求

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

专业130+总400+哈尔滨工业大学803信号与系统和数字逻辑电路考研经验哈工大,电子信息,信息与通信工程,信通

今年专业课803信号与系统和数字逻辑130总分400如愿考上哈尔滨工业大学电子信息&#xff08;信息与通信工程-信通&#xff09;&#xff0c;总结了一些各门课程复习心得&#xff0c;希望对大家复习有帮助。 数学一 资料选择&#xff1a; ①高数&#xff1a;张宇强化班 ②线性…

特征工程-特征清洗

特征清洗 在进行玩特征理解后&#xff0c;我们大致理解了面对的数据中包含哪些内容。下一阶段&#xff0c;我么需要对数据中的内容进行进一步分析处理&#xff0c;针对不同数据进行清洗。数据清洗是对数据进行重新审查和校验的过程&#xff0c;目的在于删除重复信息、纠正存在…

2024/1/11HTML学习 :图片标签

文本格式化标签 左边的突出特别重要的时候使用 3.媒体标签 图片标签

【RT-DETR有效改进】带你分析如何确定改进的基础模型,解决模型无法收敛精度很差的问题(ResNet官方一比一复现)

一、本文介绍 Hello&#xff0c;各位读者&#xff0c;距离第一天发RT-DETR的博客已经过去了接近两个月&#xff0c;这段时间里我深入的研究了一下RT-DETR在ultralytics仓库的使用&#xff0c;旨在为大家解决为什么用v8的仓库训练的时候模型不收敛&#xff0c;精度差的离谱的问…

Wargames与bash知识14

Wargames与bash知识13 Bandit22 基于时间的作业调度程序cron会定期自动运行一个程序。在/etc/cron.d/中查找配置&#xff0c;并查看正在执行的命令。 注意&#xff1a;查看其他人编写的shell脚本是一项非常有用的技能。此级别的脚本有意使其易于阅读。如果您在理解它的作用时…

Python - Bert-VITS2 语音推理服务部署

目录 一.引言 二.服务搭建 1.服务配置 2.服务代码 3.服务踩坑 三.服务使用 1.服务启动 2.服务调用 3.服务结果 四.总结 一.引言 上一篇文章我们介绍了如果使用 conda 搭建 Bert-VITS2 最新版本的环境并训练自定义语音&#xff0c;通过 1000 个 epoch 的训练&#xf…

【期末不挂科-C++考前速过系列P2】大二C++第2次过程考核(20道选择题&10道判断题&3道代码题)【解析,注释】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Linux》专…

一包多语言——使用FontForge合并字体

大家好&#xff0c;我是阿赵。   比较多游戏做了一个游戏包里面包含了多种语言&#xff0c;可以游戏内切换。这里分享一个合并多种语言字体的方法。 一、遇到的问题 假设我们游戏需要同时显示简体中文、泰文、老挝文三种语言。 解决方案有多种&#xff1a; 1、准备多种字体 …

Open CV 图像处理基础:(五)Java 使用 Open CV 的绘图函数

Java 使用 Open CV 的绘图函数 使用 Open CV 在 Java 中对图片使用绘图函数&#xff0c;分别绘制矩形、斜线、圆形、椭圆形以及添加文本 Java 使用 Open CV 的绘图函数 Java 使用 Open CV 的绘图函数函数绘制矩形绘制线绘制圆形绘制椭圆添加文本 代码示例Open CV 专栏导航 函…

Object.keys()

目录 1、Object.keys() 是什么&#xff1f; 2、Object.keys(obj) 用法&#xff1a; 2.1 如果对象是一个对象&#xff0c;会返回对象的属性名组成的数组&#xff1b; 2.2 如果对象是一个数组&#xff0c;则返回索引组成的数组&#xff1a; 2.3 如果是字符串&#xff0c;返回…

leetcode:滑动窗口

目录 1.定长滑动窗口 1.1 几乎唯一子数组的最大和(使用map来计数) 1.2 长度为k子数组中的最大和 2.不定长滑动窗口 2.1 最多k个重复元素的最长子数组 2.2 绝对差不超过限制的最长连续子数组(multiset&#xff09; 2.3 将x减到0的最小操作数(正难则反 逆向思维) 2.4 统计…

Leetcode2982. 找出出现至少三次的最长特殊子字符串 II

Every day a Leetcode 题目来源&#xff1a;2982. 找出出现至少三次的最长特殊子字符串 II 解法1&#xff1a;字符串分割 分类讨论 按照相同字母分组&#xff0c;每组统计相同字母连续出现的长度。例如 aaaabbbabb 把 a 分成一组&#xff0c;组内有长度 4 和长度 1&#x…

Mac上使用phpstudy+vscode配置PHP开发环境

使用的工具&#xff1a; 1、系统版本 2、vs code code 3、phpstudy_pro 一、下载vs code code以及必要的插件 1、vs code下载 点击vs code官网下载 选择对应的版本&#xff0c;一般电脑会自动识别对应的版本&#xff0c;点击下载&#xff0c;然后傻瓜式安装&#xff01; 2…