3.2 KiB
本目录提供辅助模型训练的一些工具,文件结构如下所示:
├── transformers # 适配hugging face的transformers的一些工具
│ ├── configuration_internlm.py # config适配工具
│ ├── modeling_internlm.py # model适配工具
│ ├── tokenization_internlm.py # tokenizer适配工具
│ └── convert2hf.py # 模型适配hugging face工具
└── tokenizer.py # 将原始数据转换成bin和meta文件的工具
tokenizer.py
生成原始数据的bin和meta文件需要使用tokenizer,我们通过在tools/tokenizer.py中指定模型参数路径的方式来导入tokenizer模型。目前我们提供了V7_sft.model来生成tokens。若想使用不同的模型,可直接修改tokernizer.py中的模型参数路径。
可以运行以下命令生成原始数据对应的bin和meta文件,其中参数text_input_path表示原始文本数据路径,目前支持txt、json和jsonl三种输入格式,bin_output_path表示生成的bin文件的保存路径。
$ python tools/tokenizer.py --text_input_path your_input_text_path --bin_output_path your_output_bin_path
下面是一个数据处理的例子:
给定一个包含原始数据集的文件raw_data.txt,原始数据集如下所示:
感恩生活中的每一个细节,才能真正体会到幸福的滋味。
梦想是人生的动力源泉,努力追逐,才能实现自己的目标。
学会宽容和理解,才能建立真正和谐的人际关系。
可以通过运行以下命令来生成bin和meta文件:
$ python tools/tokenizer.py --text_input_path raw_data.txt --bin_output_path cn/output.bin
需要注意的是,生成的bin文件需要保存在cn或者en或者code或者ja或者ar或者kaoshi这五个目录下,以区分数据集的类型。
其中,cn表示中文数据集;en表示英文数据集;code表示代码数据集;ja表示日语数据集;ar表示阿拉伯语数据集;kaoshi表示考试数据集。
生成的bin文件的格式如下:
{"tokens": [73075, 75302, 69522, 69022, 98899, 67713, 68015, 81269, 74637, 75445, 99157]}
{"tokens": [69469, 60355, 73026, 68524, 60846, 61844, 98899, 67775, 79241, 98899, 67713, 67800, 67453, 67838, 99157]}
{"tokens": [68057, 79017, 60378, 68014, 98899, 67713, 67990, 68015, 70381, 67428, 61003, 67622, 99157]}
bin文件中的每一行均对应原始数据集中的每一个句子,表示每个句子的token(下文将用sequence指定)。
生成的meta文件的格式如下:
(0, 11), (90, 15), (208, 13)
在meta文件中,每个元组对应着bin文件中每一个sequence的元信息。其中,元组的第一个元素表示每个sequence在所有sequence中的starting index,第二个元素表示每个sequence中有多少个tokens。
例如,对于第一个sequence,starting index为 0,有 11 个tokens;对于第二个sequence,由于第一个sequence转换为string后的长度为89,因此它的starting index为 90,有 15 个tokens。
json和jsonl类型的文件的bin和meta文件格式和txt一致,此处不再赘叙。