微调大语言模型的数据标注策略:从理论到实战指南

本文深入探讨了为大语言模型微调进行高质量数据标注的完整流程、最佳实践与实用工具,并附上了使用Label Studio和GPT-4o进行微调的逐步教程,是实践领域特定AI模型构建的详尽指南。

微调大语言模型的数据标注策略

像GPT-4、Llama和Gemini这样的大语言模型(LLMs)是人工智能领域最重要的进步之一。它们理解和生成人类语言的能力正在改变人机交互的方式。根据麦肯锡的数据,超过70%的公司在其业务职能中使用AI。LLMs在大量文本数据上进行预训练,使其能够识别语言结构和语义,并构建涵盖广泛主题的庞大知识库。这种通用信息可用于驱动多种应用,包括虚拟助手、文本或代码自动补全以及文本摘要。然而,许多领域需要更专业的知识和技能。

实现领域特定的语言模型有两种方式:从零开始构建模型,或者对预训练的LLM进行微调。从零开始构建模型是一个计算和财务成本高昂的过程,需要海量数据,但微调可以使用较小的数据集完成。在微调过程中,LLM使用由对该领域有深刻理解的主题专家策划和标注的特定领域数据集进行额外的训练。预训练赋予LLM通用知识和语言能力,而微调则赋予其更专业的技能和知识。

LLMs可以为大多数行业或领域进行微调;关键要求是拥有准确标注的高质量训练数据。通过我为大学以及金融和保险等行业的客户开发LLM和机器学习工具的经验,我积累了几种经过验证的最佳实践,并确定了在标注用于微调ML模型的数据时需要避免的常见陷阱。数据标注在计算机视觉和音频处理中扮演着重要角色,但在本指南中,我将专注于LLM和自然语言处理的数据标注,包括一个关于如何为OpenAI的GPT-4o微调标注数据的逐步教程。

什么是微调LLM?

LLM是一种基础模型,这是一种能够执行广泛任务的通用机器学习模型。微调LLM是经过进一步训练的模型,使其对专业行业和任务更有用。LLM在语言数据上进行训练,对语法、语义和上下文有出色的掌握能力;尽管它们极其通用,但在需要领域专业知识的更专业任务上可能表现不佳。对于这些应用,可以使用专注于特定领域的较小标注数据集对基础LLM进行微调。微调利用了监督学习,这是机器学习的一个类别,模型同时看到输入对象和期望的输出值(标注)。这些提示-响应对使模型能够学习输入和输出之间的关系,从而使其能够在未见过的数据上做出类似的预测。

微调预训练LLM

微调LLM已经在多个行业中证明了对简化产品和服务具有不可估量的价值:

  • 医疗保健:美国最大的医院网络之一HCA Healthcare使用谷歌的MedLM转录急诊室的医患互动以及读取电子健康记录以识别要点。MedLM是一系列为医疗保健行业微调的模型。MedLM基于Med-PaLM 2,这是第一个在美国医学执照考试类似问题上达到专家级表现(85%以上)的LLM。
  • 金融:摩根士丹利、美国银行和高盛等机构使用微调LLM分析市场趋势、解析金融文件和检测欺诈。FinGPT是一个旨在使金融数据民主化的开源LLM,它在金融新闻和社交媒体帖子上进行微调,使其在情感分析方面非常有效。FinBERT是另一个在金融数据上微调的开源模型,专为金融情感分析设计。
  • 法律:虽然微调的LLM无法取代人类律师,但它可以帮助他们进行法律研究和合同分析。Casetext的CoCounsel是一个AI法律助手,可以自动化许多减慢法律流程的任务,例如分析和起草法律文件。CoCounsel由GPT-4驱动,并使用Casetext法律数据库中的所有信息进行了微调。

与基础LLM相比,微调LLM在其专业领域的输入上显示出相当大的改进——但训练数据的质量至关重要。例如,CoCounsel的微调数据基于约30,000个法律问题,由一个由律师、领域专家和AI工程师组成的团队在六个月的时间里完善而成。在经过了大约4,000小时的工作后才被认为可以发布。尽管CoCounsel已经商业发布,但它仍在继续微调和改进——这是保持任何模型与时俱进的关键一步。

数据标注流程

