Skip to content

预处理

zhezhaoa edited this page Aug 14, 2023 · 15 revisions
usage: preprocess.py [-h] --corpus_path CORPUS_PATH
                     [--dataset_path DATASET_PATH]
                     [--tokenizer {bert,bpe,char,space,xlmroberta}]
                     [--vocab_path VOCAB_PATH] [--merges_path MERGES_PATH]
                     [--spm_model_path SPM_MODEL_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]
                     [--processes_num PROCESSES_NUM]
                     [--data_processor {bert,lm,mlm,bilm,albert,mt,t5,cls,prefixlm,gsg,bart}]
                     [--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),因为不同的预训练模型在预训练阶段需要不同的数据格式。UER-py支持多种预训练数据格式,例如:

  • 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)。

在预处理阶段还需要指定词典和分词方式,更多内容在分词和词典章节中讨论。

Clone this wiki locally