对于语言模型微调(BERT 通过 Huggingface Transformers),输入文件的格式究竟应该如何设置?

nmi*_*nds 6 python pytorch bert-language-model huggingface-transformers

我想examples/run_lm_finetuning.py训练的 Bert 模型上使用Huggingface Transformers 存储库中的。然而,根据文档,语料库文件的结构并不明显(除了引用 Wiki-2 数据集)。我试过了

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

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

非常感谢和欢呼,

脑洞

den*_*ger 10

首先,我强烈建议在 Huggingface 库中将此作为一个问题打开,因为他们可能最有兴趣回答这个问题,并可能将其视为他们应该更新/澄清他们的文档的标志。

但是为了回答您的问题,似乎这个特定的示例脚本基本上返回 a LineByLineTextDataset(如果您传递--line_by_line给培训),否则返回 a TextDataset,请参阅 ll。脚本中的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)
Run Code Online (Sandbox Code Playgroud)

ATextDataset简单地将文本拆分为特定(标记)长度的连续“块”,例如,它将每 512 个标记(默认值)剪切您的文本。

Next Sentence Prediction 任务仅针对默认的 BERT 模型实现,如果我没记错的话(似乎与我在文档中找到的内容一致),不幸的是,它不是这个特定微调脚本的一部分。lm_finetuning据我所知,脚本中使用的 BERT 模型都没有使用该特定任务。