BERT模型入门(12)字节对编码(Byte Pair Encoding,BPE)
文章目录
让我们通过一个例子来理解字节对编码(BPE)是如何工作的。假设我们有一个数据集。首先,我们从数据集中提取所有单词及其计数。假设从数据集中提取的单词及其计数为(cost, 2)、(best, 2)、(menu, 1)、(men, 1)和(camel, 1)。
现在,我们将所有单词拆分成字符并创建一个字符序列。以下表格显示了带有计数的字符序列:
图2.19 – 带计数的字符序列
接下来,我们定义词汇表的大小。假设我们构建一个大小为14的词汇表。这意味着我们创建一个包含14个tokens的词汇表。现在,让我们了解如何使用BPE创建词汇表。
首先,我们将字符序列中出现的所有唯一字符添加到词汇表中,如下所示:
图2.20 – 使用所有唯一字符创建词汇表
我们可以观察到,我们的词汇表大小为11。现在,让我们看看如何向词汇表中添加新tokens。
要向词汇表中添加新tokens,首先,我们识别最频繁的符号对。然后,我们将这个最频繁的符号对合并并添加到词汇表中。我们重复这个步骤,直到达到词汇表的大小。让我们详细理解这个过程。
通过观察以下字符序列,我们可以发现最频繁的符号对是s和t,因为符号对s和t出现了四次(在cost中两次,在best中两次):
图2.21 – 寻找最频繁的符号对
因此,我们合并符号s和t,并将其添加到词汇表中,如下所示:
图2.22 – 合并符号s和t
现在,我们重复相同的步骤。也就是说,我们再次检查最频繁的符号对。我们可以观察到,现在我们最频繁的符号对是m和e,因为它们出现了三次(在menu中一次,在men中一次,在camel中一次):
图2.23 – 寻找最频繁的符号对
所以,我们合并符号m和e,并将其添加到词汇表中,如下所示:
图2.24 – 合并符号m和e
再次,我们检查最频繁的符号对。我们可以观察到,现在我们最频繁的符号对是me和n,因为它们出现了两次(在menu中一次,在men中一次):
图2.25 – 寻找最频繁的符号对
所以,我们合并符号me和n,并将其添加到词汇表中,如下所示:
图2.26 – 合并符号me和n
这样,我们重复这个步骤多次,直到达到词汇表的大小。从前面的图中,我们可以观察到现在我们的词汇表有14个tokens。由于在这个例子中,我们创建的是大小为14的词汇表,所以我们在这个步骤停止。
因此,从给定的数据集中,我们构建了一个包含14个tokens的词汇表:
词汇表vocabulary = {a, b, c, e, l, m, n, o, s, t, u, st, me, men}
BPE涉及的步骤如下:
(1)从给定的数据集中提取单词及其计数。
(2)定义词汇表的大小。
(3)将单词拆分为字符序列。
(4)将字符序列中的所有唯一字符添加到词汇表中。
(5)选择并合并高频的符号对。
(6)重复步骤5直到达到词汇表的大小。
我们了解了如何使用BPE构建词汇表。那么,这个词汇表如何使用呢?我们使用词汇表来对给定的输入进行分词。让我们在下一节中通过几个例子来理解这个概念。
感谢您的阅读,欢迎关注!