flyfish
如果让计算机理解人类语言- One-hot 编码(One-hot Encoding,1950s)
如果让计算机理解人类语言- 词袋模型(Bag of Words, BoW,1970s)
如果让计算机理解人类语言- Word2Vec(Word to Vector,2013)
如果让计算机理解人类语言- Qwen3 Embedding (2025)
人类的语言(文本)是由字符、词、句子构成的符号系统(比如“猫”“狗”“我爱自然”),但计算机的底层运算基于二进制(0和1),无法直接“理解”这些符号。。计算机本质是“数字处理器”,只能算数字,看不懂文字、听不懂语音。所以第一步必须把语言(词、句子等)转成数字(向量)——但如果这串数字只是随便编的(比如给“猫”标1,“狗”标2),计算机根本不知道“猫”和“狗”都是动物,也分不清“我吃苹果”和“苹果吃我”的区别。
这时候,“精准的向量”就像给数字“贴了语义标签”:比如让“猫”和“狗”的向量长得像(数字差异小),“猫”和“桌子”的向量差得远;让“我吃苹果”和“苹果被我吃”的向量接近(语义相似),“我吃苹果”和“苹果吃我”的向量差别大。这样计算机才能从数字里“读”出语言的真实意思。
很多我们依赖的AI功能,都得先让计算机“懂语义”:
如果向量不精准,这些活就干砸了:翻译可能驴唇不对马嘴,搜索结果全不相关,机器人答非所问。
语言单位的向量如果足够精准,就能像数字一样“计算”,而计算结果刚好能反映语义关系:
用数值向量更精准地表示语言单位,本质是给计算机装上“理解语言的工具”——让冰冷的数字变成能承载语义、逻辑、关系的“语言密码”,这样计算机才能从“只会算数字”升级到“能看懂、听懂、甚至用人类语言干活”(翻译、聊天、分析等)。
场景1:文本词汇编码
假设某文本任务的词汇表(类别全集)为:["苹果", "香蕉", "橙子", "葡萄"]
(共4个类别),则每个词的One-hot向量如下:
[1, 0, 0, 0]
(第0位为1,其余为0)[0, 1, 0, 0]
(第1位为1,其余为0)[0, 0, 1, 0]
(第2位为1,其余为0)[0, 0, 0, 1]
(第3位为1,其余为0)场景2:性别类别编码
若某统计任务的性别类别全集为:["男", "女", "未知"]
(共3个类别),则编码为:
[1, 0, 0]
[0, 1, 0]
[0, 0, 1]
“One-hot Encoding” 直译为“单热编码”,其名称源于对编码逻辑的形象描述:
One-hot编码是一种将离散类别特征(如文本中的词、物品标签、属性类别等非数值符号)转换为机器可识别的二进制数值向量的标准化方法。其核心规则可概括为:
One-hot编码没有单一的“发明者”,其思想是20世纪中期随着离散数据处理需求和早期统计学、计算机科学发展逐步形成的“共识性方法”。
20世纪50-60年代,计算机开始涉足统计分析(如人口普查、市场调研)和早期机器学习任务,需要处理大量非数值的离散符号(如“性别=男/女”“职业=教师/医生”“词=猫/狗”)。若直接用整数编码(如“男=1,女=2”),机器会错误解读“数值大小关系”(如误认为“女>男”),导致模型偏见。
为解决这一问题,研究者自然想到“用唯一位置标识类别”——每个类别在向量中独占一个维度,通过“1”标记存在,“0”标记不存在,既避免了虚假数值关系,又保证了类别唯一性。这种思路在20世纪70-80年代随着逻辑回归、决策树等模型的普及,逐渐成为处理离散自变量的“标准操作”,被写入早期统计学教材(如《应用回归分析》)和编程实践中。 它是人类对“离散符号→数值转换”问题的最直观解决方案。
One-hot向量的“正交性”(任意两个不同向量的点积为0)导致它无法捕捉类别之间的语义关联——即使两个类别在现实中高度相关(如同属一类、有相似属性),它们的编码向量也会表现为“毫无关系”。
例子:水果与动物的词汇编码
假设某任务的词汇表(类别全集)为:["苹果", "香蕉", "老虎", "狮子"]
(共4个词),它们的One-hot向量如下:
[1, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 1, 0]
[0, 0, 0, 1]
从语义上看:
但从One-hot向量的角度:
1×0 + 0×1 + 0×0 + 0×0 = 0
;这意味着:在One-hot编码中,“苹果和香蕉的相似度”与“苹果和老虎的相似度”完全一样(都是0),完全违背了人类对“语义关联”的认知。模型通过这种向量学习时,无法利用“同类事物的共性”(比如“苹果和香蕉都可以吃”),只能孤立记忆每个类别,学习效率极低。
One-hot编码的向量维度严格等于“原始类别全集的大小”,且每个维度对应固定类别。当出现“原始全集之外的新类别”时,原有的编码规则无法兼容,必须重构向量维度,导致新旧数据无法统一处理,泛化能力极差。
例子:新增词汇的编码困境
延续上面的例子:假设原始词汇表是 ["苹果", "香蕉", "老虎", "狮子"]
(4个词),编码向量维度为4。
现在出现一个新词汇“橙子”(属于水果,但不在原始词汇表中):
["苹果", "香蕉", "老虎", "狮子", "橙子"]
(5个词);[1,0,0,0]
变为 [1,0,0,0,0]
;[0,1,0,0]
变为 [0,1,0,0,0]
;[0,0,0,0,1]
。这会导致两个问题:
这种“遇到新类别就必须重构编码规则”的特性,使其在动态场景(如实时更新的词汇表、不断新增标签的分类任务)中几乎无法使用。
感知机与二进制编码:1957年Frank Rosenblatt提出的感知机算法,作为最早的人工神经元模型,需要将输入数据转化为二进制形式。这一需求推动了将分类数据(如字符、类别)映射为二进制向量的技术探索。
计算机系统的底层需求:早期计算机(如IBM的系统)处理分类数据时,已开始使用类似“一位有效”的编码方式(如用特定位表示状态),但未形成统一术语。
Dummy变量的数学基础:在统计学中,“虚拟变量”(Dummy Variables)的概念被用于回归分析,与One-Hot编码的原理类似。例如,1967年的最近邻算法已隐含了分类数据的数值化需求。
状态机设计的实践:1994年的论文明确提到在Verilog硬件描述语言中使用One-Hot编码设计状态机,此时该技术已成为工程实践的标准方法。
名称的正式确立:虽然具体年份难以考证,但“One-Hot编码”这一术语在20世纪90年代后随着机器学习框架(如Scikit-learn)的发展逐渐普及,尤其在自然语言处理(NLP)中用于单词表示。
从硬件到软件的迁移:随着神经网络和深度学习的兴起,One-Hot编码成为预处理分类数据的标准步骤。例如,在词袋模型中,每个单词被映射为一个高维稀疏向量,仅对应位置为1,其余为0。