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

【自然语言处理(NLP)】生成词向量:GloVe(Global Vectors for Word Representation)原理及应用

文章目录

  • 介绍
  • GloVe 介绍
    • 核心思想
    • 共现矩阵
      • 1. 共现矩阵的定义
      • 2. 共现概率矩阵的定义
      • 3. 共现概率矩阵的意义
      • 4. 共现概率矩阵的构建步骤
      • 5. 共现概率矩阵的应用
      • 6. 示例
      • 7. 优缺点
        • 优点
        • 缺点
      • **总结**
    • 目标函数
    • 训练过程
      • 使用预训练的GloVe词向量
    • 优点
    • 应用
    • 总结

个人主页:道友老李
欢迎加入社区:道友老李的学习社区

介绍

**自然语言处理(Natural Language Processing,NLP)**是计算机科学领域与人工智能领域中的一个重要方向。它研究的是人类(自然)语言与计算机之间的交互。NLP的目标是让计算机能够理解、解析、生成人类语言,并且能够以有意义的方式回应和操作这些信息。

NLP的任务可以分为多个层次,包括但不限于:

  1. 词法分析:将文本分解成单词或标记(token),并识别它们的词性(如名词、动词等)。
  2. 句法分析:分析句子结构,理解句子中词语的关系,比如主语、谓语、宾语等。
  3. 语义分析:试图理解句子的实际含义,超越字面意义,捕捉隐含的信息。
  4. 语用分析:考虑上下文和对话背景,理解话语在特定情境下的使用目的。
  5. 情感分析:检测文本中表达的情感倾向,例如正面、负面或中立。
  6. 机器翻译:将一种自然语言转换为另一种自然语言。
  7. 问答系统:构建可以回答用户问题的系统。
  8. 文本摘要:从大量文本中提取关键信息,生成简短的摘要。
  9. 命名实体识别(NER):识别文本中提到的特定实体,如人名、地名、组织名等。
  10. 语音识别:将人类的语音转换为计算机可读的文字格式。

NLP技术的发展依赖于算法的进步、计算能力的提升以及大规模标注数据集的可用性。近年来,深度学习方法,特别是基于神经网络的语言模型,如BERT、GPT系列等,在许多NLP任务上取得了显著的成功。随着技术的进步,NLP正在被应用到越来越多的领域,包括客户服务、智能搜索、内容推荐、医疗健康等。

GloVe 介绍

GloVe(Global Vectors for Word Representation)是一种用于获取词向量的无监督学习算法,由斯坦福大学的Jeffrey Pennington、Richard Socher和Christopher D. Manning于2014年提出。GloVe通过结合全局统计信息和局部上下文信息来生成词向量,旨在捕捉词语之间的语义关系。

核心思想

GloVe的核心思想是利用词与词之间的共现概率来捕捉语义信息。具体来说,GloVe通过构建一个共现矩阵(co-occurrence matrix)来记录词语在语料库中共同出现的频率。然后,通过优化一个目标函数,使得词向量能够反映这些共现关系。

共现矩阵

共现概率矩阵(Co-occurrence Probability Matrix)是自然语言处理中用于捕捉词语之间关系的一种重要工具。它记录了词语在特定上下文窗口中共同出现的频率或概率,是许多词向量模型(如GloVe)的基础。


1. 共现矩阵的定义

共现矩阵 X X X 是一个 V × V V \times V V×V 的矩阵,其中 V V V 是词汇表的大小。矩阵中的每个元素 X i j X_{ij} Xij 表示词语 i i i 和词语 j j j 在某个上下文窗口内共同出现的次数。

  • 上下文窗口:通常定义一个固定大小的窗口(例如,窗口大小为5表示当前词左右各5个词的范围),统计词语在这个窗口内共同出现的次数。
  • 对称性:共现矩阵通常是对称的,即 X i j = X j i X_{ij} = X_{ji} Xij=Xji,因为词语 i i i j j j 共同出现的次数与词语 j j j i i i 共同出现的次数相同。

2. 共现概率矩阵的定义

共现概率矩阵是在共现矩阵的基础上,将共现次数转化为概率。具体来说,共现概率矩阵 P P P 中的每个元素 P i j P_{ij} Pij 表示词语 j j j 在词语 i i i 的上下文中出现的条件概率:

P i j = P ( j ∣ i ) = X i j X i P_{ij} = P(j|i) = \frac{X_{ij}}{X_i} Pij=P(ji)=XiXij

其中:

  • X i j X_{ij} Xij 是词语 i i i 和词语 j j j 共同出现的次数。
  • X i = ∑ k = 1 V X i k X_i = \sum_{k=1}^{V} X_{ik} Xi=k=1VXik 是词语 i i i 与所有其他词语共同出现的总次数。

