大模型训练时原始的文本资料是如何变成词向量的?
·
大模型训练时原始的文本资料是如何变成词向量的?
这个问题触及了所有自然语言处理模型的起点。将原始文本变成词向量的过程,通常被称为 “文本向量化” 或 “词嵌入”。这个过程经历了从简单到复杂,从“无知”到“有语义”的演进。
我们可以用以下流程图来概括这个核心过程:
下面我们来详细拆解图中的每一个步骤。
第一步:分词
首先,我们需要将连续的文本切分成模型能够处理的基本单元(称为 Token)。
- 英文示例:
"I don't like spiders."- 结果:
["I", "don", "'", "t", "like", "spiders", "."]
- 结果:
- 中文示例:
"我喜欢学习人工智能。"- 结果:
["我", "喜欢", "学习", "人工智能", "。"]
- 结果:
分词方式:
- 词级别:如上例。优点是语义明确,但词汇表可能很大,且无法处理未登录词。
- 子词级别:这是现代大模型(如BERT、GPT)的主流方法。它能很好地平衡语义和未知词问题。
- 例如,“spiders”可能被切分为
["spider", "s"]。 - “人工智能”可能被切分为
["人工", "智能"]。 - 常见的子词算法有 Byte-Pair Encoding, WordPiece。
- 例如,“spiders”可能被切分为
第二步:构建词汇表与初始映射
分词后,我们会得到一个包含所有可能出现的基本单元的词汇表。
- 词汇表:
{“我”: 1, “喜欢”: 2, “学习”: 3, “人工智能”: 4, “。”: 5, “[UNK]”: 6, ...}[UNK]是一个特殊的Token,用来表示词汇表中不存在的词。
接下来,我们需要将Token转化为数字。最初始、最简单的方法是 One-Hot 编码。
- One-Hot 编码:
- 假设词汇表大小为50,000。
- 每个词都被表示成一个长度为50,000的向量。
- 这个向量中,除了对应这个词的位置是1,其他所有位置都是0。
- 例如,“我” =
[1, 0, 0, 0, ..., 0] - “喜欢” =
[0, 1, 0, 0, ..., 0]
One-Hot编码的致命缺陷:
- 维度灾难:向量维度和词汇表一样大,非常稀疏且低效。
- 无法表示语义:任意两个词向量的点积都是0,模型无法从数字上知道“苹果”和“水果”比“苹果”和“飞机”更相关。这被称为 “词汇鸿沟”。
第三步:学习稠密词向量
为了解决One-Hot的问题,我们引入一个 嵌入层。
1. 嵌入层是什么?
- 它是一个可训练的查找表或全连接层。
- 它的尺寸是
(词汇表大小, 嵌入维度)。 - 嵌入维度 是一个远小于词汇表大小的数(如768、1024),用于定义一个稠密向量的长度。
2. 它是如何工作的?
想象一个巨大的表格:
| Token | 索引 | 嵌入向量 (维度=4,示例) |
|---|---|---|
| “我” | 1 | [0.2, -0.5, 0.9, 1.2] |
| “喜欢” | 2 | [1.1, 0.3, -0.1, 0.5] |
| “学习” | 3 | [0.8, -0.2, 0.4, 1.0] |
| “人工智能” | 4 | [-0.5, 1.3, 0.1, -0.8] |
- 当模型看到索引为
1的Token(“我”)时,它就去这个表格的第1行,取出对应的向量[0.2, -0.5, 0.9, 1.2]。 - 这个向量就是“我”这个词的初始词向量。
3. 关键:向量是如何变“聪明”的?
-
初始状态:这个嵌入表格中的数值在训练开始时是随机初始化的(是一些随机的小数)。
-
训练过程:当模型在完成它的主要任务(如预测下一个词、完形填空)时,它会通过反向传播和梯度下降算法,不断地调整这个嵌入表格里的每一个数字。
-
学习目标:调整的原则是——在语义上、语法上相似或相关的词,它们的向量在向量空间中的位置也应该靠近。
- 例如,通过训练,模型会学到:
- “猫”和“狗”都是宠物,它们的向量应该比较接近。
- “国王” - “男人” + “女人” ≈ “女王” 这种向量关系。
- 例如,通过训练,模型会学到:
总结:从原始文本到词向量的完整流程
- 输入:
“我喜欢学习” - 分词:
[“我”, “喜欢”, “学习”] - 查索引:
[1, 2, 3] - 通过嵌入层:
- 模型拿着索引
1,去嵌入表格里取出向量[0.2, -0.5, 0.9, ...]。 - 拿着索引
2,取出[1.1, 0.3, -0.1, ...]。 - 拿着索引
3,取出[0.8, -0.2, 0.4, ...]。
- 模型拿着索引
- 输出: 一个包含三个稠密向量的序列,每个向量都代表了对应词的语义信息。这个序列将被送入Transformer等后续模型中进行进一步处理。
所以,词向量不是人为设计好的,而是模型在完成特定任务的过程中,自己学习出来的一种对语言的数值化、分布式表示。它是整个深度学习模型能够理解语言的基础。
更多推荐
所有评论(0)