"ModelScope中,改为jsonl了,但是报错以下错误,是什么原因? :Traceback (most recent call last):
File ""train.py"", line 26, in
output = sft_main(sft_args)
File ""/models/swift/swift/utils/run_utils.py"", line 31, in x_main
result = llm_x(args, kwargs)
File ""/models/swift/swift/llm/sft.py"", line 134, in llm_sft
train_dataset, val_dataset = get_dataset(
File ""/models/swift/swift/llm/utils/dataset.py"", line 1522, in get_dataset
dataset_dict = train_d.train_test_split(
File ""/opt/conda/lib/python3.8/site-packages/datasets/arrow_dataset.py"", line 557, in wrapper
out: Union[""Dataset"", ""DatasetDict""] = func(self, *args, kwargs)
File ""/opt/conda/lib/python3.8/site-packages/datasets/fingerprint.py"", line 481, in wrapper
out = func(dataset, args, *kwargs)
File ""/opt/conda/lib/python3.8/site-packages/datasets/arrow_dataset.py"", line 4441, in train_test_split
raise ValueError(
ValueError: With n_samples=1, test_size=0.01 and train_size=None, the resulting train set will be empty. Adjust any of the aforementioned parameters."
这个错误信息说明在尝试分割训练数据集(train_dataset)为训练集和验证集时遇到了问题。具体来说,错误提示指出由于参数配置,导致计算出的训练集样本数量为0,这是不允许的。错误信息的关键部分是:
ValueError: With n_samples=1, test_size=0.01 and train_size=None, the resulting train set will be empty. Adjust any of the aforementioned parameters.
n_samples=1:这通常不是直接设置的参数,可能是内部计算得到的样本数量,这里显示为1,可能是因为数据读取问题或数据量极小。
test_size=0.01:你试图将1%的数据作为验证集。
train_size=None:没有明确指定训练集大小,因此系统会自动计算以满足给定的测试集大小,但在这种情况下,由于总样本数非常少(或计算错误),导致无法分配非零大小的训练集。
解决这个问题的方法有几种:
增加数据量:确保你的数据集包含足够多的样本,以便在分配给定比例的验证集后,训练集仍能保留足够的样本用于训练。
调整test_size:如果你的数据集较小,可以考虑增大test_size的值,比如设置为0.1或更大,以保证训练集有足够的样本。
显式设置train_size:你可以直接指定训练集的大小,例如设置train_size=0.99,这样系统会根据这个比例来分配训练集和验证集,确保训练集不为空。
检查数据读取逻辑:确认数据集是否被正确读取且内容无误。如果数据读取过程中有误,可能会导致实际可用的样本数量远小于预期。
根据你的实际情况,调整上述参数之一或组合调整,应该能够解决训练集为空的问题。
ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!欢迎加入技术交流群:微信公众号:魔搭ModelScope社区,钉钉群号:44837352