【自然语言处理(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判断是…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
