精调LLM的数据标注策略:从理论到GPT-4o实战

本文深入探讨了为精调大语言模型进行数据标注的核心策略与最佳实践,涵盖了标注流程、NLP任务指南、高级技术工具,并提供了使用Label Studio标注数据和精调GPT-4o模型的详细分步教程。

精调行业特定LLM:优化数据标注策略

诸如GPT-4、Llama和Gemini这样的大型语言模型是人工智能领域最重大的进步之一,它们理解和生成人类语言的能力正在改变人类与机器的交互方式。LLM在海量文本数据上进行预训练,使其能够识别语言结构和语义,并建立覆盖广泛主题的庞大知识库。这种通用信息可用于推动一系列应用,包括虚拟助手、文本或代码自动补全以及文本摘要。然而,许多领域需要更专业的知识和专长。

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

只要拥有高质量、标注准确的训练数据,LLM可以为大多数行业或领域进行精调。通过为大学以及金融、保险等行业的客户开发LLM和机器学习工具的经验,我积累了一些经过验证的最佳实践,并指出了在为精调机器学习模型标注数据时需要避免的常见陷阱。数据标注在计算机视觉和音频处理中扮演着重要角色,但本指南重点介绍LLM和自然语言处理的数据标注,包括如何为OpenAI GPT-4o的精调标注数据的详细步骤。

什么是精调LLM?

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

精调预训练LLM已在多个行业中被证明对简化产品和服务具有无可估量的价值:

  • 医疗保健:美国最大的医院网络之一HCA Healthcare使用谷歌的MedLM来转录急诊室的医患对话,并读取电子健康记录以识别要点。MedLM是基于Med-PaLM 2的一系列针对医疗保健行业精调的模型。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流程结束后,标注好的数据即可用于模型训练。

NLP标注指南与标准

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

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

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

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

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

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

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

NLP与LLM数据标注最佳实践

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

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

NLP与LLM数据标注高级技术

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

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

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

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

可以通过数据增强来扩展训练数据集。可以通过释义、回译以及用同义词替换单词来自动生成合成数据。生成对抗网络也可用于生成模仿给定数据集的数据点。这些技术增强了训练数据集,使最终得到的模型更加鲁棒,且只需极少的人工标注。

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

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

LLM数据标注工具与平台

有多种工具和平台可以使数据标注工作流程更高效。规模较小、预算较低的项目可以利用开源数据标注软件,如Doccano和Label Studio。对于大型项目,商业平台提供更全面的AI辅助预标注功能;项目、团队和质量管理工具;用于可视化进度和分析的仪表板;以及最重要的支持团队。一些更广泛使用的商业工具包括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 并使用电子邮件地址和密码注册。登录后,点击“Create”按钮开始一个新项目。创建新项目后,通过进入“Settings”>“Labeling Interface”>“Browse Templates”>“Generative AI”>“Supervised LLM Fine-tuning”选择精调模板。

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
How does a BJT operate in active mode?
Describe the characteristics of a forward-biased PN junction diode.
What is the principle of operation of a transformer?
Explain the function of an op-amp in an inverting configuration.
What is a Wheatstone bridge circuit used for?
Classify the following component as active or passive: Capacitor.
How do you bias a NE5534 op-amp to Class A operation?
How does a Burr-Brown PCM63 chip convert signals from digital to analog?
What is the history of the Telefunken AC701 tube?
What does a voltage regulator IC do?

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

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

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

  • System:具有系统角色的内容用于修改模型的行为。例如,可以指示模型采用讽刺性人格或以动作片风格写作。系统角色是可选的。
  • User:具有用户角色的内容包含请求或提示的示例。
  • Assistant:具有助手角色的内容为模型提供了如何响应相应用户内容中的请求或提示的示例。

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

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
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。超参数保持默认的自动设置。OpenAI还允许您添加后缀以帮助区分您精调的模型。对于此测试,后缀设置为“electricalengineer”。

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

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

为了测试精调过程的结果,将模型设置为 gpt-4o 并询问一个它可能不知道答案的冷僻问题:

1
How many pins does a Telefunken AC701 tube have?

模型回复:

1
The Telefunken AC701 is a miniature tube often used in vintage microphone designs. It has 8 pins.

虽然回复基本正确,但有一个小错误。Telefunken AC701 是一种用于一些历史上最著名经典麦克风(包括 Neumann M49、M269、KM54、Schoeps M221B 和 Telefunken Ela-M251)的电子管。然而,AC701 实际上有五个引脚。

将模型设置为精调后的模型 ft:gpt-40-2024-08-06:personal:electricalengineer:A3o6coot,并提出同样的问题。由于训练数据包含了关于AC701电子管的信息,精调模型的回复是:

1
The Telefunken AC701 has 5 pins.

对于这个问题,精调过程是成功的,模型能够学习关于一款经典真空管的新信息。

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

大型语言模型的未来

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

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

LLM是一项相对年轻的技术,有巨大的成长空间。通过不断完善数据标注方法,精调LLM将变得更加强大和多功能,在更广泛的行业中推动创新。

了解更多

  • 什么是LLM的数据标注? 数据标注是训练大型语言模型的基本过程,其中模型从中学习的训练数据被加上注释以提供上下文。数据被标记上信息,如类别、关系或情感,使模型能够更有效地学习。
  • 如何为LLM标注数据? 在LLM数据标注和注释过程中,注释通常由人工团队创建和质量检查。可以通过AI辅助预标注以更流线化的方式生成标签和注释,但需要人工干预以确保准确性。数据标注通常使用数据标注软件(如Label Studio或Labelbox)完成。
  • 如何在机器学习中标注数据? 数据标注过程在训练数据收集之后开始。数据点由人类标注员使用SuperAnnotate或Supervisely等平台进行标注。许多平台还支持自动化预标注以简化流程。为确保质量,应建立QA流程,以及一套不断完善的综合指南。
  • 如何精调LLM? 许多LLM可以使用AutoTrain、LLaMA-Factory和Unsloth等工具以及OpenAI的开发者平台进行精调。在大多数情况下,可以调整超参数以优化训练过程;然而,精调LLM最重要的组成部分是经过标注以提供上下文的特定领域训练数据。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计