前面几节一直在介绍 token 相关的内容,相信你看到这里,对 token 肯定很了解了吧。如果对 token 本身还有其他疑问,可以在本文下留言。
本节开始,进入下一步骤,由 token 到数值的转换。该步骤大概包括几个重要的节点:
- 文本到数值
- 数值到词向量
- 词向量到 Transformer 可以直接处理的向量
以上3个步骤中,每一个其背后都有重要的意义和作用。
本节先介绍第一个步骤:文本到数值的转换。
为什么需要文本到数值的转换?
在之前介绍相关的内容时曾经说到过:计算机能处理的仅仅是数值(更精确点是二进制数据)。
在这里你就简单的理解为计算机只可以处理数值就可以了。
一张画着小狗的图像,计算机是如何可以识别出这是一只狗呢?
视觉模型处理这张图像时,处理的其实是图像像素之间的关系和特征(基于像素值),经过深层的神经网络,模型可以学习到像素之间的关系,并且提取出图像中物体的各种关键特征。
计算机对图像进行处理,是以像素值为基础单位的,同样的,计算机对文本语言进行处理,是以 token 为基本单位。
但是 token 是字符串呀,字符串在计算机芯片(处理器)的体系中是没有办法运算的。因此,让计算机能够完成运算的第一步,就是需要将 token 转换为数值。
这里有一个全程一站式的 Transformer 讲解和实战辅导,带你从零手写一个可对话的大模型,点击链接查看详情从零手写大模型实战
怎么转换呢?
通过词汇表。
自然语言模型(或大模型)的研究人员,首先需要收集大量的文本数据进行AI模型的训练,这些数据可能来自出版的书籍、新闻杂志、网站、社交媒体等等。
随后,将收集到的文本数据进行预处理,比如去除掉一些无用的信息、修正一些拼写错误、统一格式等等。
然后,将预处理过的文本进行分词,分词所用的算法和过程可以参考4、文本token化的过程是怎样的。
分词之后,便得到了一个由所有文本 token 组成的词汇表。当然这里还需要对此词汇表进行一些处理(比如使用统计的方法,将一些出现频率很高的 token 保留着词汇表中,将一些不常见或者频率非常低的词汇,从词汇表删除或者用其他的 token 来代替等等)。
总之,经过分词和处理之后,便可以得到一个可用的词汇表,这个词汇表便包含了所搜集的所有文本分词之后的 token 。
在很多大模型中,词汇表是一个文本文件,比如在 bert-base-uncased 模型中,词汇表为 vocab.txt 文件。
你可以通过以下命令来查看词汇表的大小和行数。
shell
$ wc -l vocab.txt // 查看 vocab.txt 的行数
30522 vocab.txt
可以看到,bert-base-uncased 模型的 vocab.txt 文件共有 30522 行,也就是说 bert-base-uncased 模型使用的词汇表中包含了 30522 个 token 。
这些 token 在 vocab.txt 中,具有唯一的序号:从 0 开始编码,一直到 30521,这样就完成了 token 字符串到数字的映射。
因此, token 映射到数值的第一步便是先映射到 token ID,也就是 token 在所构建的词汇表中的序号。
这么一听文本转换为数值是不是感觉挺简单的?
别急,这只是第一步,还有其他的步骤在后面再详细介绍。
这里,先来验证一下 token 在词汇表中的序号和通过程序获取的 token ID是否对应。
在《利用 Bert 将文本 token 化》这篇文章中,对 "I" (我)分词后仍然得到"I"(我),并且程序显示其 token ID 为1045。
通过查看 vocab.txt 文件的第 1045 行的 token ,发现确实是i(这里我打开 txt 文件的工具是从1排序的,所以显示为序号是 1046,词汇表中的 ID 是从 0 排序的)。
关于本节的内容,可以这么简单的理解:
计算机处理文本需要先将其转换为数值,于是就建立一个词汇表。
词汇表中的序号本身就是数值,每个序号对应一个tokne。
如此一来,词汇表就相当于一个字典,这个字典在计算机数值语言和人类语言之间架起了一座桥梁。
计算机在拿到数值后,就可以十分方便的进行后面的一列操作了。
我创建了一个《小而精的AI学习圈》知识星球,星球上有几十万字原创高质量的技术专栏分享,同时你也可以在星球向我提问。 点击这里,我们星球见! >>>
点击这里查看所有 AI 技术专栏