从One-Hot到Embedding:用torch.nn实现文本向量化的完整避坑指南

从One-Hot到Embedding:用torch.nn实现文本向量化的完整避坑指南

在自然语言处理领域,如何将离散的文本符号转化为连续的数值表示一直是核心挑战。传统One-Hot编码的局限性促使了Embedding技术的崛起,而PyTorch中的torch.nn.Embedding模块则为这一转换提供了高效实现。本文将深入解析从基础概念到实战优化的完整技术链条。

1. 文本表示演进:从One-Hot到分布式表示

One-Hot编码曾是处理类别数据的标准方法。假设我们有一个包含5个单词的词汇表:["我","爱","深度","学习","NLP"],其One-Hot表示如下:

import torch
vocab = {"我":0, "爱":1, "深度":2, "学习":3, "NLP":4}
one_hot = torch.eye(len(vocab))
print(one_hot)

输出:

tensor([[1., 0., 0., 0., 0.],
        [0., 1., 0., 0., 0.],
        [0., 0., 1., 0., 0.],
        [0., 0., 0., 1., 0.],
        [0., 0., 0., 0., 1.]])

这种表示方式存在三个致命缺陷:

  • 维度灾难:词汇量增长直接导致维度爆炸
  • 语义缺失:所有向量正交,无法表达词义关联
  • 存储浪费:99%以上的元素为0,内存利用率极低

分布式表示通过低维稠密向量解决了这些问题。下表对比两种表示:

特性 One-Hot编码 Embedding表示
维度 词汇表大小 自定义(通常50-1024)
语义表达 可学习语义关系
内存占用 极高 极低
计算效率
支持预训练

2. torch.nn.Embedding核心机制解析

PyTorch的Embedding层实质上是一个可训练的查询表:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值