第1章:Embedding基础——什么是Embedding?为什么需要Embedding?从One-hot到Dense Vector的演变
大家好,我是你们这门课的老朋友。
今天咱们来聊聊整个AI流水线的第一站——Embedding。说白了,就是怎么把现实世界里的文字、图片、用户ID这些乱七八糟的东西,变成计算机能理解的数字。
我刚开始接触这行的时候,也觉得这玩意儿挺玄乎的。但后来做了几个项目,踩了不少坑,才真正明白它有多重要。嗯,咱们今天就把这层窗户纸捅破。
1.1 什么是Embedding?
Embedding,翻译过来叫“嵌入”。听起来很学术,其实没那么复杂。
你想想看,计算机不认识“苹果”这个词,它只认识0和1。那怎么办?我们得给“苹果”找个数字身份。Embedding就是干这个的——它把每个离散的符号(比如一个词、一个商品ID)映射到一个连续的向量空间里。
这个向量,就是Embedding向量。它通常是一串浮点数,比如 [0.2, -0.5, 0.8, ...]。这串数字里,就藏着这个符号的“语义”。
核心理解:Embedding的本质是“语义的数值化”。它让相似的词在向量空间里离得近,不相似的词离得远。
举个例子。在训练好的词向量空间里,“国王”减去“男人”加上“女人”,结果会非常接近“女王”。这就是Embedding的魅力——它捕捉到了概念之间的关系。
1.2 为什么需要Embedding?
你可能会问:以前不是有One-hot编码吗?为什么非得用Embedding?
好问题。我当年也这么想过。咱们来对比一下。
1.2.1 One-hot编码的痛点
One-hot编码,就是把每个词用一个很长的向量表示,这个向量里只有一个位置是1,其他全是0。
比如词汇表里有10000个词,“苹果”可能是第5个词,那它的One-hot向量就是:
[0, 0, 0, 0, 1, 0, 0, ..., 0] # 长度10000
这有什么问题?问题大了去了。
- 维度灾难:词汇表越大,向量越长。10000个词就是10000维,算起来慢得要命。我做过一个电商推荐项目,商品ID有上百万个,用One-hot?内存直接爆炸。
- 语义鸿沟:“苹果”和“香蕉”的One-hot向量,距离是一样的。它们之间没有任何相似性。但明明都是水果啊!
- 稀疏性:向量里99.99%都是0,计算效率极低。
避坑指南:我曾经在一个文本分类项目里硬用One-hot,结果模型训练了三天都没收敛。后来换成Embedding,半天就搞定了。所以,别在稀疏向量上死磕。
1.2.2 Dense Vector的优势
Embedding生成的Dense Vector(稠密向量),正好解决了这些问题。
- 低维稠密:通常几十到几百维,计算快,内存占用小。
- 语义相似:相似的词,向量距离近。比如“苹果”和“香蕉”的向量会靠在一起。
- 可学习:Embedding向量不是拍脑袋定的,而是通过数据训练出来的。它能自动学到数据里的模式。
说白了,One-hot是“硬编码”,Embedding是“软编码”。后者更灵活,更聪明。
1.3 从One-hot到Dense Vector的演变
这个演变过程,其实反映了整个NLP领域的思想进步。我把它分成三个阶段。
1.3.1 第一阶段:独热编码(One-hot)
这是最原始的方法。每个词一个独立的ID,互不相干。
优点:简单,容易理解。
缺点:上面说过了,稀疏、无语义、维度高。
1.3.2 第二阶段:词袋模型(Bag of Words)
这个稍微进步了一点。它统计每个词在文档中出现的次数,形成一个向量。
比如“我喜欢苹果,也喜欢香蕉”,向量可能是:
{“我”:1, “喜欢”:2, “苹果”:1, “也”:1, “香蕉”:1}
但它仍然丢失了词序信息,而且向量依然稀疏。
1.3.3 第三阶段:分布式表示(Distributed Representation)
这就是我们今天说的Embedding。它的核心思想是:一个词的语义,由它周围的词决定。
这句话怎么理解?你想想看,“苹果”这个词,如果它经常和“吃”、“甜”、“水果”一起出现,那它大概率就是水果。如果它经常和“手机”、“系统”、“应用商店”一起出现,那它大概率就是那个科技公司。
Embedding就是通过这种“上下文”信息,来学习每个词的向量表示。
个人经验:我在做推荐系统时,把用户点击过的商品序列当作“上下文”,训练出商品的Embedding。结果发现,经常被一起购买的商品(比如啤酒和尿布),它们的向量距离确实很近。这就是分布式表示的力量。
1.4 一个简单的对比表格
为了让你看得更清楚,我整理了一个表格:
| 特性 | One-hot编码 | Dense Embedding |
|---|---|---|
| 向量维度 | 等于词汇表大小(通常很大) | 自定义(通常几十到几百) |
| 向量稀疏性 | 极度稀疏(几乎全是0) | 稠密(全是非0浮点数) |
| 语义关系 | 无法表达 | 可以表达相似性、类比关系 |
| 可学习性 | 固定,不可学习 | 通过训练数据学习 |
| 计算效率 | 低(高维稀疏矩阵运算) | 高(低维稠密矩阵运算) |
| 典型应用 | 早期统计模型 | 深度学习模型(NLP、推荐、CV) |
1.5 小结
好了,咱们来捋一捋。
- Embedding就是把离散符号变成稠密向量的技术。
- 它解决了One-hot的维度灾难和语义鸿沟问题。
- 它的核心思想是“分布式表示”——通过上下文学习语义。
我个人习惯把Embedding看作是AI的“通用语言”。不管你是做文本、图像还是用户行为,最终都要先转成Embedding,才能喂给模型。这一步做不好,后面全是白搭。
下一章,咱们会深入聊聊Embedding是怎么训练出来的。到时候我会拿Word2Vec开刀,带你手撕代码。敬请期待。