当前位置: 首页 > news >正文

【NLP 20、Encoding编码 和 Embedding嵌入】

目录

一、核心定义与区别

二、常见Encoding编码

(1) 独热编码(One-Hot Encoding)

(2) 位置编码(Positional Encoding)

(3) 标签编码(Label Encoding)

(4) 注意事项 

三、常见Embedding词嵌入

(1) 基础词嵌入(nn.Embedding)

(2) 预训练嵌入(from_pretrained) 

(3) 类别特征嵌入(自定义类)

(4) 注意事项 

四、对比总结

五、编码与嵌入的联合使用

总结


新年快乐,这几天将之前做的笔记整理了一下,补充了一点,正式开始学习! 

                                                                                                                —— 24.2.4

一、核心定义与区别

特性Encoding(编码)Embedding(嵌入)
目标将数据转换为特定格式(如数值、二进制、位置信息等),以满足模型输入要求。将离散符号(如单词、类别)映射到低维连续向量空间,捕捉语义或结构关系。
数学形式通常为确定性规则或固定函数(如独热编码、位置编码)。通过可学习的参数矩阵(如神经网络中的嵌入层)生成。
维度维度可能较高(如独热编码的维度等于类别数量)。维度固定且较低(如词嵌入常用 100~1000 维)。
可训练性不可训练(静态规则)。可训练(通过反向传播优化)。
应用场景数据预处理、位置信息编码、分类标签处理。词向量表示、类别特征嵌入、图节点表示。

二、常见Encoding编码

(1) 独热编码(One-Hot Encoding)

  • 定义:将离散类别映射为二进制向量,仅一个位置为1,其余为0。

  • 注意:

    独热编码使用 torch.nn.functional.one_hot,注意设置 num_classes 参数。
  • 示例:

# 类别:["猫", "狗", "鸟"]
"猫" → [1, 0, 0]
"狗" → [0, 1, 0]
"鸟" → [0, 0, 1]
  • 缺点:维度爆炸(高维稀疏),无法表达类别间关系。

