【深度学习与NLP】——词嵌入Embedding技术

目录

1.词嵌入的作用

2.嵌入矩阵的计算

3.Embedding层的代码实验 


词嵌入(Embedding)技术是一种将词汇映射到低维连续向量空间的方法。将离散的单词数据处理成连续且固定长度的向量,使模型可以学习和处理语义信息。

假设需要将["Are", "you", "OK","?"]转换成向量的形式作为神经网络的输入。

将["Are", "you", "OK","?"]转换为4*4的向量矩阵。

1.词嵌入的作用

  1. 捕捉语义关系

    • 词嵌入能够将词汇映射到低维向量空间中,使得语义相近的词在向量空间中的位置也相近。例如,“国王”“皇后”“王子” 等词的向量会比较接近,因为它们在语义上有一定的关联性。
    • 这种特性有助于计算机更好地理解词汇之间的语义关系,从而提高自然语言处理任务的准确性。
  2. 丰富语义信息

    • 词向量不仅仅是简单的数字表示,它还蕴含了词汇的多种语义信息。例如,一个词的向量可能包含了其词性、词义、情感倾向等方面的信息。
    • 这使得计算机在处理自然语言时能够更全面地考虑词汇的各种特征,从而做出更准确的判断。

  1. 降低数据维度

    • 在自然语言处理中,词汇的数量通常非常庞大。如果采用传统的独热编码(one-hot encoding)方式表示词汇,向量的维度会非常高,且数据稀疏。词嵌入将词汇表示为低维向量,有效地降低了数据的维度。
    • 降维后的向量不仅更易于存储和计算,还能减少计算资源的消耗,提高算法的运行效率。
  2. 加速计算过程

    • 低维向量之间的计算速度通常比高维稀疏向量更快。在自然语言处理任务中,如文本分类、机器翻译等,需要频繁地计算词汇之间的相似度或进行矩阵运算。词嵌入提供的低维向量能够加速这些计算过程,提高算法的执行速度。

 将高维的稀疏向量转换为浮点数的低维连续向量

 进行PCA降维,可以发现语义相近的词语词语对应的向量位置也更相近。

具体来说,词嵌入技术具有以下几个重要作用:

首先,它有效地将自然语言中的词语,转换为数值向量表达词语之间的语义关系。这样一来,计算机可以更好地理解词语的含义和它们之间的关系,从而提高自然语言处理任务的准确性。

其次,词嵌入技术能够降低数据的维度,减少计算量和存储空间的需求。相比于传统的独热编码方式,词嵌入向量更加紧凑和高效。

此外,词嵌入技术为各种自然语言处理任务提供了丰富的语义信息。这些信息可以被用于文本分类、情感分析、机器翻译等任务中,帮助模型更好地理解和处理自然语言文本。

总之,词嵌入技术是自然语言处理领域中的一项重要技术,它为更高级的自然语言处理任务提供了有力的支持。

2.嵌入矩阵的计算

假设现在需要将["Are", "you", "OK","?"]中的每个词转换为128维的向量。

 基于矩阵相乘的方法解释:

 基于索引查找的方法解释

一、基于神经网络的方法

  1. Word2Vec

  2. FastText

    • FastText 在 Word2Vec 的基础上进行改进,能够处理词的子词信息。它将每个词表示为字符 n-gram 的集合,然后通过神经网络学习词向量和子词向量。
    • 在计算词嵌入矩阵时,FastText 会考虑词的全局信息和子词信息,从而提高对低频词和生僻词的表示效果。

二、基于矩阵分解的方法

  1. 潜在语义分析(Latent Semantic Analysis,LSA)

  2. 非负矩阵分解(Non-negative Matrix Factorization,NMF)

    • NMF 是另一种矩阵分解方法,它要求分解后的矩阵元素都是非负的。对于词 - 文档矩阵X,NMF 试图找到两个非负矩阵W和H,使得X~=WH。
    • 矩阵W的每一行对应一个词的低维向量表示,即词嵌入矩阵。在训练过程中,通过最小化重构误差来调整W和HH的参数。

三、基于全局词频统计的方法

  1. GloVe
    • GloVe(Global Vectors for Word Representation)基于全局词频统计信息来学习词向量。它通过构建词 - 词共现矩阵X,其中Xij表示词i和词j在语料库中共同出现的次数。
    • GloVe 定义了一个损失函数,通过最小化这个损失函数来学习词向量。损失函数考虑了词的局部上下文窗口和全局统计信息,能够有效地捕捉词语的语义和语法关系。
    • 最终得到的词向量组成了词嵌入矩阵。

