大模型原理:文本分词(将输入文本分割为独立的词元)

介绍

将 输入文本 分割为独立的 词元,这是为大语言模型生成嵌入向量所必需的预处理步骤。

词元

既可以是 单个单词,也可以是包括标点符号在内的 特殊字符,如图:

编写分割程序

编写程序,将 输入文本 分割为 词元化文本,如下图:

import re
text = "Hello, world. Is this-- a test?"
# 根据 ,.:;?_!"()  \'  -- 以及空格、tab分割文本
result = re.split(r'([,.:;?_!"()\']|--|\s)', text)
# 去掉多余的空格
result = [item for item in result if item.strip()]
print(result)

执行结果:

['Hello', ',', 'world', '.', 'Is', 'this', '--', 'a', 'test', '?']

分词方法已成功实现了将文本分割为 单个单词 和 标点符号,这里文本被分割成10个独立的词元

注意:这里是将 空白字符 直接移除,目的是 减轻内存和计算的负担。但有时,需要 保留空白字符,如:Python代码对 缩进 和 空格 具有高敏感性。

准备文本文件

使用Edith Wharton的短篇小说《The Verdict》,详见链接:
https://gitee.com/65242847/large-model/blob/master/the-verdict.txt

预览文本文件

查看字符数,和前100个字符:

with open("the-verdict.txt", "r", encoding="utf-8") as f:
    raw_text = f.read()
print("字符总数:", len(raw_text))
print("预览前100个字符:", raw_text[:99])

目标

将这篇包含20479个字符的短篇小说分割为独立的单词和特殊字符,以便将其转换为嵌入向量,进而用于大语言模型训练。

提示:构建大语言模型需要处理数百万篇文章和成千上万本图书。这里为了学习,使用小规模的文本样本,主要是理解 文本处理步骤

分割文本

import re

with open("the-verdict.txt", "r", encoding="utf-8") as f:
    raw_text = f.read()

# 根据 ,.:;?_!"()  \'  -- 以及空格、tab分割文本
result = re.split(r'([,.:;?_!"()\']|--|\s)', raw_text)
# 去掉多余的空格
result = [item for item in result if item.strip()]
print("单词数量:", len(result))
print(result[:99])

执行结果:

单词数量: 4690
['I', 'HAD', 'always', 'thought', 'Jack', 'Gisburn', 'rather', 'a', 'cheap']

分词器很好地处理了文本,因为所有单词和特殊字符都被整齐地分开了。


原文出处:/show_1GW2Vy13an5d.html