llamafactory读取数据集详细源码追溯

首先追溯到workflow.py中的run_sft函数中,可以看到

dataset_module = get_dataset(model_args, 
data_args, training_args, stage="sft", **tokenizer_module)

追溯函数get_dataset到data/loader.py

可以看到template登场,经过手动输出测试,这里的data_args.template就是我们在webui上advanced configuration中的数据模版.

这个template对象Template类的一个对象,整合了tokenizer。(也就是说这里的template可以直接看成tokenizer)

接下来在loader.py中找到加载原始数据集的代码

追溯函数_get_merged_dataset

发现关键代码datasets.append(_load_single_dataset())

追溯_load_single_dataset

在_load_single_dataset中找到对原始数据集路径拼接的代码

发现加载原始数据集的函数load_dataset()

load_dataset()是transformer库函数,不赘述。

这段代码对原始数据集进行分批次处理。

这里print的结果也说明这是原始数据集,内部数据的结构和json文件中的一摸一样

追溯关键函数align_dataset() 到data/aligner.py

这里的关键函数conver_alpaca定义了一个重要的功能函数

convert_func = partial(convert_alpaca, 
dataset_attr=dataset_attr, data_args=data_args)

追溯到convert_alpaca

发现此函数是将Alpaca格式的数据集转换为标准数据集格式的函数

转换后的数据集结构由这五项组成。

最后align_dataset中的dataset.map方法返回转换为标准数据集格式的数据集。

回到data/loader.py中的get_dataset函数中的这段代码,获得标准数据集格式的数据集。

接下来对标准数据集格式的数据集进行预处理

函数_get_preprocessed_dataset()的流程与conver_alpaca类似,将标准数据集转换为template格式的数据集。

终端中的eval/training example数据就来自这里.

这里也是数据集的最终可读形式,之后会进行数据集分割和移动操作

总结:llamafactory目前支持两种数据集格式Alpaca和Sharegpt,自定义数据集时按这两种数据集格式建立,llamafactory在读入这两种格式的数据集后会将其转换为标准数据集格式,然后再根据指定的template格式将其转换为对应的template格式,以方便地实现数据集的复用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值