使用超小数据集的文本分类挑战:微调对比ChatGPT
使用小数据集进行文本分类是一个具有挑战性的任务本文将重点介绍如何使用微调方法来改进ChatGPT模型的性能
LLMs在超小型数据集上表现出色,但随着数据集的增长,经典方法更加出色
Toloka ML团队不断研究和比较在不同条件下进行文本分类的不同方法。在这里,我们介绍了我们在使用超小型数据集进行NLP模型性能实验的另一个实验。
之前,我们对潜在解决方案进行了简要概述,并将经典模型与大型语言模型(LLMs)在特定的文本分类任务上进行了比较。然而,这些比较是基于一个“常规”数据集的,该数据集包含足够的数据点来构建可靠的分类器。在现实世界的情况下,您可能会遇到数据有限或尚未进行人工标注的情况。
直观上,像GPT-3或ChatGPT这样的LLMs可能会由于它们的广泛“知识”而胜过较小的模型。为了调查这个假设,我们通过从较大的数据集中提取一部分来创建了一个人工小型数据集,并进行了几种方法的比较。我们对RoBERTa基础模型进行了微调,采用ChatGPT进行了few-shot分类,并对GPT-3 Babbage模型进行了微调。
数据集
为了评估各种模型的理解能力,我们选择了一个多类别数据集,其中包含科学文章摘要。任务是确定每篇文章的领域。
我们选择了WOS-11967 [1]数据集,其中包含11,967个包含七个父类别的文档,共35个类别:医学、心理学、计算机科学、生物化学、电气工程、土木科学和机械工程。我们采样了10,000个数据点,并仅关注父类别进行分析。
虽然数据集不是完美平衡的,但类别分布相对均衡。因此,可能可以在所有类别上实现令人满意的结果。类别分布如下图所示。
通过人工分析,我们发现对于一些摘要来说,确定其领域相对较容易,而对于其他情况,任务变得更具挑战性。例如,计算机科学文章可能会讨论数学主题,心理学文章可能包含医学或生物化学术语和缩写,使得难以将它们与生物化学或医学领域区分开来。摘要的长度也有很大的差异,平均为274个标记(ChatGPT标记),标准差为115个标记。
为了模拟涉及超小型数据集的情景,我们对语料库进行了训练-测试拆分,并将少量样本分配给训练集。我们重复了这个过程三次,使用不同的训练集大小来评估可用训练数据对模型性能的影响。我们为我们的实验创建了三个拆分:WOS-11967-s200(训练集200个样本,测试集9,800个样本),WOS-11967-s500(500 / 9,500),和WOS-11967-s2000(2,000 / 8,000)。
现在,让我们来看一下使用不同模型解决这些问题所获得的结果。
使用RoBERTa进行常规微调
作为我们的基准线,我们选择了RoBERTa基础模型[2],并在前面提到的三个数据集上进行了微调。我们对每次运行使用相同的超参数配置(批量大小为32,学习率为3e-5,使用线性调度器进行预热,窗口大小为256个标记),并使用早停策略防止过拟合。
我们得到了以下结果:
数据显示,200个样本不足以提取出所有必要的模式和信息,以准确分类摘要。较低的宏平均F1分数还表明,模型在机械工程等少数类别上表现不佳。这表明,仅仅拥有某个类别的少量样本是不够的。
正如预期的那样,随着可用数据量的增加,模型的性能也得到了改善,最终在七个类别的多类别分类中表现出了稳健的性能。
使用ChatGPT进行少样本学习
我们探索的第二种方法是使用ChatGPT进行少样本分类。这种方法与传统的分类方法有很大的区别,因为它不涉及训练一个模型。相反,我们通过设计输入提示来实现最佳性能。
然而,由于模型的4096个标记上下文大小限制,不可能将所有200个样本输入到模型中。根据上述测量结果,我们只能向模型呈现大约14个摘要。当考虑用于指令和分隔符的标记时,这个数字进一步减少。
最初,我们使用“system”角色进行指令,并提供每个类别的一个示例来引导模型的响应。我们将类别名称简化为单个标记,同时保留其含义。这样可以使模型更容易选择适当的类别,并将输出限制为单个标记。例如,“Biochemistry”变成了“Bio”,“Computer Science”变成了“Computer”。此外,我们通过提供一个可供选择的类别列表并指示模型在对类别不确定时返回“Unknown”标记来限制生成的标记数量。
总体而言,与仅使用200个样本训练的RoBERTa模型相比,使用这种方法的性能较差。我们注意到,模型的分类能力严重依赖于提供的提示。修改一个句子可能会改善或恶化度量指标。在某些情况下,尽管明确指示不要这样做,ChatGPT仍然会错过一些类别(这可能是我们设计提示的缺点)。
在一些边缘案例中,它会生成未在指令中列出的类别,但描述了文章领域,例如“Math”或“Chemistry”。目前尚不清楚这些缺陷应归因于模型还是数据集。然而,根据验证集的结果,可以使用简单的规则将所有“Math”实例更改为“Computer”来纠正这些类别。
为了改善度量指标,我们尽量使用尽可能多的数据。由于我们仍无法将所有200个样本输入模型,我们设计了一个两阶段的过程:
- 首先,我们要求模型识别特定领域的摘要之间的相似性并生成摘要。
- 其次,我们将这些摘要合并到指令中,以便为模型提供关于第一阶段中模型自身识别的类别和特征的见解。
这种方法使我们能够向模型输入更多的训练数据样本,而且它奏效了——我们将度量指标提升了约10%。以下是我们用于生成这些摘要的提示:
对于每个领域,我们提供了七到八个摘要,总共使用了63个不同的摘要来准备分类提示(每个类别八个摘要用于生成摘要,七个摘要作为实际提示的示例提供)。
然而,我们指示模型在不确定类别时回答“Unknown”。在验证集中,我们观察到大多数“Unknown”响应对应于计算机科学文章。然后,我们将所有“Unknown”实例替换为“Computer”类。
最终的分类提示如下:
再次强调,性能受到提示和提供的样本的影响很大。模型还生成了一些目标列表之外的类别,需要根据验证集进行手动调整。这种方法得到了以下结果:
性能明显优于对200个样本进行RoBERTa模型微调,而且所需样本较少。然而,随着有标记数据的可用性增加,即使只有500个样本,RoBERTa也开始胜过这种方法。
我们相信通过适当的提示工程可以进一步提高性能。在提示指南中可以找到一些有用的技巧。
对GPT-3模型进行微调
对于我们的最终方法,我们在这三个数据集上对GPT-3 Babbage模型进行了微调。我们遵循了OpenAI指南中概述的数据集准备建议,并选择了默认的超参数,没有进行任何特定的调整。每个数据集的训练过程大约需要20分钟,得到了以下结果:
即使在最小的数据集上,经过微调的GPT-3模型也取得了令人印象深刻的结果,超过了RoBERTa和ChatGPT。随着训练数据量的增加,RoBERTa和经过微调的GPT-3模型之间的性能差距变小。这引发了关于使用哪种选择的资源和可行性的问题。我们在以前的文章中讨论了这两种方法的利弊。
结论
这项实验证明了我们的初始假设是正确的——在超小数据集上训练的更大模型在性能上表现显著优于其他模型。通过适当的提示工程和少样本学习技术,可以取得有利的结果。
然而,随着数据集大小的增加,性能差异减小。此外,适当定制的经典模型,例如经过领域调整的RoBERTa模型,有时可以在分类任务中胜过通用的语言模型。这可以归因于该模型对主题的专门“知识”。此外,通过正确的优化,使用这些模型进行推断的速度可以显著提高,这在开发在线服务时至关重要。
除非另有说明,所有图片均由作者提供。
参考文献
- Kowsari K, Brown DE, Heidarysafa M, Jafari Meimandi K, Gerber MS, Barnes LE. HDLTex: Hierarchical Deep Learning for Text Classification. In: Machine Learning and Applications (ICMLA), 2017 16th IEEE International Conference On . IEEE; 2017.
- Liu Y, Ott M, Goyal N, et al. RoBERTa: A Robustly Optimized BERT Pretraining Approach. CoRR . 2019;abs/1907.11692. http://arxiv.org/abs/1907.11692