微调所需的标注包括“指令-预期响应”对,其中每个输入对应一个预期输出。虽然选择和标注数据看起来是一个直接的过程,但有几个考虑因素增加了其复杂性。数据应该清晰、定义明确;它还必须具有相关性,同时涵盖全面的潜在交互范围。这包括可能具有高度模糊性的场景,例如对具有讽刺性质的产品评论进行情感分析。通常,模型训练的数据越多越好;然而,在收集LLM训练数据时,应注意确保它能代表广泛的上下文和语言细微差别。

一旦数据被收集,通常需要进行清洗和预处理以去除噪声和不一致性。重复记录和异常值被移除,缺失值通过插补法替代。无法理解的文本也会被标记以供调查或移除。

在标注阶段,数据被贴上适当的标签。人类标注者在流程中扮演着重要角色,因为他们为准确标注提供了必要的洞察力。为了减轻标注者的工作负担,许多标注平台提供AI辅助的预标注,这是一种自动数据标注过程,用于创建初始标签并识别重要的单词和短语。

数据被标注后,标签会经过验证和质量保证(QA)流程,以审查其准确性和一致性。由多位标注者标注的数据点会被审查以达成共识。也可以使用自动化工具来验证数据并标记任何差异。QA流程完成后,标注好的数据就可以用于模型训练了。

NLP的标注指南与标准

数据标注工作流程中最重要的早期步骤之一是为人类标注者制定一套清晰、一致的指南和标准。指南应易于理解且保持一致,以避免引入任何可能混淆训练模型的变异性。

文本分类(例如将电子邮件正文标注为垃圾邮件)是一项常见的数据标注任务。文本分类的指南应包括每个潜在类别的明确定义,以及如何处理可能不适合任何类别的文本的说明。

在标注文本时,标注者经常执行命名实体识别,即识别并标记人名、组织、地点和其他专有名词。NER任务的指南应列出所有潜在的实体类型,并附上如何处理它们的示例。这包括边缘情况,例如部分匹配或嵌套实体。

标注者经常被要求将文本的情感标注为积极、消极或中性。对于情感分析,每个类别应被明确定义。由于情感常常是微妙或混合的,应提供示例以帮助标注者区分它们。指南还应解决与性别、种族或文化背景相关的潜在偏见。

共指消解指的是识别所有指向同一实体的表达方式。共指消解的指南应提供如何在不同句子和文档中跟踪和标记实体的说明,并指定如何处理代词。

在词性标注中,标注者为每个单词标注词性,例如名词、形容词或动词。对于词性标注,指南应包括如何处理可能属于多个类别的歧义词或短语的说明。

由于LLM数据标注通常涉及主观判断,关于如何处理歧义和边缘情况的详细指南将帮助标注者产生一致且正确的标签。一个例子是Universal NER,这是一个包含众包标注的多语言数据集项目;其标注指南为每个实体类型提供了详细的信息和示例,以及处理歧义的最佳方法。

NLP和LLM数据标注的最佳实践

由于文本数据可能具有主观性,标注过程中可能会遇到挑战。许多这些挑战可以通过遵循一套数据标注最佳实践来解决。在开始之前,确保对所解决的问题有全面的理解。掌握的信息越多,就越能创建一个涵盖所有边缘情况和变化的数据集。在招募标注者时,你的审查过程应同样全面。数据标注是一项需要推理、洞察力和高度注意细节的任务。以下策略对标注过程非常有益:

  • 迭代优化:可以将数据集分成小批次,分阶段标注。通过反馈和质量检查,可以在阶段间改进流程和指南,及早识别和纠正任何潜在陷阱。
  • 分而治之的方法:复杂的任务可以分解为多个步骤。例如,对于情感分析,可以先识别包含情感的单词或短语,然后使用基于规则的模型辅助自动化来确定段落的整体情感。

NLP和LLM数据标注的高级技术

有几种高级技术可以提高标注过程的效率、准确性和可扩展性。许多技术利用自动化和机器学习模型来优化人类标注者的工作量,以更少的手动努力获得更好的结果。

可以使用主动学习算法来减少手动标注工作量;这是一种预训练的ML模型识别哪些数据点将从人工标注中受益的方法。这些数据点包括模型对预测标签置信度最低的数据点(不确定性采样),以及最接近两个类别决策边界的边缘情况(边界采样)。

NER任务可以通过地名录来简化,这本质上是预定义的实体列表及其对应类型。使用地名录可以自动化常见实体的识别,让人类专注于处理有歧义的数据点。

