第 2 章  ·  Embedding(一)-从符号到数字

第2章 第1节 Embedding(一)-从符号到数字


第2章 第1节 Embedding(一)-从符号到数字

阅读指南

前面几节讨论了ChatGPT如何计算概率、预测下一个词。但有一个根本性问题还没有解答:计算机只能处理数字,文字是如何参与计算的?本节将看到向量如何用于语言,让语言变成可以运算的数学对象。

1.1 一个根本性的矛盾

一方面,人类的语言是符号系统:

"猫"、"cat"、"猫咪"

这些都是符号,本身没有数值意义,只是人类约定俗成的代表一种动物的记号。

Transformer是数值计算系统:

输入:数字 → 计算 → 输出:数字

它只能做加减乘除,不能直接处理"猫"这个字。如何让Transformer处理语言?

1.2 One-Hot编码

第一次尝试:One-Hot编码

最直观的想法是给每个词分配一个编号。假设词表只有5个词:

猫、狗、喜欢、吃、鱼

用One-Hot编码,每个词用一个5维向量表示,只有对应位置是1,其余都是0:

词表    向量表示
─────────────────────────────
猫   =  [1, 0, 0, 0, 0]  ← 第1位是1
狗   =  [0, 1, 0, 0, 0]  ← 第2位是1
喜欢 =  [0, 0, 1, 0, 0]  ← 第3位是1
吃   =  [0, 0, 0, 1, 0]  ← 第4位是1
鱼   =  [0, 0, 0, 0, 1]  ← 第5位是1

文字变成了数字,可以交给Transformer处理。但这个方法有严重的问题。

1. 维度灾难

例子中只有5个词,需要5维向量。GPT-3的词表有约50000个token,意味着每个词需要一个50000维的向量,其中49999个是0,只有1个是1,极其浪费。

2. 丢失语义信息

这种编码方式把所有词看作完全独立、没有关系的个体。计算两个向量的相似度(余弦相似度,详见本节补充说明):

词对      相似度计算                      结果
──────────────────────────────────────────────
(猫, 狗)  [1,0,0,0,0] · [0,1,0,0,0]  =  0
(猫, 鱼)  [1,0,0,0,0] · [0,0,0,0,1]  =  0
(猫, 吃)  [1,0,0,0,0] · [0,0,0,1,0]  =  0

所有词之间的相似度都是0。"猫"和"狗"都是动物,应该有相似性。One-Hot编码把词变成了数字,但丢失了词的"意义"。

类似给每个人分配一个身份证号,号码确实能区分人,但无法反映"这两个人是兄弟"、"那两个人是大学同学"这些信息。

1.3 革命性的解决方案:Embedding

2013年,Google研究员Tomas Mikolov提出了Word2Vec。

"Embedding"的字面意思是"嵌入",就像把宝石嵌入戒指,这里把高维的词符号"嵌入"到低维的向量空间里。核心思想很简单:

不要用稀疏的、高维的、孤立的向量表示词,而是用稠密的、低维的、充满语义的向量表示词。

从50000维降到12288维

不用One-Hot的50000维,而是把每个词表示成12288维的向量(GPT-3的实际选择)。这12288个数字不是只有1个1其余都是0,而是每个位置都有意义:

猫 = [0.2, -0.5, 0.7, 0.1, -0.3, ..., 0.4] ← 12288个小数

这12288个数字共同编码了"猫"的多维语义:它是一种动物(生物属性)、有四条腿(形态特征)、常常和"鱼"一起出现(共现关系)、会"喜欢"、"抓"、"睡觉"(行为特征)。

这就是Embedding:把高维稀疏的符号,嵌入到低维稠密的向量空间里。

One-Hot就像身份证号

假设用身份证号来表示一个人:

人物    身份证号
──────────────────────────
张三    110101199001010001
李四    110101199002020002
王五    110101199003030003

这些号码确实能区分不同的人,但无法从号码看出张三和李四是兄弟、李四和王五是同事、张三和王五有相似的爱好。

Embedding就像DNA

不用身份证号,而是用一个"特征向量"来表示一个人:

特征    身高   体重   智商   情商   运动   艺术
─────────────────────────────────────────────────
张三    175    70     120    85     6      3
李四    173    68     118    88     7      2   ← 和张三很相似
王五    165    60     95     120    3      9   ← 完全不同的类型

现在可以计算相似度了。One-Hot只能区分,不能比较。Embedding既能区分,又能比较,还能计算相似度。

这些特征不是人工设定的,而是自动学习出来的。模型在训练过程中,自动发现哪些维度对预测下一个词最有用,然后把词的语义"压缩"到这些维度里。

基于统计学习的方法(如Embedding)之所以有效,正是因为让模型自己从数据中学习语义表示,而非人工设定规则。

1.4 下一节预告

现在知道了Embedding如何解决One-Hot的问题:用低维稠密向量替代高维稀疏向量。但这些向量有什么神奇的性质?它们是怎么学会语义的?

下一节将看到,词向量竟然能做代数运算:"国王 - 男人 + 女人 = 女王"。

1.5 ■ 学点英语

中文 English 音标 说明
嵌入 Embedding /ɪmˈbedɪŋ/ 将高维稀疏的符号映射到低维稠密向量空间的技术
独热编码 One-Hot Encoding /wʌn hɒt ɪnˈkəʊdɪŋ/ 每个词用一个只有一位为1其余为0的向量表示的编码方式
词表 Vocabulary /vəˈkæbjʊleri/ 模型能处理的所有Token的集合
向量 Vector /ˈvektər/ 一组有序的数字,用于表示词在语义空间中的位置
语义空间 Semantic Space /sɪˈmæntɪk speɪs/ 词向量分布的高维空间,语义相近的词在空间中距离近
维度灾难 Curse of Dimensionality /kɜːrs əv daɪˌmenʃəˈnæləti/ 高维向量导致计算和存储开销剧增的问题
余弦相似度 Cosine Similarity /ˈkoʊsaɪn ˌsɪməˈlærəti/ 衡量两个向量方向相近程度的指标,值域[-1,1]

1.6 ■ 思考帧

来自: 学习中心|逻辑帧 Logic Frame

语言模型(四)-大语言模型与对话系统 Embedding(二)-词向量的魔法
本节目录