3. 共现概率矩阵的意义

共现概率矩阵的核心思想是通过词语之间的共现概率来捕捉语义关系。例如:

  • 如果 P i j P_{ij} Pij 很高,说明词语 j j j 经常出现在词语 i i i 的上下文中,两者可能有较强的语义关联。
  • 如果 P i j P_{ij} Pij 很低,说明词语 j j j 很少出现在词语 i i i 的上下文中,两者可能没有明显的语义关联。

通过分析共现概率矩阵,可以发现词语之间的语义相似性、类比关系(如“国王-男人+女人=女王”)等。


4. 共现概率矩阵的构建步骤

  1. 定义词汇表:从语料库中提取所有唯一的词语,构建词汇表 V V V
  2. 定义上下文窗口:选择一个固定大小的窗口(例如,窗口大小为5)。
  3. 统计共现次数:遍历语料库,统计每对词语在窗口内共同出现的次数,填充共现矩阵 X X X
  4. 计算共现概率:对共现矩阵 X X X 进行归一化,计算共现概率矩阵 P P P

5. 共现概率矩阵的应用

共现概率矩阵是许多词向量模型的基础,例如:

  • GloVe:利用共现概率矩阵来优化词向量,使得词向量能够反映词语之间的共现关系。
  • Word2Vec:虽然没有显式使用共现矩阵,但其Skip-gram模型本质上也是在捕捉词语之间的共现关系。
  • 主题模型:共现矩阵可以用于构建主题模型,如LDA(Latent Dirichlet Allocation)。

6. 示例

假设有一个简单的语料库:

"I like deep learning."
"I like NLP."
"I enjoy learning."

定义词汇表 V = { I , l i k e , d e e p , l e a r n i n g , N L P , e n j o y } V = \{I, like, deep, learning, NLP, enjoy\} V={I,like,deep,learning,NLP,enjoy},窗口大小为2。

共现矩阵 X X X 可能如下(简化示例):

IlikedeeplearningNLPenjoy
I021111
like201110
deep110100
learning111001
NLP110000
enjoy100100

共现概率矩阵 P P P 可以通过归一化得到。例如,对于词语 “I”:
P ( like ∣ I ) = X I , like X I = 2 6 ≈ 0.33 P(\text{like}|I) = \frac{X_{I,\text{like}}}{X_I} = \frac{2}{6} \approx 0.33 P(likeI)=XIXI,like=620.33


7. 优缺点

优点
  • 直观且易于理解。
  • 能够捕捉词语之间的全局统计信息。
缺点
  • 矩阵维度高( V × V V \times V V×V),存储和计算成本大。
  • 对于稀疏矩阵,可能需要降维或优化。

总结

共现概率矩阵是自然语言处理中一种重要的统计工具,能够捕捉词语之间的语义关系。它是许多词向量模型(如GloVe)的基础,广泛应用于文本分析、语义建模等任务。

目标函数

GloVe的目标函数如下:

J = ∑ i , j = 1 V f ( X i j ) ( w i T w ~ j + b i + b ~ j − log ⁡ X i j ) 2 J = \sum_{i,j=1}^{V} f(X_{ij}) (w_i^T \tilde{w}_j + b_i + \tilde{b}_j - \log X_{ij})^2 J=i,j=1Vf(Xij)(wiTw~j+bi+b~jlogXij)2

其中:

  • w i w_i wi w ~ j \tilde{w}_j w~j 是词语 i i i j j j 的词向量。
  • b i b_i bi b ~ j \tilde{b}_j b~j 是偏置项。
  • f ( X i j ) f(X_{ij}) f(Xij) 是一个权重函数,用于减少高频词对目标函数的过度影响。

权重函数 f ( X i j ) f(X_{ij}) f(Xij) 通常定义为:

