【Word2Vec】Skip-gram 的直观理解(深入浅出)

news/2025/3/4 11:21:49/

01 什么是skip-gram

一句话来说就是,给定中心词,然后预测其周围的词:

在这里插入图片描述

02 模型结构

在这里插入图片描述

  1. 对于skip-gram来说,输入是一个[1 x V]维的ont-hot向量,其中V为词表大小,值为1的那一项就表示我们的中心词
  2. 经过一个[V x N]的矩阵得到一个[1 x N]的向量,这个向量就是我们需要的词的embedding表示
  3. 然后[1 x N]的向量经过一个[N x V]的矩阵得到一个[1 x V]的向量,这个向量的值就是中心词与词表中其他词的相似度,经过softmax就是中心词旁边周围词出现的概率
  4. 优化目标:经过训练[V x N][N x V]这两个矩阵,使得最后目标词与周围词的出现概率最大,而与除了周围词以外的词概率最小(负采样,这里不详细展开了)。

03 直观理解skip-gram流程

这里的每一步,对应了 02 模型结构 中的步骤。

这里我们举一个例子,一步步推导是怎么走的,这样更加直观:

以这句话为例:I love machine learning

我们随机初始化两个矩阵:

[V x N]的矩阵为:
[0.1, 0.2]
[0.3, -0.2]
[0.5, 0.4]
[-0.1, 0.3]

其中,V为4,表示词表中有4个单词,N为2表示我们想讲词向量映射为2(这个N是超参数,可以自己设定)。

注意这里为了文章简洁,使用两个相同矩阵,只是转置了一下,真实情况中一般是随机初始化的(大概率不同)。

1. 输入[1 x V]向量

假设我们的目标词是love,那么输入向量就是[0, 1, 0, 0]

2. 经过一个[V x N]的矩阵得到一个[1 x N]的向量

输入向量 x [V x N]的矩阵的直观理解就是:将词映射成embeding

以所举例子所示,向量 x 矩阵的结果就是:

I      -> [0.1, 0.2]
love   -> [0.3, -0.2]
machine-> [0.5, 0.4]
learning -> [-0.1, 0.3]

也就是将love从ont-hot向量映射为[0.3, -0.2]这个embedding。

3. [1 x N]的向量经过一个[N x V]的矩阵得到一个[1 x V]的向量

这个过程即做预测,skip-gram的预测过程就是找出跟中心词最相近的词,向量表示最简单就是看向量乘积,越高说明越相似。

比如,如果想知道love和I、machine之间的相似度:

在这里插入图片描述

4. 优化目标

使用交叉熵损失函数,目标是最小化目标词真实上下文词之间的预测误差(注意是真实上下文)。

对于该例子就是:

在这里插入图片描述

然后反向传播计算损失,不断优化两个矩阵,最后使得总损失最小,直观理解就是目标词与周围词的出现概率最大

  • 训练完成后的第一个矩阵的每一行,就对应着每个词的embedding表示;
  • 训练完成后,在做预测时:给定一个词,想知道他的上下文词是谁,就看3. 的结果[1 x V]的向量值最大的n个元素,就对应最可能的n个上下文词。

http://www.ppmy.cn/news/1576524.html

相关文章

清华北大DeepSeek六册

「清华北大-Deepseek使用手册」 链接:https://pan.quark.cn/s/98782f7d61dc 「清华大学Deepseek整理) 1-6版本链接:https://pan.quark.cn/s/72194e32428a AI学术工具公测链接:https://pan.baidu.com/s/104w_uBB2F42Da0qnk78_ew …

Cherno C++ P60 为什么不用using namespace std

这篇文章我们讲一下之前写代码的时候的一个习惯&#xff0c;也就是不使用using namespace std。如果我们接触过最早的C教程&#xff0c;那么第一节课都会让我们写如下的代码&#xff1a; #include<iostream>using namespace std;int main() {cout << "Hello …

DeepSeek开源周:全面革新AI基础设施技术的盛宴

在2025年2月24日至28日&#xff0c;DeepSeek举办了备受瞩目的开源周活动&#xff0c;期间连续五天发布了一系列覆盖AI基础设施全链路的核心技术项目。这些项目横跨计算优化、通信加速、并行策略、存储系统等多个关键维度&#xff0c;为AI领域的发展注入了强大的动力&#xff0c…

使用 DeepSeek 生成流程图、甘特图与思维导图:结合 Typora 和 XMind 的高效工作流

在现代工作与学习中&#xff0c;可视化工具如流程图、甘特图和思维导图能够极大地提升信息整理与表达的效率。本文将详细介绍如何使用 DeepSeek 生成 Mermaid 文本&#xff0c;结合 Typora 快速生成流程图和甘特图&#xff0c;并通过 Markdown 格式生成思维导图&#xff0c;最终…

【学术会议论文投稿】Spring Boot实战:零基础打造你的Web应用新纪元

第七届人文教育与社会科学国际学术会议&#xff08;ICHESS 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;https://ais.cn/u/nuyAF3 目录 一、Spring Boot简介 1.1 Spring Boot的诞生背景 1.2 Spring Boot的核心特性 二、搭建开发环境 2.1…

Spring Boot 整合 JMS-ActiveMQ,并安装 ActiveMQ

1. 安装 ActiveMQ 1.1 下载 ActiveMQ 访问 ActiveMQ 官方下载页面&#xff0c;根据你的操作系统选择合适的版本进行下载。这里以 Linux 系统&#xff0c;Java环境1.8版本为例&#xff0c;下载 apache-activemq-5.16.7-bin.tar.gz。 1.2 解压文件 将下载的压缩包解压到指定目…

从 Spring Boot 2 升级到 Spring Boot 3 的终极指南

一、升级前的核心准备 1. JDK 版本升级 Spring Boot 3 强制要求 Java 17 及以上版本。若当前项目使用 Java 8 或 11&#xff0c;需按以下步骤操作&#xff1a; 安装 JDK 17&#xff1a;从 Oracle 或 OpenJDK 官网下载&#xff0c;配置环境变量&#xff08;如 JAVA_HOME&…

go语言中字符串嵌套

在Go语言中&#xff0c;字符串嵌套通常是指在字符串中包含另一个字符串。可以通过以下几种方式实现&#xff1a; 1. 使用双引号和转义字符 如果需要在字符串中嵌套双引号&#xff0c;可以使用转义字符 \ 来表示内部的双引号。例如&#xff1a; s : "He said, \"He…