较长的文本段落可以通过文本摘要进行缩短。使用ML模型来突出关键句子或总结较长段落可以减少人类标注者执行情感分析或文本分类所需的时间。

可以通过数据增强来扩展训练数据集。可以通过释义、回译和用同义词替换单词来自动生成合成数据。生成对抗网络也可以用来生成模仿给定数据集的数据点。这些技术增强了训练数据集,使所得模型更加强健,而只需最少的手动额外标注。

弱监督是一个涵盖用于训练具有噪声、不准确或不完整数据的模型的各种技术的术语。一种弱监督是远程监督,即使用来自相关任务的现有标注数据来推断未标注数据中的关系。例如,一个标注为积极情感的产品评论可能包含“可靠”和“高质量”等词语,这些词语可以帮助确定未标注评论的情感。词汇资源(如医学词典)也可用于辅助NER。弱监督使得可以非常快速地标注大型数据集,或者在手动标注成本过高时使用。然而,这是以牺牲准确性为代价的,如果需要最高质量的标签,则应让人类标注者参与进来。

最后,随着现代“基准”LLM(如GPT-4)的出现,标注过程可以通过LLM生成的标签完全自动化,这意味着“指令-预期响应”对中的响应由LLM生成。例如,可以将产品评论输入LLM,并附上将其情感分类为积极、消极或中性的指令,从而创建一个可用于训练另一个LLM的标注数据点。在许多情况下,整个过程都可以自动化,指令也由LLM生成。尽管使用基准LLM进行数据标注可以使过程更快,但它不会赋予微调模型超出LLM已有知识之外的能力。要推进当前一代ML模型的能力,需要人类的洞察力。

LLM数据标注的工具和平台

有多种工具和平台可以使数据标注工作流程更高效。规模较小、预算较低的项目可以利用开源数据标注软件,如Doccano和Label Studio。对于较大的项目,商业平台提供更全面的AI辅助预标注功能;项目、团队和QA管理工具;用于可视化进度和分析的仪表板;以及最重要的,一个支持团队。一些更广泛使用的商业工具包括Labelbox、亚马逊的SageMaker Ground Truth、Snorkel Flow和SuperAnnotate。

其他有助于LLM数据标注的工具包括:

  • Cleanlab:使用统计方法和模型分析来识别和修复数据集中的问题,包括异常值、重复项和标签错误。任何问题都会被突出显示以供人工审查,并提供更正建议。
  • AugLy:一个支持文本、图像、音频和视频数据的数据增强库。由Meta AI开发,AugLy提供100多种增强技术,可用于生成模型训练的合成数据。
  • skweak:一个开源的Python库,结合不同的弱监督源来生成标注数据。它专注于NLP任务,允许用户生成启发式规则或使用预训练模型和远程监督来执行NER、文本分类和文本中的关系识别。

LLM微调流程概述

微调过程的第一步是选择预训练的LLM。预训练模型有几个来源,包括Hugging Face的Transformers或NLP Cloud,它们提供一系列LLM以及训练和部署平台。预训练的LLM也可以从OpenAI、Kaggle和谷歌的TensorFlow Hub获得。

训练数据通常应该量大且多样化,涵盖广泛的边缘情况和模糊性。过小的数据集可能导致过拟合,即模型对训练数据学习得过于完美,从而在未见过的数据上表现不佳。训练过多的周期数(即完整遍历数据集的次数)也可能导致过拟合。不具多样性的训练数据可能导致偏见,即模型在代表性不足的场景上表现不佳。此外,偏见也可能由标注者引入。为了最大限度地减少标签中的偏见,标注团队应具有多样化的背景,并接受关于如何识别和减少自身偏见的适当培训。

超参数调整可能对训练结果产生重大影响。超参数控制模型的学习方式,优化这些设置可以防止过拟合等不良后果。一些关键的超参数包括:

  • 学习率:指定内部参数(权重和偏置)在每次迭代中调整的程度,本质上决定了模型学习的速度。
  • 批量大小:指定每次迭代中使用的训练样本数量。
  • 周期数:指定运行该过程的次数。一个周期是完整遍历整个数据集一次。

超参数调整的常用技术包括网格搜索、随机搜索和贝叶斯优化。还有专为简化超参数调优过程而设计的库,如Optuna和Ray Tune。