f ( X i j ) = { ( X i j x max ) α if  X i j < x max 1 otherwise f(X_{ij}) = \begin{cases} \left(\frac{X_{ij}}{x_{\text{max}}}\right)^\alpha & \text{if } X_{ij} < x_{\text{max}} \\ 1 & \text{otherwise} \end{cases} f(Xij)={(xmaxXij)α1if Xij<xmaxotherwise

其中, x max x_{\text{max}} xmax α \alpha α 是超参数。

训练过程

  1. 构建共现矩阵:从语料库中统计词语的共现频率,构建共现矩阵。
  2. 初始化词向量:随机初始化词向量和偏置项。
  3. 优化目标函数:使用梯度下降法或其他优化算法最小化目标函数,更新词向量和偏置项。

使用预训练的GloVe词向量

from gensim.test.utils import datapath, get_tmpfile
from gensim.models import KeyedVectors
from gensim.scripts.glove2word2vec import glove2word2vec# 构建glove预训练词向量文件
# 传绝对路径
glove_file = datapath(r'D:\Projects\课程资料\自然语言处理(NLP)\学习\data\glove.6B.100d.txt')
worde2vec_glove_file = get_tmpfile('glove.6B.100d.word2vec.txt')
# 转化  (400000, 100)
glove2word2vec(glove_file, worde2vec_glove_file)model = KeyedVectors.load_word2vec_format(worde2vec_glove_file)
model.most_similar('banana')

在这里插入图片描述

model.most_similar(positive=['woman', 'king'], negative=['man'])

在这里插入图片描述

优点

  • 全局信息:GloVe利用了全局的共现统计信息,能够捕捉到词语之间的全局关系。
  • 高效性:相比于传统的词向量模型(如Word2Vec),GloVe在训练过程中更加高效。
  • 可解释性:GloVe生成的词向量具有较好的可解释性,能够反映词语之间的语义关系。

应用

GloVe生成的词向量可以广泛应用于各种自然语言处理任务,如文本分类、情感分析、机器翻译、问答系统等。

总结

GloVe是一种强大的词向量表示方法,通过结合全局统计信息和局部上下文信息,能够生成高质量的词向量。它在自然语言处理领域有着广泛的应用,并且由于其高效性和可解释性,受到了学术界和工业界的广泛关注。

相关文章:

【自然语言处理(NLP)】生成词向量:GloVe(Global Vectors for Word Representation)原理及应用

文章目录 介绍GloVe 介绍核心思想共现矩阵1. 共现矩阵的定义2. 共现概率矩阵的定义3. 共现概率矩阵的意义4. 共现概率矩阵的构建步骤5. 共现概率矩阵的应用6. 示例7. 优缺点优点缺点 **总结** 目标函数训练过程使用预训练的GloVe词向量 优点应用总结 个人主页&#xff1a;道友老…...

bable-预设

babel 有多种预设&#xff0c;最常见的预设是 babel/preset-env&#xff0c;它可以让你使用最新的 JS 语法&#xff0c;而无需针对每种语法转换设置具体的插件。 babel/preset-env 预设 安装 npm i -D babel/preset-env配置 .babelrc 文件 在根目录下新建 .babelrc 文件&a…...

回顾生化之父三上真司的游戏思想

1. 放养式野蛮成长路线&#xff0c;开创生存恐怖类型 三上进入capcom后&#xff0c;没有培训&#xff0c;没有师傅手把手的指导&#xff0c;而是每天摸索写策划书&#xff0c;老员工给出不行的评语后&#xff0c;扔掉旧的重写新的。 然后突然就成为游戏总监&#xff0c;进入开…...

无公网IP 外网访问青龙面板

青龙面板是一款基于 Docker 的自动化管理平台&#xff0c;用户可以通过简便的 Web 界面&#xff0c;轻松的添加、管理和监控各种自动化任务。而且这款面板还支持多用户、多任务、任务依赖和日志监控&#xff0c;个人和团队都比较适合使用。 本文将详细的介绍如何用 Docker 在本…...

中国证券基本知识汇总

中国证券市场是一个多层次、多领域的市场&#xff0c;涉及到各种金融工具、交易方式、市场参与者等内容。以下是中国证券基本知识的汇总&#xff1a; 1. 证券市场概述 证券市场&#xff1a;是指买卖证券&#xff08;如股票、债券、基金等&#xff09;的市场。证券市场可以分为…...

C基础寒假练习(2)

一、输出3-100以内的完美数&#xff0c;(完美数&#xff1a;因子和(因子不包含自身)数本身 #include <stdio.h>// 函数声明 int isPerfectNumber(int num);int main() {printf("3-100以内的完美数有:\n");for (int i 3; i < 100; i){if (isPerfectNumber…...

Baklib如何提升内容中台智能化推荐系统的精准服务与用户体验

内容概要 在数字化转型的浪潮中&#xff0c;内容中台的智能化推荐系统成为提升用户体验的重要工具。Baklib作为行业领先者&#xff0c;在这一领域积极探索&#xff0c;推出了具有前瞻性的解决方案&#xff0c;旨在提高内容的匹配度和推荐的精准性。本文将深入探讨Baklib如何通…...

【Java】位图 布隆过滤器

位图 初识位图 位图, 实际上就是将二进制位作为哈希表的一个个哈希桶的数据结构, 由于二进制位只能表示 0 和 1, 因此通常用于表示数据是否存在. 如下图所示, 这个位图就用于标识 0 ~ 14 中有什么数字存在 可以看到, 我们这里相当于是把下标作为了 key-value 的一员. 但是这…...

【专业标题】数字时代的影像保卫战:照片误删拯救全指南

在智能手机普及率达98%的今天&#xff0c;每个人的数字相册都承载着价值连城的记忆资产。照片误删事件却如同数字时代的隐形杀手&#xff0c;全球每分钟有超过5000张珍贵影像因此消失。当我们发现重要照片不翼而飞时&#xff0c;那种心脏骤停般的恐慌感&#xff0c;正是数据时代…...

深度剖析八大排序算法

欢迎并且感谢大家指出我的问题&#xff0c;由于本人水平有限&#xff0c;有些内容写的不是很全面&#xff0c;只是把比较实用的东西给写下来&#xff0c;如果有写的不对的地方&#xff0c;还希望各路大牛多多指教&#xff01;谢谢大家&#xff01;&#x1f970; 在计算机科学领…...

JVM_程序计数器的作用、特点、线程私有、本地方法的概述

①. 程序计数器 ①. 作用 (是用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令) ②. 特点(是线程私有的 、不会存在内存溢出) ③. 注意:在物理上实现程序计数器是在寄存器实现的,整个cpu中最快的一个执行单元 ④. 它是唯一一个在java虚拟机规…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.20 傅里叶变换:从时域到频域的算法实现

2.20 傅里叶变换&#xff1a;从时域到频域的算法实现 目录 #mermaid-svg-zrRqIme9IEqP6JJE {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zrRqIme9IEqP6JJE .error-icon{fill:#552222;}#mermaid-svg-zrRqIme9IEqP…...

PAT甲级1052、Linked LIst Sorting

题目 A linked list consists of a series of structures, which are not necessarily adjacent in memory. We assume that each structure contains an integer key and a Next pointer to the next structure. Now given a linked list, you are supposed to sort the stru…...

git error: invalid path

git clone GitHub - guanpengchn/awesome-books: :books: 开发者推荐阅读的书籍 在windows上想把这个仓库拉取下来&#xff0c;发现本地git仓库创建 但只有一个.git隐藏文件夹&#xff0c;其他文件都处于删除状态。 问题&#xff1a; Cloning into awesome-books... remote:…...

优选算法合集————双指针(专题二)

好久都没给大家带来算法专题啦&#xff0c;今天给大家带来滑动窗口专题的训练 题目一&#xff1a;长度最小的子数组 题目描述&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …...

Ubuntu下Tkinter绑定数字小键盘上的回车键(PySide6类似)

设计了一个tkinter程序&#xff0c;在Win下绑定回车键&#xff0c;直接绑定"<Return>"就可以使用主键盘和小键盘的回车键直接“提交”&#xff0c;到了ubuntu下就不行了。经过搜索&#xff0c;发现ubuntu下主键盘和数字小键盘的回车键&#xff0c;名称不一样。…...

使用arcpy列表函数

本节将以ListFeatureClasses()为例,学习如何使用arcpy中的列表函数. 操作方法: 1.打开IDLE,新建脚本窗口 2.导入arcpy模块 3.设置工作空间 arcpy.env.workspace "<>" 4.调用ListFeatureClasses()函数,并将返回的值赋值给fcList变量 fcList arcpy.ListFe…...

基于联合概率密度与深度优化的反潜航空深弹命中概率模型研究摘要

前言:项目题材来自数学建模2024年的D题,文章内容为笔者和队友原创,提供一个思路。 摘要 随着现代军事技术的发展,深水炸弹在特定场景下的反潜作战效能日益凸显,如何最大化的发挥深弹威力也成为重要研究课题。本文针对评估深弹投掷落点对命中潜艇概率的影响进行分析,综合利…...

【PyQt】pyqt小案例实现简易文本编辑器

pyqt小案例实现简易文本编辑器 分析 实现了一个简单的文本编辑器&#xff0c;使用PyQt5框架构建。以下是代码的主要功能和特点&#xff1a; 主窗口类 (MyWindow): 继承自 QWidget 类。使用 .ui 文件加载用户界面布局。设置窗口标题、状态栏消息等。创建菜单栏及其子菜单项&…...

二叉树03(数据结构初阶)

文章目录 一&#xff1a;实现链式结构二叉树1.1前中后序遍历1.1.1遍历规则1.1.2代码实现 1.2结点个数以及高度等1.2.1二叉树结点个数1.2.2二叉树叶子结点个数1.2.3二叉树第k层结点个数1.2.4二叉树的深度/高度1.2.5 二叉树查找值为x的结点1.2.6二叉树的销毁 1.3层序遍历1.4判断是…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...