当前位置: 首页 > 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=
http://www.xdnf.cn/news/987697.html

相关文章:

  • 医疗行业双碳战略升维:从合规达标到价值创造的转型路径
  • JavaWeb(JavaBean预习)
  • 智慧园区智能化整体解决方案
  • c#实现绝对路径和相对路径的转换
  • 黑马python(四)
  • CentOS Stream 9——RustDesk基础版自建教程(Docker)
  • <script> 标签的 async 与 defer 属性详解
  • 《Linux C编程实战》笔记番外:如何避免子进程成为僵尸进程
  • 阿里云unbantu、Flask部署模型的一个错误
  • 安卓+苹果端签名教程
  • SiteAzure:文章删除后,前台还能搜索到
  • HarmonyOS - UIObserver(无感监听)
  • TF-IDF算法的代码实践应用——关键词提取、文本分类、信息检索
  • 帆软 BI 从入门到实战全攻略(一):安装激活与添加数据
  • 大量RPM仓库管理指南:更新与批量获取实战手册
  • VS2017----打开ui文件几秒后闪退
  • 汇编(函数调用)
  • 刷新网站 favicon 的几种方法
  • 医院重症监护系统 ICU重症病房管理系统 重症监护软件
  • QT第一课 —— 设置CMake路径
  • Rust:在Windows上安装
  • BEV和OCC学习-7:mmdet3d 3D检测demo测试
  • 剑指offer21——反转链表
  • 使用html写一个倒计时页面
  • 将模型保存到kaggle中的model中
  • 解码 K-Means 聚类:开启数据星河的炫酷聚类新纪元
  • 前端项目主题切换
  • 解锁Wi-SUN潜能!移远通信发布KCM0A5S模组,点亮智慧城市新图景
  • 关于有害的过度使用 std::move
  • Delphi 获取 XP系统 mac地址