为语言模型微调(通过Huggingface变形金刚的BERT),应如何精确格式化输入文件?

时间:2020-01-31 10:02:31

标签: python pytorch huggingface-transformers bert-language-model

我想在预先训练的Bert模型中使用Huggingface Transformers repository中的examples/run_lm_finetuning.py。但是,从遵循文档的角度来看,语料库文件的结构(除了引用Wiki-2数据集之外)还不清楚。我尝试过

  • 每行一个文档(多句话)
  • 每行一句话。文档由空行分隔(我在一些较早的pytorch-transformers文档中找到了此行)

通过查看examples/run_lm_finetuning.py的代码,无法直接看出如何形成下一句预测目标的序列对。 --line-by-line选项在这里有帮助吗?如果有人能给我一些提示,文本语料库文件的外观,我将不胜感激。

非常感谢和欢呼,

nminds

1 个答案:

答案 0 :(得分:10)

首先,我强烈建议您也将其作为包含在拥抱库中的一个问题,因为他们可能最有兴趣回答此问题,并可能将其视为他们应该更新/阐明其文档的标志。 / p>

但是要回答您的问题,似乎这个特定的示例脚本基本上返回了LineByLineTextDataset(如果您将--line_by_line传递给了培训),或者返回了TextDataset,请参见二。 the script中的144-149(略有格式以提高可见度):

def load_and_cache_examples(args, tokenizer, evaluate=False):
    file_path = args.eval_data_file if evaluate else args.train_data_file
    if args.line_by_line:
        return LineByLineTextDataset(tokenizer, args, 
                           file_path=file_path, block_size=args.block_size)
    else:
        return TextDataset(tokenizer, args, 
                           file_path=file_path, block_size=args.block_size)

TextDataset只是将文本分成一定长度(令牌)的连续“块”,例如,它将每512个令牌(默认值)剪切一次文本。

如果我正确记得(似乎与我在the documentation中发现的内容一致),则仅对默认的BERT模型实施Next Sentence Prediction任务,并且不幸的是,它不属于此特定的微调脚本。 据我所知,lm_finetuning脚本中没有使用的BERT模型使用该特定任务。