当前位置: 首页 > news >正文

word2vec--CBOW与Skip-Gram 两种模型

Word2Vec 是一种流行的用于生成词嵌入(Word Embeddings)的无监督学习模型,它由 Google 的一个团队在 2013 年提出。它的主要目的是将单词映射到一个连续的向量空间,使得语义相似的单词在这个空间中靠得更近。

Word2Vec 有两种主要的模型架构:Skip-Gram 和 Continuous Bag of Words (CBOW)。两者使用不同的策略来预测单词的上下文。

一.Skip-Gram:中心词来预测周围词

  • Skip-Gram 模型是 Word2Vec 中的一种重要架构,其主要目的是通过已知的单词(中心词)预测其上下文中的其他单词。Skip-Gram 模型的设计初衷是捕捉单词之间的语义关系和上下文信息,使得相似语义的单词在向量空间中距离更近。

模型原理

Skip-Gram 模型的核心思想是利用一个中心词来预测其周围的上下文词。给定一个单词序列 ( w_1, w_2, , w_T ),中心词 ( w_t ) 的任务是根据其上下文 ( w_(t-j) 到 ( w_(t+j)(这里 ( j ) 是一个窗口大小参数)来预测上下文中的单词。

目标函数

Skip-Gram 模型的目标是最大化给定中心词 ( w_t ) 时预测上下文词 ( w_{t+j} ) 的概率。具体来说,模型的目标函数可以表示为:

∏ t = 1 T ∏ j = − c c P ( w t + j ∣ w t ) \prod_{t=1}^{T} \prod_{j=-c}^{c} P(w_{t+j} | w_t) t=1Tj=ccP(wt+jwt)

其中:

  • ( T ) 是整个文本中的单词数。
  • ( c ) 是上下文窗口的大小(即有多少个单词被视为上下文)。
  • ( P(w_(t+j) | w_t) ) 是在给定中心词 ( w_t ) 下预测上下文词 ( w_(t+j) ) 的概率。

训练过程

Skip-Gram 模型的训练过程通常涉及以下步骤:

  1. 数据预处理

    • 将文本转换为单词序列。
    • 创建中心词和上下文词的对(例如,若窗口大小为 2,并且中心词为 “machine”,则上下文可能是 “I” 和 “learning”)。
  2. 初始化参数

    • 为每个单词初始化输入和输出嵌入向量。输入向量用于表示中心词,输出向量用于表示上下文词。
  3. 训练

    • 对于每对中心词和其上下文词,利用负采样(Negative Sampling)或层次 Softmax(Hierarchical Softmax)来计算概率。
    • 更新参数以最大化正确上下文词的概率,最小化错误上下文词的概率。通过反向传播算法计算梯度并更新嵌入向量。

负采样

由于输出层的计算涉及大量的单词,Skip-Gram 模型通常使用负采样来提高计算效率。负采样选择一些“负样本”来训练,通常是随机选择词汇表中的单词,但与中心词不同。例如,假设我们需要预测上下文单词 “learning”,会将其作为正样本,同时随机选择几个不相关的单词作为负样本。

模型架构

Skip-Gram 模型的简单架构包含两层神经网络:

  1. 输入层:接收一个单词的独热编码表示。
  2. 隐藏层:没有激活函数,直接将输入词的嵌入向量通过权重矩阵得到隐藏层输出。
  3. 输出层:经过 Softmax 层,`计算中心词 ( w_t ) 对于每个上下文词 ( w_(t+j)的条件概率。

示例

给定一句话:“I love natural language processing”,若选择"natural"为中心词,窗口大小为 1,模型将训练以下样本对:

  • 中心词: “natural”,上下文词: “love”
  • 中心词: “natural”,上下文词: “language”

代码示例

以下是使用 Python 的 Gensim 库实现 Skip-Gram 模型的示例:

from gensim.models import Word2Vec# 示例语料
sentences = [['i', 'love', 'natural', 'language', 'processing'],['deep', 'learning', 'is', 'important'],['machine', 'learning', 'is', 'fun'],
]# 训练 Word2Vec 模型(使用 Skip-Gram)
model = Word2Vec(sentences, vector_size=100, window=1, min_count=1, sg=1)  # sg=1 表示使用 Skip-Gram# 获取某个词的向量
vector = model.wv['natural']
print("Vector for 'natural':", vector)# 获取与某个词最相似的词
similar_words = model.wv.most_similar('learning', topn=5)
print("Most similar words to 'learning':", similar_words)

优点

  • 高效捕捉语义信息:Skip-Gram 模型能够有效捕捉单词的语义和上下文信息,生成能够反映单词关系的向量。
  • 灵活性:可以通过调整窗口大小和最小词频等参数对模型表现进行优化。
  • 可扩展性:适用于大规模文本数据,能够处理数百万的单词。

二.CBOW根据中心词来预测周围词

CBOW(Continuous Bag of Words)模型是 Word2Vec 中的另一种架构,主要用于通过上下文单词预测中心单词。与 Skip-Gram 模型相反,CBOW 使用多个上下文单词来预测一个单一的目标词。此模型的目标是最大化给定上下文单词时,预测目标词的概率。

模型原理

CBOW 模型的核心思想是将上下文中的多个单词嵌入到一个向量空间,然后通过这些上下文向量预测中心单词。给定上下文 ( w_{t-c}, w_(t-c+1), w_(t+c)(这里 ( c ) 为上下文窗口大小),模型的目标是预测中心词 ( w_t )。

目标函数

CBOW 模型的目标函数可以表示为最大化在给定上下文的情况下预测目标词的概率:

P ( w t ∣ w t − c , w t − c + 1 , … , w t + c ) P(w_t | w_{t-c}, w_{t-c+1}, \ldots, w_{t+c}) P(wtwtc,wtc+1,,wt+c)

训练过程

CBOW 模型的训练过程包括以下几个步骤:

  1. 数据预处理

    • 将文本数据转换为单词序列。
    • 根据窗口大小获取上下文词与对应目标词的对。例如,如果选择窗口大小为 2,且目标词是 “language”,上下文将是 [“I”, “love”, “natural”, “processing”]。
  2. 初始化参数

    • 为每个单词初始化相应的输入和输出嵌入向量,输入向量用于表示上下文词,输出向量用于表示预测的中心词。
  3. 训练

    • 对于每个上下文词和目标词组合,利用负采样层次 Softmax来计算概率。
    • 更新参数以最大化实际目标词的概率,同时最小化错误输出的概率。可使用反向传播算法进行计算并更新嵌入矩阵。

负采样

CBOW 模型同样使用负采样的方式来提高计算效率。模型会从词汇表中随机选择一些不相关的单词作为负样本,以减少计算量。

模型架构

CBOW 模型包括以下几个部分:

  1. 输入层:接收多个上下文单词的独热编码表示。
  2. 隐藏层:无激活函数,将上下文单词的嵌入向量通过权重矩阵相加得到隐藏层的输出。这个输出向量是所有上下文词向量的平均值或总和。
  3. 输出层:经过 Softmax 层计算每个词的概率,最终输出为预测的中心词。

代码示例

使用 Python 的 Gensim 库实现 CBOW 模型的示例:

from gensim.models import Word2Vec# 示例语料
sentences = [['i', 'love', 'natural', 'language', 'processing'],['deep', 'learning', 'is', 'important'],['machine', 'learning', 'is', 'fun'],
]# 训练 Word2Vec 模型(使用 CBOW)
model = Word2Vec(sentences, vector_size=100, window=2, min_count=1, sg=0)  # sg=0 表示使用 CBOW# 获取某个词的向量
vector = model.wv['language']
print("Vector for 'language':", vector)# 获取与某个词最相似的词
similar_words = model.wv.most_similar('learning', topn=5)
print("Most similar words to 'learning':", similar_words)

优点

  • 捕捉上下文信息:CBOW 模型通过多个上下文单词来形成更全面的上下文表示,从而有效地捕捉语义信息。
  • 计算高效:由于输入是多个上下文词,可以在训练中更好地进行并行计算。
  • 适应性强:在各种特定任务中,只需调整窗口大小和其他参数即可优化模型效果。

CBOW 模型通过利用上下文词来预测目标词的机制,在自然语言处理领域表现出色。其灵活的框架和高效的训练方法,使得它成为了许多 NLP 应用的基础,为理解和处理复杂的语言结构提供了强大的支持。

相关文章:

word2vec--CBOW与Skip-Gram 两种模型

Word2Vec 是一种流行的用于生成词嵌入(Word Embeddings)的无监督学习模型,它由 Google 的一个团队在 2013 年提出。它的主要目的是将单词映射到一个连续的向量空间,使得语义相似的单词在这个空间中靠得更近。 Word2Vec 有两种主要…...

iOS六大设计原则设计模式

六大设计原则: 一、单一职责原则 一个类或者模块只负责完成一个职责或者功能。 类似于:UIView 和 CALayer 二、开放封闭原则 对扩展开放,对修改封闭。 我们要尽量通过扩展软件实体来解决需求变化,而不是通过修改已有的代码来…...

nacos 集群搭建

主机准备 IProle192.168.142.155slave02192.168.142.156slave192.168.142.157master 三台主机上分别构建 mysql 镜像 FROM mysql:8.0.31 ADD https://raw.githubusercontent.com/alibaba/nacos/develop/distribution/conf/mysql-schema.sql /docker-entrypoint-initdb.d/nac…...

STM32快速复习(十二)FLASH闪存的读写

文章目录 一、FLASH是什么?FLASH的结构?二、使用步骤1.标准库函数2.示例函数 总结 一、FLASH是什么?FLASH的结构? 1、FLASH简介 (1)STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&…...

漏洞扫描工具使用

首先把补丁的两个文件复制下来替换原文件 找到C:\ProgramData\Acunetix\shared\license然后替换 然后打开漏扫工具并刷新页面 然后添加要扫描的网站 等他扫描完成 扫描完成就可以生成报告了 一共五十多页的报告...

C++ | Leetcode C++题解之第424题替换后的最长重复字符

题目&#xff1a; 题解&#xff1a; class Solution { public:int characterReplacement(string s, int k) {vector<int> num(26);int n s.length();int maxn 0;int left 0, right 0;while (right < n) {num[s[right] - A];maxn max(maxn, num[s[right] - A]);i…...

利士策分享,动摇时刻的自我救赎

利士策分享&#xff0c;动摇时刻的自我救赎 在人生的长河中&#xff0c;我们每个人都会面临各种挑战与抉择&#xff0c; 那些让人心生动摇的瞬间&#xff0c;如同夜空中偶尔掠过的乌云&#xff0c;遮蔽了前行的星光。 但正是这些动摇&#xff0c;构成了我们成长的轨迹&#x…...

动手学深度学习(李沐)PyTorch 第 1 章 引言

在线电子书 深度学习介绍 安装 使用conda环境 conda create -n d2l-zh python3.8 pip安装需要的包 pip install jupyter d2l torch torchvision下载代码并执行 wget https://zh-v2.d2l.ai/d2l-zh.zip unzip d2l-zh.zip jupyter notebookpip install rise如果不想使用jupyt…...

二叉树(二)深度遍历和广度遍历

一、层序遍历 广度优先搜索&#xff1a;使用队列&#xff0c;先进先出 模板&#xff1a; 1、定义返回的result和用于辅助的队列 2、队列初始化&#xff1a; root非空时进队 3、遍历整个队列&#xff1a;大循环while(!que.empty()) 记录每层的size以及装每层结果的变量&a…...

【算法——双指针】

922. 按奇偶排序数组 II 算法讲解050【必备】双指针技巧与相关题目_哔哩哔哩_bilibili main:vector<int>nums { 3,1,2,4 };int i 0, j 1;int n nums.size() - 1;while (j < nums.size() && i < nums.size()) //如果奇偶任一方排好了&#xff0c;另…...

Rocky Linux 9 中添加或删除某个网卡的静态路由的方法

使用ip命令配置临时路由 添加静态路由 ip route add <目的网络> via <下一跳IP> dev <网卡接口名称>例: 给eth0网卡添加一个到达 192.168.2.0/24 网络&#xff0c;下一跳为 192.168.1.254 的路由 ip route add 192.168.2.0/24 via 192.168.1.254 dev eth0…...

网站建设中常见的网站后台开发语言有哪几种,各自优缺点都是什么?

市场上常见的网站后台开发语言有PHP、Python、JavaScript、Ruby、Java和.NET等。这些语言各有其独特的优缺点&#xff0c;适用于不同的开发场景和需求。以下是对这些语言的具体介绍&#xff1a; PHP 优点&#xff1a;PHP是一种广泛用于Web开发的动态脚本语言&#xff0c;特别适…...

【程序大侠传】应用内存缓步攀升,告警如影随形

前序 在武侠编码的江湖中&#xff0c;内存泄漏犹如隐秘杀手&#xff0c;潜伏于应用程序的各个角落&#xff0c;悄无声息地吞噬着系统资源。若不及时发现和解决&#xff0c;必将导致内存枯竭&#xff0c;应用崩溃。 背景&#xff1a;内存泄漏的由来 内存泄漏&#xff0c;乃程序…...

JavaWEB概述

JavaWEB概述 一、什么是JavaWEB 用Java技术解决web互联网领域的技术栈。要学习JavaWEB首先得知道什么是客户端和服务端 客户端&#xff1a;简而言之&#xff0c;这就是使用方&#xff0c;比如我们下载一个软件去使用&#xff0c;里面有很多我们可以使用的功能&#xff0c;那…...

半结构化知识抽取案例

半结构化知识抽取是指从半结构化数据源&#xff08;如HTML、XML、JSON等&#xff09;中提取有用的信息&#xff0c;并将其转换为更易于理解和使用的知识形式。半结构化数据通常包含一些结构化的标记或标签&#xff0c;但不像完全结构化的数据那样严格。 比如抽取如下网页到neo …...

Oracle Truncate和delete的区别

DropTruncatedelete语句类型 DDl &#xff08;数据定义语言 Data Definition Language DDl &#xff08;数据定义语言 Data Definition Language DML&#xff08;数据操作语言 Data Manipulation Language 速度 快 删除整个表 快 一次性删除 慢 逐行删除 回滚不可不可可del…...

应用层协议 --- HTTP

序言 在上一篇文章中&#xff0c;我们在应用层实现了一个非常简单的自定义协议&#xff0c;我们在我们报文的首部添加了报文的长度并且使用特定的符号分割。但是想做一个成熟&#xff0c;完善的协议是不简单的&#xff0c;今天我们就一起看看我们每天都会用到的 HTTP协议 。 UR…...

网卡Network Interface Card

文章目录 网卡&#xff08;Network Interface Card&#xff0c;简称NIC&#xff09;是一种计算机硬件设备&#xff0c;用于将计算机连接到计算机网络&#xff0c;使计算机能够进行数据通信。它是计算机与外部网络&#xff08;如局域网、互联网&#xff09;之间的接口&#xff0…...

9.1 Linux_I/O_基本知识

文件类型 一切I/O皆文件&#xff0c;文件就是存放在磁盘上面的有序数据的集合。 文件类型&#xff1a; 常规文件 r &#xff1a;就是普通文件目录文件 d &#xff1a;就是目录&#xff0c;是一个索引字符设备文件 c &#xff1a;键盘、鼠标块设备文件 b &#xff1a;U盘、磁…...

[Java]一、面向对象核心编程思想

G:\Java\1.JavaSE 1. 继承 1.1 继承的概述 重点内容:1.知道继承的好处2.会使用继承3.知道继承之后成员变量以及成员方法的访问特点4.会方法的重写,以及知道方法重写的使用场景5.会使用this关键字调用当前对象中的成员6.会使用super关键字调用父类中的成员7.会定义抽象方法以…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...