NEW暗黑模式现已上线 🌓 Label Studio 1.18.0 版本发布

使用LLM和Label Studio提示界面进行交互式数据标注

指南

将大型语言模型(LLMs)集成到数据标注中,解决了机器学习中最具挑战性的问题之一——提高数据集整理的效率。我们之前讨论过如何利用LLMs通过上下文感知预测来启动项目(详见我们的文章From Foundation Models to Fine-Tuned Applications Using Label StudioAdala - The First Open Source Data-Labeling Agent)。然而,这些努力主要集中在数据标注的初始阶段。实际上,优化LLMs的提示词本身就是一个动态过程。通过将提示词优化与数据标注相结合,我们可以显著提升效率。我们的目标是从传统静态的数据集标注方法转向动态交互模式,将LLMs不仅视为工具,更作为增强人类洞察力的合作伙伴。

在本篇博客中,我们将介绍一种以提示词为核心的工作流程,它将实时提示工程与数据标注相结合。将提示工程整合到Label Studio的价值在于,它能显著减少直接使用ChatGPT等工具时的手动操作成本。您无需在不同应用间来回复制粘贴每个示例和响应,而是可以在标注环境中完成所有必要操作。这个提示器的目标就是让数据处理与大语言模型的协作变得无缝且动态。接下来让我们深入了解它的运作方式!

聊天机器人意图分类

让我们首先通过一个实际例子来了解以提示为中心的工作流程:分析客户聊天对话以确定他们的意图。这项任务是开发高级聊天机器人系统的基础步骤。我们将利用客户支持对话数据集来识别客户咨询背后的意图。让我们看看实际操作中的情况。

从这段录制中,我们可以了解以提示词为核心的工作流程。可以看到当我们输入提示词并运行(shift+enter)时,系统会给出响应。该响应随后被解析并应用到我们的标签上。接着我们可以检查对话内容,确保机器人回答正确,如有错误则修改标注。但由于提示器已集成到标注工作流中,我们还获得了优化提示词的额外选项。

在这种情况下,我们的初始提示生成了正确的输出,但也包含了重复的标签实例。与其手动修正预测结果,我们只需修改提示语并让它重新尝试。调整后可以看到Bot的答案看起来是正确的,我们可以根据需要接受这个标注或进行修改。

这个简单但高效的工作流程创建了一个应用AI预测、优化提示词和审核标注的迭代循环。这种方法不仅简化了标注工作流程,还能持续提升数据集和提示词的质量。此外,一旦我们获得了一个强有力的提示词,它还可以应用到其他样本上。

在我们迭代数据集的过程中,提示词与提示者(人类)的互动变得越来越紧密。这种设置支持实时提示工程,标注人员可以根据数据集不断变化的需求优化提示词,从而增强LLM对后续任务的预测能力,并提升人类对正在标注数据集的理解。

自行运行

我们已为您创建了一个笔记本以便您自行运行此示例,但我们将在此处逐步讲解主要步骤。

初步设置

首先,我们需要初始化一个Label Studio项目。我们将使用Label Studio API来简化流程。这里,我们已经在本地`localhost:8080`上运行了Label Studio。要获取Label Studio实例的API密钥,请参阅此处文档

from label_studio_sdk import Client
LABEL_STUDIO_URL = 'http://localhost:8080'
API_KEY = 'your_api_key_here'
ls = Client(url=LABEL_STUDIO_URL, api_key=API_KEY)
ls.check_connection()

数据集创建

随后,数据集被下载并处理成适合标注的结构化格式。我们将对话转换为包含说话者角色和话语的格式,以供项目使用。

import requests, json

# Download JSONL file from URL and save locally
file_url = "https://raw.githubusercontent.com/.../dialogues.jsonl"
response = requests.get(file_url)
if response.ok:
    with open("dialogues.jsonl", 'wb') as file:
        file.write(response.content)

# Transform dialogues from JSONL format
transformed_dialogues = []
with open("dialogues.jsonl", 'r') as infile:
    for line in infile:
        dialogue = json.loads(line)
        transformed = {'dialogue': [{'author': turn['speaker_role'], 'text': turn['utterance']} for turn in dialogue['turns']]}
        transformed_dialogues.append(transformed)

print(f"Transformed {len(transformed_dialogues)} dialogues.")

项目配置

现在让我们设置Label Studio项目配置,以利用以提示为中心的工作流来建议标注。请注意,这里我们还使用了数据集中提供的类别,以便在用户界面中进行分类选择。

