我可以重新训练 AutoModelForSequenceClassification 以生成文本吗?

问题描述 投票:0回答:1

我的目标是微调 Mistral 7b 以编写短意识流(文本完成,而不是遵循指令)。

我有一个大型数据库(100 万行),其中包含从互联网上抓取的短文本。我手动将 15k 行标记为

good
(1k)和
bad
(其余 14k)示例。我的计划是在这些示例上训练
AutoModelForSequenceClassification
来标记其他 985k 行。

通过这种方式,我希望收集大约 2 万个意识流的好例子来微调 Mistral 7b。

但仅对

good
示例进行微调并没有使用
bad
示例中的信息,这些示例的数量要多得多。因此,我正在考虑使用 Mistral 7b 作为
AutoModelForSequenceClassification
的基础模型(在 this Medium post 之后),然后重新训练生成的
AutoModelForSequenceClassification
以完成文本。这需要移除分类头并添加新的/重新训练的 LoRA 组件。

您认为这可行吗?这是否会削弱模型(例如,需要重新学习语法),或者这是否是将

bad
反例的信息合并到文本生成中的有效方法?或者至少为 LoRA 文本生成微调提供一个良好的初始化点?

machine-learning large-language-model mistral-7b
1个回答
0
投票

我建议使用 PEFT-LORA 方法来防止法学硕士的灾难性遗忘(以避免模型瘫痪)。您可以使用

SFTtrainer
或中等帖子中的
CustomTrainer
来训练执行您任务的适配器。并使用
adapter.load_adapter(checkpointpath)
代表您的
PeftModel
来完成特定任务。您现在也可以训练多个适配器并在多个适配器之间切换以进行推理,以便您可以针对多个特定于域的任务训练它。

  1. 使用

    AutoModelForSequenceClassification
    +
    Lora
    训练模型。选择表现良好的型号。

  2. 您可以从保存的检查点重新加载适配器。设置

    is_trainable=True
    并使用
    AutoModelForSequenceClassification
    进行文本完成任务的重新训练以完成文本。

你所拥有的是数据集中的类不平衡。~20k 好的和坏的数据应该足以执行 IMO 的微调。但我对你的任务的背景太少了,所以我对数据大小没有信心。

使用 Peft 适配器将帮助您使用 s-LORA 之类的工具在基本模型和 Peft 适配器之间切换,这样您就可以使用基本 Mistral 模型将基本模型用于其他形式的文本完成,并切换到 Peft 模型来执行特定于域的任务.

希望有帮助。如果您可以分享更多详细信息,我愿意提供进一步帮助。

© www.soinside.com 2019 - 2024. All rights reserved.