3.Embedding层的代码实验 

from torchtext.vocab import Glove     #导入GloVe词向量
# 简单介绍一下Glove词向量,它是斯坦福大学的研究者在2014年开发和发布的GloVe和word2vec与fasttext, # 是当前最常用的3个词向量版本
# 6B表示了模型是基于60亿个单词的语料库训练的在300表示一个单词,使用300维的向量表示
glove =GloVe(name='6B',dim=300)
# 使用nn.Embedding创建词嵌入层将qlove.vectors,通过from pretrained接口,导入到Embedding层中
# 此时的embedding层,就载入了Glove词向量数据
embedding = nn.Embedding.from_pretrained(glove.vectors)
# 打印embedding层中的weiqht的尺寸
print(f"embedding.shape :{embedding.weight.shape}")

 程序输出:
embedding.shape: torch.size([400000,300])

#将man、king、queen等8个词语的词问量,绘制到二维平面上
words =['man', 'woman', 'king', 'queen', 'dog', 'mother', 'father']
indices =[]for word in words:  #将单词word,通过glove的词汇表,转换为单词的索引index = glove.stoi[word]  #将这些索引保存到indices数组中indices.append(index) # 打印单词word和索引index的对应关系print(f"{word}->{index}")
#将索引列表,使用torch.tensor,转为张量的形式
indices = torch.tensor(indices) # 将索引列表转换为,词向量的矩阵
vectors =embedding(indices).detach().numpy() #打印vector的尺寸
print(f"vectors.shape:{vectors.shape}")

输出结果: 

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt# 使用PCA降维算法,将向量vectors进行降维
pca = PCA(n_components=2)
vectors_2d = pca.fit_transform(vectors)
# 将单词和向量,绘制到二维平面上
plt.scatter(vectors_2d[:, 0], vectors_2d[:, 1])
for i, word in enumerate(words):plt.annotate(word,xy=(vectors_2d[i, 0], vectors_2d[i, 1]),xytext=(-10, 10),textcoords='offset points')
plt.show()

 参考链接:

【学习Transformer,应该从词嵌入WordEmbedding开始】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1522656.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL00】【 杂七杂八】

文章目录 一、前言二、MySQL 文件1. 参数文件2. 日志文件3. 套接字文件4. pid 文件5. 表结构定义文件6. InnoDB 存储引擎文件 二、BTree 索引排序三、InnoDB 关键特性1. 插入缓冲1.1 Insert Buffer 和 Change Buffer1.1 缓冲合并 2. 两次写2. 自适应哈希索引3. 异步IO4. 刷新邻…

关于武汉芯景科技有限公司的A/D转换芯片XJ3021开发指南(兼容MCP3021)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、时序(IIC通信) 四、程序代码 XJ3021.C /** XJ3021.c** Created on: 2024年8月23日* Author: Administrator*/ #include "softiic.h" #include "XJ3021.h" #inc…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 09部署OSPF

本章的目的是帮助网络工程师确定网络的理想 OSPF 配置。本章将回答以下问题 应何时在数据中使用OSPF ?配置 OSPF 的关键设计原则是什么?OSPFv2 和 OSPFv3 之间有什么区别,应如何使用?如何在路由协议栈中配置 OSPF ?如何在服务器上配置 OSPF,例如为容…

【MySQL08】【死锁】

文章目录 一、前言二、查看事务加锁情况1. 使用 information_schema 数据库中表获取锁信息1.1 INNODB_TRX1.2 INNODB_LOCKS1.3 INNODB_LOCK_WAITS 2. 使用 SHOW ENGIN INNODB STATUS 获取锁信息 三、死锁四、参考内容 一、前言 最近在读《MySQL 是怎样运行的》、《MySQL技术内…

Android之Handler的post方法和sendMessage的区别

目录 post 方法方法特点 sendMessage 方法方法特点 使用场景区别总结 Handler 类在 Android 中用于在不同线程之间传递消息和执行代码。它提供了两种主要的方式来执行任务:通过 post 方法和通过 sendMessage 方法。这两种方法有不同的使用场景和特点。 post 方法 方…

浅谈架构实战

目录 背景 1 架构演变 2 如何实现高层的复用 2 中台产生案例 3 技术架构的核心要点 4 技术架构的高可用案例 背景 业务架构、数据架构、应用架构和技术架构它们是相互关联和相互支持的,共同构成了企业的总体架构,业务架构是源头,然后才…

自动生成对话视频!如何使用Captions的AI视频生成与编辑API工具?

