Pytorch 为什么没有新线';使用微调的DistilGPT2模型生成t?

Pytorch 为什么没有新线';使用微调的DistilGPT2模型生成t?,pytorch,huggingface-transformers,gpt-2,Pytorch,Huggingface Transformers,Gpt 2,我目前正在尝试微调DistilGPT-2(使用Pytorch和HuggingFace transformers库)以完成代码完成任务。我的语料库安排如下示例所示: <|startoftext|> public class FindCityByIdService { private CityRepository cityRepository = ... <|endoftext|> 在做了一些生成测试之后,我意识到该模型并没有预测任何给定上下文的\n。我认为缺少一些

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

<|startoftext|>
public class FindCityByIdService {
    private CityRepository cityRepository = ...
<|endoftext|>
在做了一些生成测试之后,我意识到该模型并没有预测任何给定上下文的
\n
。我认为缺少一些预处理阶段或类似的东西。但是无论如何,我应该怎么做才能像预期的那样预测
\n


谢谢

我想我找到了一个解决办法

run_clm.py
change中:

def tokenize_函数(示例):
返回标记器(示例[文本\列\名称])
致:

def tokenize_函数(示例):
返回标记器([example+“\n”例如在examples[text\u column\u name]]中)
最初构建数据集时,它会将数据集按行拆分,而不会在每行保留换行符。然后,
group\u text
方法将它们连接成批,而不添加换行符。因此,将
tokenize\u函数
更改为将
\n
附加到每一行,我们就可以返回这些新行


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

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

run_clm.py
change中:

def tokenize_函数(示例):
返回标记器(示例[文本\列\名称])
致:

def tokenize_函数(示例):
返回标记器([example+“\n”例如在examples[text\u column\u name]]中)
最初构建数据集时,它会将数据集按行拆分,而不会在每行保留换行符。然后,
group\u text
方法将它们连接成批,而不添加换行符。因此,将
tokenize\u函数
更改为将
\n
附加到每一行,我们就可以返回这些新行


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

是否尝试在训练数据中添加“\n”?我认为,只有当模型在训练数据中看到它时,它才能学会预测它。试图微调gpt2也有同样的问题。我的训练文件中有新行,但是从结果模型生成的任何东西都没有新行。看起来可能是从训练数据中删除了换行符?但我目前在代码中找不到任何证据。是否尝试在培训数据中添加“\n”?我认为,只有当模型在训练数据中看到它时,它才能学会预测它。试图微调gpt2也有同样的问题。我的训练文件中有新行,但是从结果模型生成的任何东西都没有新行。看起来可能是从训练数据中删除了换行符?但我目前在代码中找不到任何证据。这也可以通过将
csv
文件传递到
run\u clm.py
而不是
txt
来解决。如果其
text
列中的文本包含换行符,它们也将出现在生成的输出中。此外,如果数据集由不相关的短文本组成,这可能会减少验证损失,因为示例将更自然地拆分。还可以通过将
csv
文件传递到
run\u clm.py
而不是
txt
来解决此问题。如果其
text
列中的文本包含换行符,它们也将出现在生成的输出中。此外,如果数据集由不相关的短文本组成,这可能会减少验证损失,因为示例将更自然地分割。
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 \