一旦数据被标注并经过验证和QA流程,模型的实际微调就可以开始了。在典型的训练算法中,模型在称为“前向传播”的步骤中对批量数据生成预测。然后将预测与标签进行比较,并计算损失(衡量预测值与实际值差异的指标)。接下来,模型执行“后向传播”,计算每个参数对损失的贡献程度。最后,使用优化器(如Adam或SGD)来调整模型的内部参数以改进预测。这些步骤重复进行,使模型能够迭代地优化其预测,直到总体损失最小化。这个训练过程通常使用Hugging Face的Transformers、NLP Cloud或Google Colab等工具进行。微调后的模型可以根据困惑度、METEOR、BERTScore和BLEU等性能指标进行评估。

微调过程完成后,模型可以部署到生产环境中。部署ML模型有多种选择,包括NLP Cloud、Hugging Face的Model Hub或亚马逊的SageMaker。ML模型也可以使用Flask或FastAPI等框架在本地部署。本地部署的模型通常用于开发和测试,以及在对数据隐私和安全性有顾虑的应用程序中。

微调LLM时的其他挑战包括数据泄露和灾难性干扰:

  • 数据泄露:当训练数据中的信息也出现在测试数据中时发生,导致对模型性能的评估过于乐观。在训练、验证和测试数据之间保持严格的分离是减少数据泄露的有效方法。
  • 灾难性干扰(或称灾难性遗忘):当模型在不同任务或数据集上顺序训练时可能发生。当模型针对特定任务进行微调时,其学习的新信息会改变其内部参数。这种变化可能导致在更通用任务上的性能下降。实际上,模型“遗忘”了它已学到的部分知识。关于如何防止灾难性干扰的研究仍在进行中,然而,一些可以减少它的技术包括弹性权重巩固、参数高效微调,以及基于回放的方法(将旧的训练数据与新的训练数据混合,帮助模型记住以前的任务)。实施渐进式神经网络等架构也可以防止灾难性干扰。

使用Label Studio微调GPT-4o

OpenAI目前在其开发者平台上支持对GPT-3.5 Turbo、GPT-4o、GPT-4o mini、babbage-002和davinci-002进行微调。

为了标注训练数据,我们将使用Label Studio的免费社区版。

首先,通过运行以下命令安装Label Studio:

1
pip install label-studio

Label Studio也可以使用Homebrew、Docker或从源代码安装。Label Studio的文档详细介绍了每种不同的方法。

安装完成后,启动Label Studio服务器:

1
label-studio start

将浏览器指向 http://localhost:8080,使用电子邮件地址和密码注册。登录后,单击“创建”按钮开始一个新项目。新项目创建后,通过进入“设置”>“标注界面”>“浏览模板”>“生成式AI”>“监督式LLM微调”来选择微调模板。

初始提示集可以导入或手动添加。对于这个微调项目,我们将使用电气工程问题作为我们的提示:

  • 晶体管在放大模式下如何工作?
  • 描述正向偏置PN结二极管的特性。
  • 变压器的工作原理是什么?
  • 解释运算放大器在反相配置中的功能。
  • 惠斯通电桥电路用于什么?
  • 将以下组件分类为有源或无源:电容器。
  • 如何将NE5534运算放大器偏置到A类工作状态?
  • Burr-Brown PCM63芯片如何将信号从数字转换为模拟?
  • Telefunken AC701电子管的历史是什么?
  • 电压调节器IC有什么作用?

这些问题在仪表板中以任务列表的形式出现。

点击每个问题会打开标注窗口,可以在其中添加预期的响应。

一旦所有数据点都被标注,点击“导出”按钮将标注的数据导出为JSON、CSV或TSV文件。在本例中,我们导出为CSV文件。然而,要对GPT-4o进行微调,OpenAI要求训练数据的格式与其Chat Completions API保持一致。数据应采用JSON Lines格式构建,每行包含一个“消息”对象。一个消息对象可以包含多个内容片段,每个片段都有自己的角色,即“system”、“user”或“assistant”:

  • System:具有system角色的内容会修改模型的行为。例如,可以指示模型采用讽刺的个性或以充满动作的方式写作。system角色是可选的。
  • User:具有user角色的内容包含请求或提示的示例。
  • Assistant:具有assistant角色的内容为模型提供了应如何响应对应user内容中的请求或提示的示例。

以下是一个包含指令和预期响应的消息对象示例:

