赞
踩
conda -create gpt_cn python=3.7
conda activate gpt_cn
conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 -c pytorch
pip install -r requirements.txt
module 'distutils' has no attribute 'version'
pip uninstall setuptools
pip install setuptools==59.5.0
train.py
文件中,先测试一下 build_files
的功能,看看构造出来用于训练的数据集是什么样子的
bert
预训练模型文件夹中的 vocab.txt
文件,(如何从 huggingface 中下载 bert 的预训练模型可以参考 这篇文章)data
文件夹,并自己写一个简单的 train.json
文件放到里面作为测试
- 这个 train.json 中的内容作者给出了一个示例:就按照这种方式自己造点数据放进去就行
def build_files(data_path, tokenized_data_path, num_pieces, full_tokenizer, min_length): """ :param data_path: 原始训练语料,json 格式的数据 :param tokenized_data_path: tokenized语料存放位置 :param num_pieces: 将训练语料分成多少份 :param full_tokenizer: 使用的分词器,用 bpe 构造的或者使用 bert-base-chinese 模型的分词器 :param min_length: 最短收录文章长度 :return: """ with open(data_path, 'r', encoding='utf8') as f: print('reading lines') lines = json.load(f) lines = [line.replace('\n', ' [SEP] ') for line in lines] # 用[SEP]表示换行, 段落之间使用SEP表示段落结束 all_len = len(lines) if not os.path.exists(tokenized_data_path): os.mkdir(tokenized_data_path) for i in tqdm(range(num_pieces)): sublines = lines[all_len // num_pieces * i: all_len // num_pieces * (i + 1)] if i == num_pieces - 1: sublines.extend(lines[all_len // num_pieces * (i + 1):]) # 把尾部例子添加到最后一个piece sublines = [full_tokenizer.tokenize(line) for line in sublines if len(line) > min_length] # 只考虑长度超过min_length的句子 sublines = [full_tokenizer.convert_tokens_to_ids(line) for line in sublines] full_line = [] for subline in sublines: full_line.append(full_tokenizer.convert_tokens_to_ids('[MASK]')) # 文章开头添加MASK表示文章开始 full_line.extend(subline) full_line.append(full_tokenizer.convert_tokens_to_ids('[CLS]')) # 文章之间添加CLS表示文章结束 with open(tokenized_data_path + 'tokenized_train_{}.txt'.format(i), 'w') as f: for id in full_line: f.write(str(id) + ' ') print('finish')
if __name__ == '__main__':
# main()
from tokenizations import tokenization_bert_word_level as tokenization_bert
full_tokenizer = tokenization_bert.BertTokenizer(vocab_file='/Users/qinpeinuan/Desktop/清华/Bert/bert-base-chinese/vocab.txt')
build_files("./data/train.json", "./data/tokenized/", 1, full_tokenizer, 100)
data / tokenized
文件夹,其中放着经过 tokenize 处理之后的数据:Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。