# Generate choice XML elements dynamically from intents
choices_xml = '\n'.join([f'      <Choice value="{intent}" />' for intent in sorted_unique_intents])

project = ls.start_project(
    title='Finance Support Chats',
    label_config=f'''
<View>
  ...
  <Choices name="response" toName="chat" editable="true" maxSubmissions="1" choice="multiple">
{choices_xml}
  </Choices>
</View>
    '''
)

现在我们拥有一个用户友好的界面,可以让标注人员与LLM进行交互。

导入数据

最后,我们可以将转换后的对话导入到Label Studio项目中。

project.import_tasks(transformed_dialogues)

配置机器学习后端

我们已经为此项目设置好了所有的后端和数据组件。现在只需要将机器学习后端连接到Label Studio中的项目。在本示例中,我们将通过docker-compose单独运行后端。

# Clone the repo
git clone https://github.com/HumanSignal/label-studio-ml-backend.git
cd label-studio-ml-backend/tree/master/label_studio_ml/examples/llm_interactive

# Configure the ML Backend with your OpenAI API Key in docker-compose.yaml

# Start the ML Backend
docker-compose up

后端启动后,它将在本地主机9090端口提供服务。请注意,如果您像本示例中一样使用GPT-4,您需要在docker-compose.yaml文件中配置您的OpenAI API密钥

连接到机器学习后端

现在我们需要在项目设置的机器学习部分进行配置,以启用项目使用ML后端。为此,我们需要传入ML后端的URL并启用交互式预测功能。

保存后,我们就可以使用以提示为中心的工作流程了!

Prompter 的工作原理

在底层实现中,提示器通过将特殊的标注配置ML后端相结合来工作。您可以在ML后端LLM交互示例中查看完整实现。

标注配置定义了数据的标注界面。在我们这个案例中,标注配置中的标签定义了哪些数据应发送至ML后端。让我们通过一个标注配置示例来理解其工作原理。

<Paragraphs name="chat" value="$dialogue" layout="dialogue" />
  <TextArea name="prompt" toName="chat" rows="4" editable="true" maxSubmissions="1" showSubmitButton="false" />

首先,我们看到包含聊天对话的段落部分。接下来有一个文本输入框"prompt",用于输入提示语。关键在于"toName"这个标签,它指明了提示语应该应用于哪些数据。在我们的案例中,这将应用于整个客服对话记录。我们还设置了"showSubmitButton"为false以简化界面。

为了将正确的数据发送到ML后端,我们需要告知它应将标注配置中的哪个组件传递给LLM。在本例中,我们希望传递`prompt`文本区域。为此,我们可以将名称设置为ML后端的环境变量,或直接使用默认名称(恰巧也是`prompt`)。当获取预测结果时,ML后端会从文本区域(即我们的提示词)及其引用的数据(本例中的聊天对话)中提取内容。ML后端将任务转发给GPT-4(可使用任何LLM),处理响应后,提供如下所示的分类结果。

基于提示词的后端工作流程概述。当输入提示词时,前端会提取任务数据和提示词并传递给机器学习后端。机器学习后端从我们的LLM(本例中为GPT-4)获取响应,然后将生成结果传回前端。生成结果还会被解析以填充标注界面中的分类选项。

ML后端作为中间件,将任务数据转发给LLM,处理响应并将其应用于标签,根据对话内容为数据集添加准确的分类。

结论

将大型语言模型(LLMs)集成到数据标注流程中,标志着向更动态高效的数据集创建方式的重要转变。通过引入以提示为中心的工作流,我们强调了LLMs不仅可以作为工具,更能成为标注过程中的协作伙伴,促进上下文感知预测并实现实时提示工程。这种方法不仅能简化数据集标注任务,还能显著提高数据质量。

从手动标注到精细化的LLM辅助标注环境的转变,彰显了现代AI在加速和扩展传统流程方面的强大能力。本示例展示了使用开源工具和集成所能实现的可能性,但在大规模质量把控方面,一个功能齐全的提示器仍可能难以把控。对于认真考虑使用LLM实现标注工作流自动化的用户,申请抢先体验Label Studio Enterprise中的全新LLM自动化功能。企业版提示工作流包含可靠性优化层,可针对大规模精准标注优化您的提示,包括约束生成和基于真实数据集的实时提示评估指标。

相关内容