1
2
3
4
5
6
{"messages": 
[
{"role": "user", "content": "How does a BJT operate in active mode?"}, 
{"role": "assistant", "content": "In active mode, a BJT operates with the base-emitter junction forward biased and the base-collector junction reverse biased. By adjusting the small base current, the much larger collector current can be controlled, allowing the transistor to work as an amplifier."}
]
}

我们创建了一个Python脚本来修改CSV数据以使其具有正确的格式。该脚本打开Label Studio创建的CSV文件,遍历每一行,将其转换为JSONL格式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pandas as pd #导入Pandas库
import json

df = pd.read_csv("C:/datafiles/engineering-data.csv") #engineering-data.csv是LabelStudio导出的csv文件

#文件将以JSONL格式格式化
with open("C:/datafiles/finetune.jsonl", "w") as data_file:
    for _, row in df.iterrows():
        instruction = row["instruction"]
        prompt = row["prompt"]
        data_file.write(json.dumps(
            {"messages": [
                {"role": "user" , "content": prompt},
                {"role": "assistant" , "content": instruction}
            ]}))
        data_file.write("\n")

数据准备就绪后,可以在 platform.openai.com 上用于微调。

要访问微调仪表板,请单击顶部的“Dashboard”,然后单击左侧导航菜单中的“Fine-tuning”。单击“Create”按钮会弹出一个界面,允许你选择要训练的模型,上传训练数据,并调整三个超参数:学习率乘数、批量大小和周期数。本次测试选择了最新的模型 gpt-4o-2024-08-06。超参数保留其默认的“Auto”设置。OpenAI还允许你添加一个后缀以帮助区分你微调的模型。本次测试中,后缀设置为“electricalengineer”。

GPT-4o的微调过程(包括训练数据验证和完成模型的评估)持续了大约三个小时,产生了8,700个已训练的token。相比之下,GPT-4o mini这个更小、更具成本效益的模型,在短短10分钟内完成了微调过程。

可以通过单击“Playground”链接来测试结果。单击页面顶部附近的灰色下拉菜单会显示可用模型,包括微调后的模型。还包括代表最后三个训练周期中检查点的其他模型。这些模型可用于各种目的,包括出现过拟合的情况;可以测试先前检查点的模型以确定过拟合何时发生。

为了测试微调过程的结果,将模型设置为gpt-4o,并询问它可能没有答案的冷门问题:

1
Telefunken AC701电子管有多少个引脚?

模型回答:

1
Telefunken AC701 是一种常用于老式麦克风设计的小型电子管。它有 8 个引脚。

虽然响应大部分正确,但有一个小错误。Telefunken AC701是一种历史上最著名的老式麦克风(如Neumann M49, M269, KM54, Schoeps M221B和Telefunken Ela-M251)中使用的电子管。然而,AC701实际上有五个引脚。

将模型设置为微调后的模型 ft:gpt-40-2024-08-06:personal:electricalengineer:A3o6coot,并询问相同的问题。由于训练数据包含有关AC701电子管的信息,微调模型的回答是:

1
Telefunken AC701 有 5 个引脚。

对于这个问题,微调过程是成功的,模型能够学到关于老式真空管的新信息。

OpenAI的微调平台易于使用且有效,但它仅限于OpenAI的模型。如果你想微调像Llama和Mistral这样的LLM,有各种工具可用,包括AutoTrain、Axolotl、LLaMA-Factory和Unsloth。

大语言模型的未来

微调LLM已经显示出令人难以置信的前景,像MedLM和CoCounsel这样的模型每天都在专业领域的应用中发挥作用。为特定领域量身定制的LLM是一种极其强大和有用的工具,但前提是必须使用相关且准确的训练数据进行微调。自动方法(例如使用LLM进行数据标注)能够简化流程,但构建和标注高质量的训练数据集需要人类的专业知识。

随着数据标注技术的发展,LLM的潜力将继续增长。主动学习的创新将提高准确性、效率以及可访问性。更多样化和全面的数据集也将变得可用,从而进一步改进模型所训练的数据。此外,检索增强生成等技术可以与微调LLM相结合,以生成更及时、更可靠的响应。

LLM是一项相对年轻的技术,有很大的发展空间。通过不断完善数据标注方法,微调LLM将变得更加强大和通用,推动更广泛行业的创新。

本文中的技术内容已由Necati Demir审核。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计