参数类型描述是否必需默认值
tensortorch.Tensor输入的整数类别索引张量(如 [0, 2, 1]-
num_classesint类别总数(决定输出维度)-

(2) 位置编码(Positional Encoding)

  • 定义:为序列数据(如文本、时间序列)添加位置信息,常用正弦/余弦函数生成。

  • 注意:

    位置编码自定义生成矩阵后叠加到词嵌入上,需与输入张量形状匹配。
  • Transformer 中的公式

参数类型描述是否必需默认值
max_seq_lenint最大序列长度(决定编码矩阵的行数)-
d_modelint特征维度(决定编码矩阵的列数)

(3) 标签编码(Label Encoding)

  • 定义:将类别映射为整数(如 "红"→0, "蓝"→1, "绿"→2),但可能引入错误的大小关系。

(4) 注意事项 

  1. 独热编码的输入限制

    • 输入张量必须是整数类型(如 torch.long)。

    • 索引值必须小于 num_classes,否则会越界。

  2. 位置编码的叠加方式

    • 需与词嵌入维度一致(d_model),且直接相加前确保形状匹配。

独热编码num_classes控制输出维度,避免索引越界
位置编码max_seq_lend_model定义编码矩阵的尺寸和特征维度

三、常见Embedding词嵌入

(1) 基础词嵌入(nn.Embedding

nn.Embedding()模块

注意:

词嵌入使用 nn.Embedding 层,输入为整数索引张量,输出为浮点数向量。
embedding_layer = nn.Embedding(num_embeddings=10000, embedding_dim=300)
参数类型描述是否必需默认值
num_embeddingsint词汇表大小(唯一符号数量)-
embedding_dimint嵌入向量的维度-
padding_idxint填充符索引(对应向量初始化为零)None
max_normfloat向量最大范数(超过时缩放)None
scale_grad_by_freqbool根据词频缩放梯度(罕见词更大更新)False
import torch.nn as nn# 定义嵌入层:词汇表大小=10000,嵌入维度=300
embedding_layer = nn.Embedding(num_embeddings=10000, embedding_dim=300)# 输入:单词索引(形状 [batch_size, seq_len])
input_ids = torch.LongTensor([[1, 22, 45], [3, 8, 2]])  # 示例输入# 获取词嵌入向量
embeddings = embedding_layer(input_ids)  # 输出形状 [2, 3, 300]

(2) 预训练嵌入(from_pretrained 

nn.Embedding.from_pretrained()

注意: 

预训练嵌入通过 from_pretrained 加载,freeze=True 可固定嵌入参数(适用于迁移学习)。
pretrained_emb = nn.Embedding.from_pretrained(glove.vectors, freeze=True)
参数类型描述是否必需默认值
embeddingstorch.Tensor预训练嵌入矩阵(形状 [num_emb, dim]-
freezebool是否冻结参数(不更新)True
padding_idxint同基础 nn.EmbeddingNone
max_normfloat同基础 nn.EmbeddingNone

如GloVe: 

from torchtext.vocab import GloVe# 加载预训练的 GloVe 词向量
glove = GloVe(name='6B', dim=100)  # 使用 100 维的 GloVe# 获取单词 "apple" 的向量
apple_vector = glove['apple']  # 形状 [100]# 将预训练向量转换为嵌入层
pretrained_emb = nn.Embedding.from_pretrained(glove.vectors, freeze=False)  # freeze=True 表示不更新

(3) 类别特征嵌入(自定义类)

CategoryEmbedding
user_embedding = CategoryEmbedding(num_categories=1000, embedding_dim=64)
参数类型描述是否必需默认值
num_categoriesint类别总数(如用户数、商品数)-
embedding_dimint嵌入向量的维度-

注意:

类别嵌入将高基数类别(如用户ID)映射为低维向量,避免维度爆炸。
import torch.nn as nnclass CategoryEmbedding(nn.Module):def __init__(self, num_categories, embedding_dim):super().__init__()self.embedding = nn.Embedding(num_categories, embedding_dim)def forward(self, category_ids):return self.embedding(category_ids)# 示例:用户ID嵌入(假设有 1000 个用户)
user_embedding = CategoryEmbedding(num_categories=1000, embedding_dim=64)
user_ids = torch.tensor([5, 12, 8])  # 输入用户ID
embedded_users = user_embedding(user_ids)  # 形状 [3, 64]

(4) 注意事项 

  1. 嵌入层的输入要求

    • nn.Embedding 的输入为整数索引,非浮点数。

  2. 预训练嵌入的兼容性

    • 加载预训练向量时,需确保 num_embeddings 和 embedding_dim 与预训练矩阵一致。

基础词嵌入num_embeddingsembedding_dim决定嵌入层的输入输出维度
预训练嵌入embeddingsfreeze加载外部知识,控制参数更新
类别嵌入num_categoriesembedding_dim处理高基数离散特征,避免维度灾难

四、对比总结

维度EncodingEmbedding
语义保留无(仅符号化)高(捕捉语义相似性)
计算开销低(静态计算)高(需训练参数)
灵活性固定规则可自适应任务优化
典型应用数据预处理、位置编码词向量、推荐系统、图表示学习
场景推荐方法
类别特征且维度低独热编码(简单高效)
类别特征维度高(如用户ID)嵌入(避免维度灾难)
序列位置信息位置编码(如 Transformer)
需要捕捉语义相似性嵌入(如词向量)
计算资源有限优先选择静态编码(如哈希编码)

五、编码与嵌入的联合使用

在 Transformer 中,词嵌入位置编码共同构成输入表示:

参数类型描述是否必需默认值
vocab_sizeint词汇表大小(词嵌入参数)-
d_modelint特征维度(词嵌入和位置编码共享)-
max_seq_lenint最大序列长度(位置编码参数)-
import torch
import torch.nn as nnclass TransformerInput(nn.Module):def __init__(self, vocab_size, d_model, max_seq_len):super().__init__()self.token_embedding = nn.Embedding(vocab_size, d_model)self.position_encoding = self._generate_position_encoding(max_seq_len, d_model)def _generate_position_encoding(self, max_len, d_model):position = torch.arange(max_len).unsqueeze(1)div_term = torch.exp(torch.arange(0, d_model, 2) * (-math.log(10000.0) / d_model))pe = torch.zeros(max_len, d_model)pe[:, 0::2] = torch.sin(position * div_term)pe[:, 1::2] = torch.cos(position * div_term)return pe  # 形状: [max_len, d_model]def forward(self, x):# x: [batch_size, seq_len]token_emb = self.token_embedding(x)  # [batch_size, seq_len, d_model]seq_len = x.size(1)positions = self.position_encoding[:seq_len, :]  # [seq_len, d_model]return token_emb + positions  # [batch_size, seq_len, d_model]

总结

  • Encoding 是广义的数据转换方式,强调格式兼容性(如独热编码、位置编码)。

  • Embedding 是特殊的编码方法,通过可学习的低维向量捕捉语义信息(如词嵌入)。

  • 两者常结合使用(如 Transformer 中的词嵌入+位置编码),分别处理不同维度的信息。

相关文章:

【NLP 20、Encoding编码 和 Embedding嵌入】

目录 一、核心定义与区别 二、常见Encoding编码 (1) 独热编码(One-Hot Encoding) (2) 位置编码(Positional Encoding) (3) 标签编码(Label Encoding) (4) 注意事项 三、常见Embedding词嵌入 (1) 基础词嵌入…...

雷赛LC2000

【一,概述】 这个是中型PLC 【二,外观】 网口编号: 【2】【3】 //默认ip:192.168.1.xxx 【0】【1】 可视化授权不如禾川Q系。 【三,总线轴】 因为本次带的轴是台达A2系列伺服 A2最快总线是【1ms】的倍数…...

ESP32开发工具介绍:Thonny——初学者的MicroPython利器

文章目录 引言什么是 Thonny?为什么选择 Thonny 开发 ESP32?1. **MicroPython 的天然支持**2. **极简的配置流程**3. **适合快速原型开发**如何用 Thonny 开发 ESP32?步骤 1:准备工作步骤 2:烧录 MicroPython 固件步骤 3:在 Thonny 中连接 ESP32步骤 4:编写并运行代码Th…...

【Go语言圣经】第六节:方法

第六章:方法 6.1 方法声明 在函数声明时,在其名字之前放上一个变量,这就是声明了变量对应类型的一个方法,相当于为这种类型定义了一个独占的方法。 下例为 Point 类型声明了计算两个点之间距离的方法: package mai…...

【Leetcode刷题记录】45. 跳跃游戏 II--贪心算法

45. 跳跃游戏 II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j < n 返回到达 num…...

mysql_init和mysql_real_connect的形象化认识

解析总结 1. mysql_init 的作用 mysql_init 用于初始化一个 MYSQL 结构体&#xff0c;为后续数据库连接和操作做准备。该结构体存储连接配置及状态信息&#xff0c;是 MySQL C API 的核心句柄。 示例&#xff1a; MYSQL *conn mysql_init(NULL); // 初始化连接句柄2. mysql_…...

Qt网络相关

“ 所有生而孤独的人&#xff0c;葆有的天真 ” 为了⽀持跨平台, QT对⽹络编程的 API 也进⾏了重新封装。本章会上手一套基于QT的网络通信编写。 UDP Socket 在使用Qt进行网络编程前&#xff0c;需要在Qt项目中的.pro文件里添加对应的网络模块( network ). QT core gui net…...

deepseek接入pycharm 进行AI编程

要将DeepSeek接入PyCharm进行AI编程,可以按照以下步骤操作: ### 1. 获取DeepSeek API访问权限 DeepSeek通常以API的形式对外提供服务,你需要在其官方网站注册账号,申请API访问权限。在申请通过后,会获得API密钥(API Key),这是后续调用API的关键凭证。 ### 2. 安装必要…...

Verilog基础(三):过程

过程(Procedures) - Always块 – 组合逻辑 (Always blocks – Combinational) 由于数字电路是由电线相连的逻辑门组成的&#xff0c;所以任何电路都可以表示为模块和赋值语句的某种组合. 然而&#xff0c;有时这不是描述电路最方便的方法. 两种always block是十分有用的&am…...

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (上)

今天小李哥将开启全新的技术分享系列&#xff0c;为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来&#xff0c;生成式 AI 安全市场正迅速发展。据 IDC 预测&#xff0c;到 2025 年全球 AI 安全解决方案市场规模将突破 200 亿美元&#xff0c;年复合增长率超过 30%…...

.Net WebAPI -[HttpPut(“{fileServiceId:int}“)]

[HttpPut("{fileServiceId:int}")] 这个写法是 ASP.NET Core 中的一个路由特性&#xff0c;用于定义一个 HTTP PUT 请求的路由&#xff0c;并指定路由参数的类型。 解析 HttpPut [HttpPut]&#xff1a; 这是一个 ASP.NET Core 的路由特性&#xff0c;用于标记一个方…...

[EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型

Paper Card 论文标题&#xff1a;RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation 论文作者&#xff1a;Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu 论文链接&#xff1a;https://arxiv.org/ab…...

C基础寒假练习(7)

一、有 1、2、3、4个数字&#xff0c;能组成多少互不相同且无重复的三位&#xff1f; 都是多少&#xff1f; #include <stdio.h> int main() {// 定义数字数组int digits[] {1, 2, 3, 4};int n sizeof(digits) / sizeof(digits[0]);// 嵌套循环遍历所有排列for (int …...

Ajax:重塑Web交互体验的人性化探索

在数字化时代&#xff0c;网页的交互性和响应速度已成为衡量用户体验的关键指标。Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;&#xff0c;作为前端与后端沟通的桥梁&#xff0c;凭借其异步通信的能力&#xff0c;极大地提升了网页的动态性和用户友好度&…...

【DeepSeek背后的技术】系列二:大模型知识蒸馏(Knowledge Distillation)

目录 1 引言2 操作步骤和公式说明2.1 准备教师模型&#xff08;Teacher Model&#xff09;和学生模型&#xff08;Student Model&#xff09;2.2 生成软标签&#xff08;Soft Labels&#xff09;2.3 定义蒸馏损失函数2.4 训练学生模型2.5 调整超参数2.6 评估与部署 3 其他知识蒸…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.14 内存映射:处理超大型数组的终极方案

2.14 内存映射&#xff1a;处理超大型数组的终极方案 目录 #mermaid-svg-G91Kn9O4eN2k8xEo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-G91Kn9O4eN2k8xEo .error-icon{fill:#552222;}#mermaid-svg-G91Kn9O4eN2k…...

【C++】STL——vector的使用

目录 &#x1f495;1.vector介绍 &#x1f495;2.vector的基本用法 &#x1f495;3.vector功能的具体用法 &#xff08;讲解&#xff09; &#x1f495;4.vector——size&#xff0c;capacity函数的使用 &#xff08;简单略讲&#xff09; &#x1f495;5.resize&#xff…...

springboot/ssm互联网智慧医院体检平台web健康体检管理系统Java代码编写

springboot/ssm互联网智慧医院体检平台web健康体检管理系统Java代码编写 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&am…...

介绍一下Mybatis的Executor执行器

Executor执行器是用来执行我们的具体的SQL操作的 有三种基本的Executor执行器&#xff1a; SimpleExecutor简单执行器 每执行一次update或select&#xff0c;就创建一个Statement对象&#xff0c;用完立刻关闭Statement对象 ReuseExecutor可重用执行器 可重复利用Statement…...

Wide Deep 模型:记忆能力与泛化能力

实验和完整代码 完整代码实现和jupyter运行&#xff1a;https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言 Wide & Deep 模型是一种结合了线性模型&#xff08;Wide&#xff09;和深度神经网络&#xff08;Deep&#xff09;的混…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...