-
Notifications
You must be signed in to change notification settings - Fork 142
预处理
usage: preprocess.py [-h] --corpus_path CORPUS_PATH
[--dataset_path DATASET_PATH]
[--tokenizer {bert,bpe,char,space,xlmroberta,image,text_image}]
[--vocab_path VOCAB_PATH] [--merges_path MERGES_PATH]
[--spm_model_path SPM_MODEL_PATH]
[--do_lower_case {true,false}]
[--vqgan_model_path VQGAN_MODEL_PATH]
[--vqgan_config_path VQGAN_CONFIG_PATH]
[--tgt_tokenizer {bert,bpe,char,space,xlmroberta}]
[--tgt_vocab_path TGT_VOCAB_PATH]
[--tgt_merges_path TGT_MERGES_PATH]
[--tgt_spm_model_path TGT_SPM_MODEL_PATH]
[--tgt_do_lower_case {true,false}]
[--processes_num PROCESSES_NUM]
[--data_processor {bert,lm,mlm,bilm,albert,mt,t5,cls,prefixlm,gsg,bart,cls_mlm,vit,vilt,clip,s2t,beit,dalle}]
[--docs_buffer_size DOCS_BUFFER_SIZE]
[--seq_length SEQ_LENGTH]
[--tgt_seq_length TGT_SEQ_LENGTH]
[--dup_factor DUP_FACTOR]
[--short_seq_prob SHORT_SEQ_PROB] [--full_sentences]
[--seed SEED] [--dynamic_masking] [--whole_word_masking]
[--span_masking] [--span_geo_prob SPAN_GEO_PROB]
[--span_max_length SPAN_MAX_LENGTH]
[--sentence_selection_strategy {lead,random}]
用户必须在预训练之前对语料进行预处理。 在单台机器上进行预处理的示例:
python3 preprocess.py --corpus_path corpora/book_review_bert.txt --vocab_path models/google_zh_vocab.txt \
--dataset_path dataset.pt --processes_num 8 --dynamic_masking --data_processor bert
预处理的输出为dataset.pt(--dataset_path),作为pretrain.py的输入。 当使用多台机器进行预训练的时候,用一台机器执行preprocess.py,然后将得到的dataset.pt拷贝到其他机器之上。
我们需要在预处理阶段指定输出dataset.pt的数据格式(--data_processor),因为不同的预训练模型在预训练阶段需要不同的数据格式。TencentPretrain支持多种预训练数据格式,例如:
- lm:语言模型
- mlm:遮罩语言模型
- cls:分类
- bilm:双向语言模型
- bert:遮罩语言模型+下一个句子预测
- albert:遮罩语言模型+句子顺序预测
- prefixlm:前缀语言模型
注意到我们指定的语料(--corpus_path)的格式应该和指定的预训练模型要求的数据格式(--data_processor)相匹配。更多的例子可以在预训练模型使用示例章节中找到。
--processes_num 指定预处理进程的数量。多进程能缓解预处理的速度问题,但是更多的进程会消耗更多的内存。可以根据内存和CPU选择合适的进程数量。
--dup_factor 指定样本复制的次数(当使用静态遮罩策略)。静态遮罩在BERT中被使用。哪些单词被遮罩在预处理阶段就被指定好。
--dynamic_masking 指定加入动态遮罩策略。动态遮罩在RoBERTa中被使用。这种遮罩方式一般效果更好,并且预处理生成的文件(--dataset_path)会更小,因为无需进行样本的复制。
--full_sentences 表示允许样本包含跨文档的内容,直到最大长度。这一策略出自RoBERTa。
--span_masking 指定加入区域遮罩策略。区域遮罩在SpanBERT中被使用,指每个样本在进行遮罩时,遮罩连续多个tokens。如果使用静态遮罩,则 --span_masking 在预处理阶段指定;如果使用动态遮罩,则 --span_masking 在预训练阶段指定。
--docs_buffer_size 指定单进程缓存文档数量。更大的数量会消耗更多的内存,可以根据内存选择合适的缓存文档数量。
--seq_length 指定预训练样本的最大长度。最大长度需要在预处理阶段指定。如果是加载已有的预训练模型权重进行增量预训练,--seq_length 不能超过模型支持的最大长度(--max_seq_length)。
在预处理阶段还需要指定词典和分词方式,更多内容在分词和词典章节中讨论。