Captions公司最近发布了一套AI驱动的视频生成和编辑API工具,为创作者和开发者提供了一个强大的视频创作生态系统。这个系统包含AI Creator、AI Twin、AI Edit、和AI Translate四大核心功能,每个工具都针对不同的创作需求进行优化。下面我们就一起来详细测…

第九周:机器学习

目录 摘要 Abstract 一、RNN 1、引入 2、RNN的分类 二、LSTM 1、基本结构 2、具体步骤 3、举例说明 4、原理理解 总结 摘要 本周主要围绕RNN进行探讨,从为什么需要这类”循环网络“入手,提到了”slot filling“技术,接着又对R…

AT3340:支持BDS/GPS双模授时板数据手册

AT3340采用ATGM331C-5T31授时模块,是高授时精度的BDS/GPS双模接收机板卡,包含32个跟踪通道,支持GPS和BDS的单系统授时定位和双系统联合授时定位,可以通过上位机命令切换。其中的射频前端芯片和基带芯片全部由杭州中科微独立研发&a…

RAG数据集自动构造探索, 附prompt

从文档中手动创建数百个 QA(问题-上下文-答案)样本可能非常耗时且劳动密集。此外,人工生成的问题可能难以达到全面评估所需的复杂程度,最终影响评估的质量。通过使用合成数据生成,开发人员在数据聚合过程中的时间可以减…

嵌入式Linux:常见信号的默认行为

信号是一种软件中断,用于通知进程发生了某种异步事件。信号可以由用户、其他进程或操作系统内核产生。进程可以选择捕获并处理这些信号,或者忽略它们,让系统执行默认操作。 不可靠信号(非实时信号):编号为 …

观测云核心技术解密:eBPF Tracing 实现原理

前言 eBPF 是一种强大的内核技术,允许在内核中安全地执行自定义代码。通过 eBPF,开发者可以在不修改内核源码的情况下,对内核功能进行扩展和监控。eBPF Tracing 利用这一技术,对系统调用、内核函数等进行跟踪,从而实现…

【IPV6从入门到起飞】2-1 获取你的IPV6(手机、CPE等)

【IPV6从入门到起飞】2-1 获取你的IPV6(手机、CPE等) 1 IPV6就在身边2 手机IPV62.1 查看IPV62.2 IPV6 ping包测试2.3 IPV6入站测试 3 电脑通过CPE获取IPV63.1 拉不起宽带的打工人3.2 开始部署IPV6环境3.2.1 刷系统3.2.2 激活IPV63.2.3 设置防火墙入站&am…

JAVA - 关于防重复提交探讨

1、前端提交按钮做单次点击 2、后端接收判断请求的数据包,生成唯一key存redis,设置几秒的过期时间(缺陷:带时间戳的数据,需要做些逻辑判断) 3、后端代码逻辑redis分布式锁(缺陷:re…

P01-Java何谓数组

P01-Java何谓数组 一、数组声明创建 1.1 数组声明的语法 与c有所不同 在Java中,数组声明语法 首选语法: //数据类型[] 数组名称; int[] arr;次选,与c类似 //数据类型 数组名称[]; int arr[];1.2 数组创建语法 与c指针有所相似&#xff0…

从源码开始:打造智能化食堂采购与供应链管理平台

随着食堂规模的扩大和供应链的复杂化,这些问题更加突出。智能化的食堂采购平台可以通过自动化流程、数据分析和智能推荐,显著提高采购效率,减少浪费,并降低运营成本。 要打造这样一个平台,首先需要对食堂的日常运营需…

Python基础语法(多进程开发进程建数据共享进程锁进程池)

Python基础语法文章导航: Python基础(01初识数据类型&变量)Python基础(02条件&循环语句)Python基础(03字符串格式化&运算符&进制&编码)Python基础(04 基础练习…

【MATLAB源码-第259期】基于matlab的64QAM调制解调锁相环环载波同步仿真,对比前后星座图,输出锁相环响应曲线。

操作环境: MATLAB 2022a 1、算法描述 1. 概述 在现代数字通信系统中,为了提高频谱利用率和数据传输效率,经常采用多阶调制技术。64QAM(64阶正交幅度调制)便是其中的一种,它通过将数据映射到64个不同的复…

入门篇 LeetCode算法之旅启程 - 从零开始的编程进阶之路

你是否曾经在技术面试中因为算法题而汗流浃背?是否在日常编码中感觉自己的解决问题能力有待提高? 目录 LeetCode: 你的算法训练场为什么选择LeetCode?LeetCode平台使用指南1. 注册与登录2. 探索题库3. 解题过程4. 提交与反馈5. 学习与讨论6. 追踪进度7. 参与竞赛 制定你的…