tokenizer

·

大模型本质上做的是数学运算,它并不能直接理解人类输入的文本、符号或代码,只能处理数字表示;分词器正是负责把这些输入转换成词元(token)及其编号的关键模块。

注:个人认为词元这个翻译比较好听

1. 概念简述

为了直观地理解,我们以中文为例,选择最基础的“按字分词”的策略,看看分词器如何工作。

面对一段中文文本(例如:我爱中国),分词器按照指定规则(此处为按字切分)将文本拆解成独立的元素,即词元(token),切分后的 tokens:["我", "爱", "中", "国"]。

仅仅分词是不够的,还需要将 token 转化为数字。分词器内部有一个预定义的词表,它记录了已知所有词元及其对应的唯一编号,(假设在词表中,“我”=105, “爱”=321, “中”=56, “国”=89),则转换后的编号(Token IDs)为 [105, 321, 56, 89]

至此原文本变成了可计算的数字序列。

总结:分词器的目的就是将原文本按照某种给定规则划分成词元,得到词元编号序列。

2. 经典做法

上述例子只是开胃菜,要想自己训一个大模型(小的大模型),还是需要了解一些业界的分词器的,下面将从代码实现角度讲解。

2.1 BPE(Byte Pair Encoding)

paper:http://www.pennelynn.com/Documents/CUJ/HTML/94HTML/19940045.HTM

代码实现 https://github.com/MLNLP-World/LLMs-from-scratch-CN/blob/main/ch02/05_bpe-from-scratch/bpe-from-scratch.ipynb