首页 > 解决方案 > 为什么我的微调 DistilGPT2 模型没有生成新行?

问题描述

我目前正在尝试微调 DistilGPT-2(使用 Pytorch 和 HuggingFace 转换器库)以完成代码完成任务。我的语料库排列如下示例:

<|startoftext|>
public class FindCityByIdService {
    private CityRepository cityRepository = ...
<|endoftext|>

我的第一次尝试是从转换器库中运行以下脚本:

python run_clm.py 
     --model_type=gpt2 \
     --model_name_or_path distilgpt2 \
     --do_train \
     --train_file $TRAIN_FILE \
     --num_train_epochs 100 \
     --output_dir $OUTPUT_DIR \
     --overwrite_output_dir \
     --save_steps 20000 \
     --per_device_train_batch_size 4 \

在进行了一些生成测试之后,我意识到该模型无法预测\ n任何给定的上下文。我想缺少一些预处理阶段或类似的东西。但是无论如何,我应该怎么做\ n才能按预期进行预测?

高频论坛问题

谢谢!!

标签: pytorchhuggingface-transformersgpt-2

解决方案


我想我找到了一个 hacky 解决方案。

run_clm.py变化中:

    def tokenize_function(examples):
        return tokenizer(examples[text_column_name])

至:

    def tokenize_function(examples):
        return tokenizer([example + "\n" for example in examples[text_column_name]])

最初构建数据集时,它按行拆分,而不在每行上保留换行符。然后该group_texts方法将它们连接成批次而不添加换行符。所以改变tokenize_function追加\n到每一行给我们这些换行符。

刚刚在我的微调工作中测试了这个变化,它奏效了!在生成的模型中生成换行符。


推荐阅读