【深度学习与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.rhkb.cn/news/416093.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组和指针 笔试题(3)

目录 11.笔试题11 12.笔试题12 13.笔试题13 14.笔试题14 11.笔试题11 //笔试题11(难)int a[5][5];//创建25个int类//p[]1[]2[]3[]4[]5 []6[]7[]8[]9[]10 []11[]12[]13[]14[]15 []16(p[4])[][](p[4][2])[][] [][]&a…

小型防爆气象站是什么

在易燃易爆、危险系数高的工业环境中,小型防爆气象站犹如一位忠诚的安全守护者,默默守护着生产现场和人员的安全。它以其独特的防爆特性、精准的监测能力以及智能化的管理手段,成为了这些环境中不可或缺的安全屏障。 小型防爆气象站的核心优势…

量化交易面试:什么是Black-Scholes方程?

Black-Scholes方程是金融数学中的一个重要方程,用于计算欧式期权的理论价格。它由Fischer Black、Myron Scholes和Robert Merton在1970年代提出,并为他们赢得了诺贝尔经济学奖。以下是对Black-Scholes方程的详细解释: 基本概念: …

[数据集][目标检测]鲜花检测数据集VOC+YOLO格式25215张106类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):25215 标注数量(xml文件个数):25215 标注数量(txt文件个数):25215 标…

初试构建工具Webpack

文章目录 一、Webpack概述二、安装Webpack三、Webpack打包实战1、创建index.js2、创建index.html3、运行webpack4、浏览index.html5、添加第二个脚本(1)创建index2.js(2)修改index.js(3)重新运行 webpack&a…

AtomicIntegerArray使用、核心源码解析

1、API方法使用 构造方法 AtomicIntegerArray atomicIntegerArray1 new AtomicIntegerArray(100); 源码: private final int[] array; public AtomicIntegerArray(int var1) {this.array new int[var1]; }int[] array {10, 20, 30, 0, 0}; AtomicIntegerArray arr new At…

伦理学(Ethics)

讯飞星火 伦理学哲学是一门关于道德问题的科学,旨在系统化和理论化道德思想观点。作为一门独立的哲学分支学科,伦理学的本质是对道德现象进行研究,包括道德意识、道德行为以及道德规范现象等。 伦理学的研究对象广泛,涉及个人的…

驱动(RK3588S)第六课时:linux2.6的使用与GPIO子系统的使用

目录 一、Linux2.6 字符设备驱动编写框架1、合成一个完整的设备号函数2、从完整的设备号里提取主设备号3、动态申请设备号4、静态申请设备号5、释放申请的设备号6、Linux2.6 字符设备驱动的核心结构体7、初始化核心结构体8、向内核去申请 linux2.6 字符设备9、释放申请的设备10…

哈希 详解

目录 1. “哈希”是什么? 2. 哈希冲突 3. 哈希函数 3.1 设计原则 3.2 常见哈希函数 4. 解决哈希冲突的两种常见方法 4.1 闭散列 4.2 开散列 4.3 散列表的扩容问题 5. 哈希表的实现 并 封装模拟实现unordered系列容器 6. 哈希的应用 6.1 位图 -- bitset …

【js逆向专题】2.浏览器调试技巧

小节目标: 熟悉 开发者工具的使用熟悉 代码断点的方式熟悉 网页debugger实现方式 一. 浏览器开发者工具 1. element元素面板 展示浏览器渲染之后的页面 2. network网络面板 浏览器请求的数据都会加载在网络面板 3. console控制台面板 可以在控制台调试你对应的代码 4.…

3000字带你了解SD提示词用法,一点就通,小白轻松上手(附提示词生成器)(1.4 SD提示词运用)

提示词是什么 提示词是我们向AI模型发出的指令。正确的提示词能让AI准确反馈所需的输出,而优质的提示词则能使AI生成的内容更优质、更符合你的期望。这与编写程序代码颇为相似,准确的代码逻辑是程序正常运行的前提,而优秀的代码则能减少运行…

Vue基础概述

Vue框架概述 什么是Vue框架 Vue是一种流行的渐进式JavaScript框架,用于构建Web用户界面。它具有易学、轻量级、灵活性强、高效率等特点,并且可以与其他库和项目集成。是目前最流行的前端框架之一.框架的两种用法: 多页面应用: 在html页面中引入vue.js框…

全倒装共阴节能COB超微小间距LED显示屏主导新型显示技术

COB(Chip on Board)技术最早发源于上世纪60年代,是将LED芯片直接封装在PCB电路板上,并用特种树脂做整体覆盖。COB实现“点” 光源到“面” 光源的转换。点间距有P0.3、P0.4、P0.5、P0.6、P0.7、P0.9、P1.25、P1.538、P1.5625、P1.…

NanoPC-T6安装redriod笔记

这里主要用于自己对安装过程的记录,中间可能记录比较粗糙。 重新编译内核 参考链接:【环境搭建】基于linux的NanoPC-T6_LTS系统固件编译环境搭建 基于docker构建编译环境 docker run -it \ --privilegedtrue --cap-addALL \ --name nanopc_t6_lts_en…

ESP32!Thonny+MicroPython+ESP32开发环境搭建!!

准备工具: ThonnyMicroPythonESP32 一.Thonny安装 下载地址:Thonny, Python IDE for beginnershttps://thonny.org/ 二.下载esp32环境——根据型号下载 下载地址:MicroPython - Python for microcontrollershttps://micropython.org/dow…

Spring Boot 多数据源配置(JPA)

目录 前言 前置环境 pom yml Entity Dao Config Controller 演示 前言 一般一个系统至少有一个数据源,用来持久化业务数据以及查询。单个数据源的系统很常见,在 Spring Boot 框架下配置也很简单。在约定大于配置这个思想下,只需要在…

vue 中计算属性可以接收参数

代码中的value就是接收的参数 计算属性要接收参数要写在返回的时候 computed: {isButtonDisabled() {return (value) > {const num parseInt(value);return isNaN(num) || num < 0}},},//计算属性aaa(){return (value) >{写逻辑return 返回值}} 使用 <el-butto…

Python OpenCV 深入理解(二)

引言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个用于计算机视觉的开源软件库。它提供了大量的图像处理和机器视觉功能&#xff0c;支持多种编程语言&#xff0c;其中Python接口因其易用性和快速原型设计能力而受到广泛欢迎。本文将详细介绍如何…

基于OMS构建OceanBase容灾双活架构的实践

在实际生产环境中&#xff0c;对于关键业务&#xff0c;往往会有容灾双活的需求。除了OceanBase提供的主备库能力&#xff0c;通过官方工具OMS也可以实现容灾双活架构。目前&#xff0c;通过OMS实现的双活架构仅支持OceanBase数据库之间的数据同步。 要通过OMS实现双活架构&am…

合宙LuatOS开发板Core_Air780EP使用说明

Core-Air780EP 开发板是合宙通信推出的基于 Air780EP 模组所开发的&#xff0c; 包含电源&#xff0c;SIM卡&#xff0c;USB&#xff0c;天线&#xff0c;音频等必要功能的最小硬件系统。 以方便用户在设计前期对 Air780EP模块进行性能评估&#xff0c;功能调试&#xff0c;软…