【自然语言处理(NLP)】生成词向量:GloVe(Global Vectors for Word Representation)原理及应用
文章目录
- 介绍
- GloVe 介绍
- 核心思想
- 共现矩阵
- 1. 共现矩阵的定义
- 2. 共现概率矩阵的定义
- 3. 共现概率矩阵的意义
- 4. 共现概率矩阵的构建步骤
- 5. 共现概率矩阵的应用
- 6. 示例
- 7. 优缺点
- 优点
- 缺点
- **总结**
- 目标函数
- 训练过程
- 使用预训练的GloVe词向量
- 优点
- 应用
- 总结
个人主页:道友老李
欢迎加入社区:道友老李的学习社区
介绍
**自然语言处理(Natural Language Processing,NLP)**是计算机科学领域与人工智能领域中的一个重要方向。它研究的是人类(自然)语言与计算机之间的交互。NLP的目标是让计算机能够理解、解析、生成人类语言,并且能够以有意义的方式回应和操作这些信息。
NLP的任务可以分为多个层次,包括但不限于:
- 词法分析:将文本分解成单词或标记(token),并识别它们的词性(如名词、动词等)。
- 句法分析:分析句子结构,理解句子中词语的关系,比如主语、谓语、宾语等。
- 语义分析:试图理解句子的实际含义,超越字面意义,捕捉隐含的信息。
- 语用分析:考虑上下文和对话背景,理解话语在特定情境下的使用目的。
- 情感分析:检测文本中表达的情感倾向,例如正面、负面或中立。
- 机器翻译:将一种自然语言转换为另一种自然语言。
- 问答系统:构建可以回答用户问题的系统。
- 文本摘要:从大量文本中提取关键信息,生成简短的摘要。
- 命名实体识别(NER):识别文本中提到的特定实体,如人名、地名、组织名等。
- 语音识别:将人类的语音转换为计算机可读的文字格式。
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(j∣i)=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. 共现概率矩阵的构建步骤
- 定义词汇表:从语料库中提取所有唯一的词语,构建词汇表 V V V。
- 定义上下文窗口:选择一个固定大小的窗口(例如,窗口大小为5)。
- 统计共现次数:遍历语料库,统计每对词语在窗口内共同出现的次数,填充共现矩阵 X X X。
- 计算共现概率:对共现矩阵 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 可能如下(简化示例):
I | like | deep | learning | NLP | enjoy | |
---|---|---|---|---|---|---|
I | 0 | 2 | 1 | 1 | 1 | 1 |
like | 2 | 0 | 1 | 1 | 1 | 0 |
deep | 1 | 1 | 0 | 1 | 0 | 0 |
learning | 1 | 1 | 1 | 0 | 0 | 1 |
NLP | 1 | 1 | 0 | 0 | 0 | 0 |
enjoy | 1 | 0 | 0 | 1 | 0 | 0 |
共现概率矩阵 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(like∣I)=XIXI,like=62≈0.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~j−logXij)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 α 是超参数。
训练过程
- 构建共现矩阵:从语料库中统计词语的共现频率,构建共现矩阵。
- 初始化词向量:随机初始化词向量和偏置项。
- 优化目标函数:使用梯度下降法或其他优化算法最小化目标函数,更新词向量和偏置项。
使用预训练的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词向量 优点应用总结 个人主页:道友老…...
bable-预设
babel 有多种预设,最常见的预设是 babel/preset-env,它可以让你使用最新的 JS 语法,而无需针对每种语法转换设置具体的插件。 babel/preset-env 预设 安装 npm i -D babel/preset-env配置 .babelrc 文件 在根目录下新建 .babelrc 文件&a…...

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

无公网IP 外网访问青龙面板
青龙面板是一款基于 Docker 的自动化管理平台,用户可以通过简便的 Web 界面,轻松的添加、管理和监控各种自动化任务。而且这款面板还支持多用户、多任务、任务依赖和日志监控,个人和团队都比较适合使用。 本文将详细的介绍如何用 Docker 在本…...
中国证券基本知识汇总
中国证券市场是一个多层次、多领域的市场,涉及到各种金融工具、交易方式、市场参与者等内容。以下是中国证券基本知识的汇总: 1. 证券市场概述 证券市场:是指买卖证券(如股票、债券、基金等)的市场。证券市场可以分为…...

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

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

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

【专业标题】数字时代的影像保卫战:照片误删拯救全指南
在智能手机普及率达98%的今天,每个人的数字相册都承载着价值连城的记忆资产。照片误删事件却如同数字时代的隐形杀手,全球每分钟有超过5000张珍贵影像因此消失。当我们发现重要照片不翼而飞时,那种心脏骤停般的恐慌感,正是数据时代…...
深度剖析八大排序算法
欢迎并且感谢大家指出我的问题,由于本人水平有限,有些内容写的不是很全面,只是把比较实用的东西给写下来,如果有写的不对的地方,还希望各路大牛多多指教!谢谢大家!🥰 在计算机科学领…...

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

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.20 傅里叶变换:从时域到频域的算法实现
2.20 傅里叶变换:从时域到频域的算法实现 目录 #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上想把这个仓库拉取下来,发现本地git仓库创建 但只有一个.git隐藏文件夹,其他文件都处于删除状态。 问题: Cloning into awesome-books... remote:…...

优选算法合集————双指针(专题二)
好久都没给大家带来算法专题啦,今天给大家带来滑动窗口专题的训练 题目一:长度最小的子数组 题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …...
Ubuntu下Tkinter绑定数字小键盘上的回车键(PySide6类似)
设计了一个tkinter程序,在Win下绑定回车键,直接绑定"<Return>"就可以使用主键盘和小键盘的回车键直接“提交”,到了ubuntu下就不行了。经过搜索,发现ubuntu下主键盘和数字小键盘的回车键,名称不一样。…...
使用arcpy列表函数
本节将以ListFeatureClasses()为例,学习如何使用arcpy中的列表函数. 操作方法: 1.打开IDLE,新建脚本窗口 2.导入arcpy模块 3.设置工作空间 arcpy.env.workspace "<>" 4.调用ListFeatureClasses()函数,并将返回的值赋值给fcList变量 fcList arcpy.ListFe…...
基于联合概率密度与深度优化的反潜航空深弹命中概率模型研究摘要
前言:项目题材来自数学建模2024年的D题,文章内容为笔者和队友原创,提供一个思路。 摘要 随着现代军事技术的发展,深水炸弹在特定场景下的反潜作战效能日益凸显,如何最大化的发挥深弹威力也成为重要研究课题。本文针对评估深弹投掷落点对命中潜艇概率的影响进行分析,综合利…...

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

二叉树03(数据结构初阶)
文章目录 一:实现链式结构二叉树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判断是…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...