使用 Simple Transformers 微调预训练的语言模型

Posted

技术标签:

【中文标题】使用 Simple Transformers 微调预训练的语言模型【英文标题】:Fine tuning a pretrained language model with Simple Transformers 【发布时间】:2020-08-12 10:05:39 【问题描述】:

在他的文章“预训练变形金刚的语言模型微调”中,Thilina Rajapakse (https://medium.com/skilai/language-model-fine-tuning-for-pre-trained-transformers-b7262774a7ee) 提供以下代码 sn-p 用于使用库 simpletransformers 微调预训练模型:

from simpletransformers.language_modeling import LanguageModelingModel
import logging


logging.basicConfig(level=logging.INFO)
transformers_logger = logging.getLogger("transformers")
transformers_logger.setLevel(logging.WARNING)

train_args = 
    "reprocess_input_data": True,
    "overwrite_output_dir": True,


model = LanguageModelingModel('bert', 'bert-base-cased', args=train_args)

model.train_model("data/train.txt", eval_file="data/text.txt")

model.eval_model("data/test.txt")

然后他补充说:

我们假设您已将数据集中的所有文本合并为两个 文本文件 train.txt 和 test.txt 可以在 data/ 中找到 目录。

我有两个问题:

问题 1

上面突出显示的句子是否意味着整个语料库将被合并到一个文本文件中?那么假设训练语料库由 1,000,000 个文本文件组成,我们是否应该使用这样的代码将它们全部合并到一个文本文件中?

import fileinput
with open(outfilename, 'w') as fout, fileinput.input(filenames) as fin:
    for line in fin:
        fout.write(line)

问题 2

我认为我可以使用预训练模型:bert-base-multilingual-cased。对吗?

【问题讨论】:

【参考方案1】:

问题 1

是的,train_model()eval_model() 方法的输入需要是一个文件。

未来可能会支持从多个文件动态加载

问题 2

是的,您可以使用bert-base-multilingual-cased 模型。

您将找到更详细、更新的语言模型训练指南here。

来源 - 我是图书馆的创造者

【讨论】:

我也有同样的困惑。所以,只是为了确认。这是否意味着train.txt和test.txt实际上是同一个文件?

以上是关于使用 Simple Transformers 微调预训练的语言模型的主要内容,如果未能解决你的问题,请参考以下文章

BERT 微调的优化器和调度器

论文泛读199将预训练的 Transformers 微调为变分自动编码器

论文泛读199将预训练的 Transformers 微调为变分自动编码器

《SegFormer:Simple and Efficient Design for Semantic Segmentation with Transformers》论文笔记

《SegFormer:Simple and Efficient Design for Semantic Segmentation with Transformers》论文笔记

使用 Huggingface TFTrainer 类微调模型时如何指定损失函数?