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

从代码学习深度学习 - 全局向量的词嵌入(GloVe)PyTorch版

文章目录

  • 前言
  • 带全局语料统计的跳元模型
  • GloVe模型
  • 从条件概率比值理解GloVe模型
  • 总结


前言

在自然语言处理(NLP)的广阔天地中,如何让计算机理解人类语言的丰富内涵,一直是核心挑战。词嵌入(Word Embedding)技术为此提供了优雅的解决方案,它将词语映射到低维、稠密的向量空间中,使得语义相近的词在空间中的距离也相近。

我们之前已经熟悉了像Word2Vec这样的模型,它通过局部上下文窗口来学习词向量。然而,Word2Vec的视野有限,它一次只能看到一个小的上下文窗口,忽略了语料库中丰富的全局统计信息。

今天,我们将深入探讨另一种强大的词嵌入模型——GloVe(Global Vectors for Word Representation)。顾名思义,GloVe旨在融合两类词嵌入方法的优点:既能利用word2vec强大的局部上下文预测能力,又能结合LSA(Latent Semantic Analysis)等矩阵分解方法利用全局统计信息的能力。它通过对全局的“词-词共现矩阵”进行高效的学习,捕捉词语之间更深层次的语义关系。

本篇文章将详细拆解GloVe模型的数学原理,从它与跳元模型(Skip-gram)的联系出发,逐步揭示其巧妙的设计思想。虽然标题中带有“PyTorch版”,但理解其背后的数学原理是进行任何代码实现前至关重要的一步。让我们一起开始这场理论探索之旅吧!

原始内容:下载链接


带全局语料统计的跳元模型

要理解GloVe,我们不妨先回到熟悉的跳元模型(Skip-gram),并尝试用全局语料库的统计数据来重新审视它。

上下文窗口内的词共现可以携带丰富的语义信息。例如,在一个大型语料库中,“固体”比“气体”更有可能与“冰”共现,但“气体”一词与“蒸汽”的共现频率可能比与“冰”的共现频率更高。此外,可以预先计算此类共现的全局语料库统计数据:这可以提高训练效率。

q i j q_{ij} qij 表示词 w j w_j wj 的条件概率 P ( w j ∣ w i ) P(w_j \mid w_i) P(wjwi),在跳元模型中给定中心词 w i w_i wi,我们有:

q i j = exp ⁡ ( u j ⊤ v i ) ∑ k ∈ V exp ( u k ⊤ v i ) q_{ij}=\frac{\exp(\mathbf{u}_j^\top \mathbf{v}_i)}{ \sum_{k \in \mathcal{V}} \text{exp}(\mathbf{u}_k^\top \mathbf{v}_i)} qij=kVexp(ukvi)exp(ujvi)

其中,对于任意索引 i i i,向量 v i \mathbf{v}_i vi u i \mathbf{u}_i ui 分别表示词 w i w_i wi 作为中心词和上下文词的向量,且 V = { 0 , 1 , … , ∣ V ∣ − 1 } \mathcal{V} = \{0, 1, \ldots, |\mathcal{V}|-1\} V={0,1,,V1} 是词表的索引集。

[图片:一个中心词(如“learning”)及其上下文窗口(如“deep”, “from”, “code”)的示意图,突出“共现”的概念]

现在,让我们考虑整个语料库。词 w i w_i wi 可能出现多次。所有以 w i w_i wi 为中心词的上下文词,共同构成一个词索引的多重集 C i \mathcal{C}_i Ci(允许元素重复)。我们将多重集 C i \mathcal{C}_i Ci 中元素 j j j 的重复次数(重数)表示为 x i j x_{ij} xij。这其实就是词 w j w_j wj(作为上下文词)与词 w i w_i wi(作为中心词)在整个语料库的同一上下文窗口中的全局共现计数

利用这个全局统计量 x i j x_{ij} xij,跳元模型的损失函数可以等价地写成:

− ∑ i ∈ V ∑ j ∈ V x i j log ⁡ q i j - \sum_{i \in \mathcal{V}} \sum_{j \in \mathcal{V}} x_{ij} \log q_{ij} iVjVxijlogqij

我们进一步定义两个量:

  • x i = ∑ j ∈ V x i j x_i = \sum_{j \in \mathcal{V}} x_{ij} xi=

相关文章:

  • codeforces C. Devyatkino
  • 建筑末端配电回路安全用电解决方案:筑牢电气防火最后一道防线
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio搭建AnythingLLM聊天助手
  • 边缘计算一:现代前端架构演进图谱 —— 从 SPA 到边缘渲染
  • 【大模型训练】中短序列attention 和MOE层并行方式(二)
  • 深度剖析:UI 设计怎样为小程序构建极致轻量体验
  • 从0到1掌握Sqoop:开启大数据迁移之旅
  • Kivy的ButtonBehavior学习
  • java面向对象高级部分
  • day6补 cpp:c++输入输出流,流的四种状态,标准输入输出流
  • CUDA 与 cuDNN 免登录下载政策详解(基于官方权威信息)
  • 软件确认测试报告:如何评估软件功能及测试关键点?
  • Java并发编程实战 Day 17:CompletableFuture高级应用
  • 爬虫+动态代理助力 AI 训练数据采集
  • QT绘制会动的蚂蚁线
  • AI服务代码说明文档
  • STM32学习之不同FLASH的芯片启动文件选择规则
  • 数据冗余对企业运营的隐性成本
  • 解决idea创建SpringBoot项目,会自动创建.git文件导致commit两极分化的现象。
  • 浅析hashmap
  • 住房和城乡建设部科技网站首页/关联词有哪些五年级
  • 上鼎工程建设有限公司网站/评论优化
  • 长春网站建设公司怎么样/浏览器大全
  • 宁波建站平台/公司注册
  • wordpress读取文件内容/广州网站优化
  • 四川网络科技有限公司/seo关键词分类