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

news2024/11/13 23:31:19

目录

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.coloradmin.cn/o/2101587.html

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

相关文章

终于有人把数据中台讲明白了

在大数据发展的黄金期,几乎所有的高科技企业都在思考一个问题:海量数据作为大多数企业发展不可避免的一个趋势之后,企业该怎么去应用这部分数据资产,会对其商业产生什么影响,如何使数据对企业产生正面的推动而不是成为…

【Oracle APEX开发小技巧 7】解决初始化数据在动态操作-变更中被识别跳出弹窗的问题

在开发时有一个场景——推送开关数据来自于初始化动态操作,理论上只有变更的时候才会有二次提示,但是因为初始化会触发变更,所以会有弹窗,这不是我们想要的结果,有什么办法在初次回显数据不跳出提示吗?​​…

day-48 分割回文串

思路 利用dfs算法,用ids表示当前所指向字符的位置,依次判断s.charAt(ids),s.charAt(ids)s.charAt(ids1)…是否为回文字符串,如果是则加入链表p,再递归调用dfs函数 解题过程 每次调用dfs函数后记得还原现场 Code class Solution {public St…

【STM32+HAL库】---- 基础定时器中断控制LED

硬件开发板:STM32G0B1RET6 软件平台:cubemaxkeilVScode1 新建cubemax工程 1.1 配置系统时钟RCC 1.2 配置LED LED由PA5引脚控制,选择PA5引脚,选择GPIO_Output模式 1.3 定时时间的计算 T ( 预分频系数 1 ) ( 重装载值 1 ) 时…

RedisStack十部曲之二:Redis的核心概念

文章目录 键空间修改和查询键键过期遍历键空间 客户端缓存在计算机科学中有两个难题客户端缓存的Redis实现跟踪模式的工作机制统一的键命名空间 两种连接方式缓存策略Opt-in 模式Opt-out 模式广播模式NOLOOP选项避免竟态条件当与服务器失去连接怎么办什么值得缓存 流水线请求/响…

【2024 CCF编程能力等级认证(GESP)C++ 】 计算机基础知识

目录 1. 引言2. 计算机系统结构2.1 中央处理器(CPU - Central Processing Unit)2.1.1 运算器 2.1.2 控制器2.1.3 性能指标2.2 存储器2.3 输入设备2.4 输出设备 3. 计算机系统层次结构4. 操作系统4.1 操作系统分类4.2 操作系统常见操作4.2.1 基本开关机操…

SpringBoot实现文件内容对比

背景 在上一篇博客中,我实践了WORD转换成PDF/TXT的实现方式,本周接到一个新的需求,恰好就用上了这个成果。需求如下:客户提供一个WORD范本给用户,用户范本进行修改后,再反馈给客户。反馈的成果多种多样&…

RocketMQ消息回溯实践与解析

文章目录 1 问题背景2 验证2.1 生产者启动2.2 消费者启动2.3 执行回溯2.4 结果验证2.5 验证小结2.5.1 分析参数2.5.2 思考 3 分析3.1 策略模式,解析命令行3.2 创建客户端,与服务端交互3.3 获取topic对应的broker地址,提交重置请求3.4 与 name…

TCP 拥塞控制

概念详解 TCP拥塞控制是网络通信中的一个关键机制,它通过动态调整发送数据的速率来避免网络拥塞。以下是TCP拥塞控制的详细概念解释: 拥塞窗口(CWND, Congestion Window): 定义:发送方在收到接收方的确认(…

华为网络工程师证书等级有哪些?怎么备考?

华为网络工程师是由华为技术厂商推出的一系列网络工程师认证,其主要目的就是为了培养了验证网络工程师在华为技术以及解决方案方面的拥有一定的专业知识及技能,该证书分为多个等级,涵盖了不同网络领域及技术,也为众多的网络工程师…

SqlServer: 安装或升级到SqlServer2022

一、下载安装包。 https://info.microsoft.com/ww-landing-sql-server-2022.html?lcidzh-CN 简单注册一下之后,就可以下载安装包了。 或者在我的资源中下载: https://download.csdn.net/download/yenange/89709660 系统要求: https://…

暴力破解和撞库攻击有什么区别,怎么防御暴力破解和撞库攻击

在网络世界中,我们的账户安全时刻面临着各种威胁。其中,暴力破解和撞库攻击就是常见的两种危险手段。今天,就让我们深入了解这两种攻击方式的含义,并学习如何有效地进行防护。 暴力破解的含义 暴力破解,就如同一个不…

java【day03】---(Vue-Element)

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据,如下图所示的表格中的学生信息,应该来自于后台,那么我们的后台和前端是互不影响的2个程序,那么我们前端应该如何从后台获取数据呢?因为是2个程序&#xf…

星闪NearLink短距无线连接技术

星闪NearLink短距无线连接技术,作为华为主导的新一代无线短距通信标准技术,自2020年起由中国工信部牵头制定标准,旨在为万物互联时代提供更高效、更稳定的连接方式。 类似技术介绍 AirDrop(苹果) AirDrop是苹果公司开发…

Apifox使用学习

Apifox是API文档、API调试、API Mock、API自动测试一体化协作平台,定位SwaggerPostmanMockJMeter。 只需要定义好API文档,API调试、API数据Mock、API自动化测试就可以直接使用。 API文档和API开发测试使用同一个工具,API调试完成后即可保证…

PPT图表制作不再难!这款在线PPT软件让办公更简单!

ppt图表怎么制作? 在当下注重视觉呈现的数字化时代,有效的信息传递和数据可视化变得越来越重要。不管是商业演示、学术报告还是项目汇报,一份精心制作的PPT演示文稿,往往能够起到事半功倍的效果。其中,图表作为PPT中不…

n*n矩阵,输出矩阵中任意两点之间所有路径

题目1:给你一个正整数n, 构造一个n*n的四项链表矩阵。 要求: 1.使用四项链表 2.矩阵从左到右,从上到下值依次为1,2,3,4,......n*n 题目2:基于题目1, 在n*n链表矩阵中,输出矩阵中任意两点之间所有…

5款文案自动生成器,高质量创意文案一键为你生成

在当今竞争激烈的内容创作领域,每一个字、每一句话都承载着巨大的价值。对于创作者而言,文案自动生成器的出现,犹如在茫茫大海中点亮了一座指引方向的灯塔。它们不仅为创作者节省了宝贵的时间和精力,更像是一把神奇的钥匙&#xf…

5.4树,森林

5.4.1树的存储结构 可采用顺序存储结构or链式存储结构 要求能唯一的反映树中各节点之间的逻辑 1.双亲表示法 采用一端连续的空间来存储,同时在每个节点中增设一个伪指针,指示双亲节点在数组中的下标 优点:找双亲节点方便,找孩子不方便 attention:由于根节点无双亲节点,所以…

C++:关于反向迭代器的学习分享

前言: 小编仅是一位初学者,所以对于C的理解有限,文章大概率会出现表达不清楚可能也只是因为小编不知道如何更好表达,本文章仅作为一个学习的总结分享。 反向迭代器的概念 反向迭代器故名思意解释反向的迭代器,与正向迭…