pytorch - 为什么我的微调 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
才能按预期进行预测?
谢谢!!
解决方案
我想我找到了一个 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
到每一行给我们这些换行符。
刚刚在我的微调工作中测试了这个变化,它奏效了!在生成的模型中生成换行符。
推荐阅读
- ionic3 - 如何从 API 调用中获取属性?
- python - GeoAlchemy 中所有 Shapely 类型的一列
- python - Python - 使用 GetRows() 函数时出现 EOF/BOF 异常(来自 MDX 查询)
- date - 将毫秒转换为日期以与今天的日期进行比较
- mongodb - 来自 mongoDB 中嵌套对象数组的项目字段
- php - Composer 内存不足 - 需要其他方法来增加 PHP memory_limit
- sql - 添加附加列以计算现有列的出现次数
- php - 如何从 laravel mongodb 中的原始表达式中获取结果?
- java - 在android中设置壁纸时如何打开“设置为”菜单
- android - ValueAnimator 使用 Button 但不使用 LinearLayout