wangyuxinwhy / uniem

unified embedding model

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

请问finetune的脚本支持多个数据集吗

hjq133 opened this issue · comments

commented

感谢作者的分享,非常棒的项目!

目前看起来Finetuner的接口只支持单个数据集作为输入:
RawDataset = Sequence[dict] | dict[str, Sequence[dict]] | HFDatasetDict | HFDataset
是这样吗?

是的,目前 FineTuner 只支持单个数据集作为输入。如果你有多个数据集,可以通过代码合并多个数据集或者使用 huggingface datasets 提供的 concatenate 或者 Interleave api ,将多个数据集进行合并。总之,支持多个数据集是比较容易的事情,需要对数据进行合并处理。

commented

是的,目前 FineTuner 只支持单个数据集作为输入。如果你有多个数据集,可以通过代码合并多个数据集或者使用 huggingface datasets 提供的 concatenate 或者 Interleave api ,将多个数据集进行合并。总之,支持多个数据集是比较容易的事情,需要对数据进行合并处理。

感谢作者的回复!不过concatenate似乎是只是用来合并同类数据的。例如,训练数据里既含有score pair数据,也有含有pair类数据,这两类数据在loss上的计算行为也是不一样的。我对NLP的pretrain了解得不多,请问SentenceModel的pretrain通常会出现这种情况吗?

我之前理解成了同质的多个数据集 。如果是异质数据的情况,其实在预训练或者微调阶段并不多见,所以需要你自己写一些代码来实现这个需求。和你这种情况类似的是 Multi-Task Learning 中的 hard parameter sharing 策略。可以参考 ruder 的这篇 综述 。简单来讲,你需要仔细的构造数据集和采用一些策略来平衡不同种类的 loss ,但由于不同数据集的目标是相同的,所以不会遇到多任务学习中的 “跷跷板” 问题,所以会更简单一些。

另外,如果你的数据集是由 ScoredPairRecord 和 PairRecord 构成的,也可以尝试把 PairRecord 转换成 ScoredPairRecord,只不过这个相似度的分数需要通过一些策略来指定。

commented

感谢回复,理解啦!