InsTag:大语言模型监督微调数据标签标注工具

简介: 魔搭社区发布了一个名为“InsTagger”的工具,用于分析LLM(大语言模型)中符合人类偏好的监督微调(SFT)数据。InsTagger 是基于 InsTag 方法训练的本地指令标签标注器,用于为符合人类偏好的监督微调数据集中的指令标注描述其意图和语义的标签,从而指导指令的分流或监督微调数据集的分析。

导读

魔搭社区发布了一个名为“InsTagger”的工具,用于分析LLM(大语言模型)中符合人类偏好的监督微调(SFT)数据。InsTagger 是基于 InsTag 方法训练的本地指令标签标注器,用于为符合人类偏好的监督微调数据集中的指令标注描述其意图和语义的标签,从而指导指令的分流或监督微调数据集的分析。

什么是InsTag

在大语言模型监督微调中,微调数据集中指令的多样性和复杂度被认为直接与 LLM 对齐之后的效果相关。近日 WizardLM 等方法也通过构造复杂指令成功提升了 LLM 对齐效果。然而,如何量化的分析微调数据集中指令的多样性和复杂度暂时仍未被充分研究。因此,InsTag 提出通过给指令标注细粒度标签的方式产出一种可解释的指令多样性和复杂度定义方法。

InsTag 收集了大量开源数据集,并利用 ChatGPT 强大的指令跟随能力进行开放式细粒度标签标注。为了解决开放式标注中产生的大量噪声,InsTag 设计了基于规则、语义、及共现性等多维度的降噪聚合方法,从近50万开源指令数据中标注了6K多个细粒度标签。人工评测显示,虽然使用开放式标注方式,经过降噪聚合的标签依旧具有满足下游分析和使用需求的精确度(precision)与一致性(consistency)。

image.png

(部分高频标签展示)

InsTag的作用

数据分析

基于 InsTag 分析了流行的开源 SFT 数据集和相关模型,发现模型能力随着数据的多样化和复杂性而增长。同时我们也分析了开源数据集之间基于标签覆盖的相关性,发现 InsTag 产生的标签可以标注出子任务(例如数学与编程),同时也发现少数数据集可以覆盖绝大多数其他数据集。

image.png

左图:开源数据集指令多样性与复杂度和其在AlpacaEval上的表现展示

右图:基于标签分析开源数据集之间的相关性

数据选择

基于 InsTag 生成标签对开源 SFT 数据进行复杂度优先的全覆盖采样,采样6K条数据用于微调 LLaMA 和 LLaMA-2,微调后的模型 TagLM 在 MT-Bench 上的表现优于许多依赖更多指令微调数据的开源 LLM。同时通过控制变量实验发现模型能力随着数据的多样化和复杂性的增加而增长。

InsTagger是什么

InsTag 是基于 ChatGPT 和后处理的方法。为了能在本地进行指令标签标注,InsTag 在标注及清洗后的约50万指令标签数据上微调了LLaMa-2模型,将指令标签标注的能力蒸馏到了微调后的LLaMa-2中,即InsTagger。

模型链接:

https://modelscope.cn/models/lukeminglkm/instagger_llama2/summary

模型体验链接:

https://www.modelscope.cn/studios/lukeminglkm/instagger_demo/summary

论文地址:

https://arxiv.org/pdf/2308.07074.pdf

如何使用InsTagger:

InsTagger 是一个基于 LLaMa-2 的 SFT 模型,使用 FastChat 与vicuna模板进行训练。可以使用 FastChat 进行加载与推理,或通过如下手工构造模板的方式直接使用ModelScope 进行推理

import torch
import json
from modelscope import AutoTokenizer, AutoModelForCausalLM
if torch.cuda.is_available():
    use_cuda = True
else:
    use_cuda = False
# Loading Instag Model
model_id = "lukeminglkm/instagger_llama2"
tokenizer = AutoTokenizer.from_pretrained(model_id, revision = 'v1.0.0')
model = AutoModelForCausalLM.from_pretrained(model_id, device_map='auto', torch_dtype=torch.float16, revision = 'v1.0.0')
model.requires_grad_(False)
model.eval()
# Build prompts for tagging
def make_prompt(query):
    prompt = f"Please identify tags of user intentions in the following user query and provide an explanation for each tag. Please response in the JSON format {{\"tag\": str, \"explanation\": str}}.\n User query: {query}"
    messages = [("USER", prompt), ("ASSISTANT", None)]
    seps = [" ", "</s>"]
    ret = "A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions." + seps[0]
    for i, (role, message) in enumerate(messages):
        if message:
            ret += role + ": " + message + seps[i % 2]
        else:
            ret += role + ":"
    return ret
# Infer with a provided query
def inference(query):
    input_str = make_prompt(query)
    input_tokens = tokenizer(input_str, return_tensors="pt", padding=True)
    if use_cuda:
        for t in input_tokens:
            if torch.is_tensor(input_tokens[t]):
                input_tokens[t] = input_tokens[t].to("cuda")
    output = model.generate(
        input_tokens['input_ids'],
        temperature=0,
        do_sample=False,
        max_new_tokens=2048,
        num_return_sequences=1,
        return_dict_in_generate=True,
    )
    num_input_tokens = input_tokens["input_ids"].shape[1]
    output_tokens = output.sequences
    generated_tokens = output_tokens[:, num_input_tokens:]
    num_generated_tokens = (generated_tokens != tokenizer.pad_token_id).sum(dim=-1).tolist()[0]
    generated_text = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
    string_output = [i.strip() for i in generated_text][0]
    return string_output
# Example
query = "Write flask routes for blog posts that implement CRUD. Use flask-sqlalchemy. The incoming and outgoing data should be in JSON. Use appropriate error handling and return status codes"
print(inference(query))
### JSON Output
[{"tag": "web development", "explanation": "The instruction involves writing flask routes for blog posts, which indicates a web development task."}, {"tag": "crud operation", "explanation": "The instruction specifies implementing CRUD (Create, Read, Update, Delete) operations, indicating a task related to data manipulation."}, {"tag": "json data", "explanation": "The instruction mentions that the incoming and outgoing data should be in JSON format, indicating a task related to handling JSON data."}, {"tag": "error handling", "explanation": "The instruction mentions using appropriate error handling, indicating a task related to handling errors and exceptions."}]

创空间体验:

image.png

所有模型均基于 LLaMA 或 LLaMA-2,并且应相应地在其许可下使用。

https://www.modelscope.cn/studios/lukeminglkm/instagger_demo/summary

相关文章
|
机器学习/深度学习 存储 人工智能
TableAgent数据分析智能体——数据分析师的大模型
TableAgent数据分析智能体——数据分析师的大模型
|
存储 缓存 异构计算
大语言模型量化方法对比:GPTQ、GGUF、AWQ
在过去的一年里,大型语言模型(llm)有了飞速的发展,在本文中,我们将探讨几种(量化)的方式,除此以外,还会介绍分片及不同的保存和压缩策略。
6344 0
|
数据采集 API 决策智能
华为诺亚联合中科大发布工具调用模型ToolACE,效果持平GPT-4获开源第一
 【10月更文挑战第10天】华为诺亚方舟实验室与中国科学技术大学合作推出ToolACE,一种自进化合成过程的工具调用模型。ToolACE通过多智能体交互和双重验证系统生成准确、复杂、多样化的工具学习数据,显著提升大型语言模型(LLM)的功能调用能力。实验结果显示,使用ToolACE数据训练的80亿参数模型性能媲美GPT-4,在伯克利功能调用排行榜上获得开源第一。
533 4
|
数据采集 人工智能 监控
赌你一定想要!OpenDataLab首款大模型多模态标注平台Label-LLM正式开源
Label-LLM 是一款专为大模型训练设计的多模态文本对话标注工具,支持团队协作,让标注工作变得简单高效。它不仅涵盖丰富的任务类型,如回答采集、偏好收集和内容评估等,还支持多模态数据标注,包括图像、视频和音频。Label-LLM具备预标注载入功能,能大幅提升工作效率,并提供全方位的任务管理与可视化分析,确保标注质量。快来体验这款强大的标注平台吧![部署文档](https://github.com/opendatalab/LabelLLM)
3186 0
赌你一定想要!OpenDataLab首款大模型多模态标注平台Label-LLM正式开源
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
阿里云人工智能平台 PAI 开源 EasyDistill 框架助力大语言模型轻松瘦身
本文介绍了阿里云人工智能平台 PAI 推出的开源工具包 EasyDistill。随着大语言模型的复杂性和规模增长,它们面临计算需求和训练成本的障碍。知识蒸馏旨在不显著降低性能的前提下,将大模型转化为更小、更高效的版本以降低训练和推理成本。EasyDistill 框架简化了知识蒸馏过程,其具备多种功能模块,包括数据合成、基础和进阶蒸馏训练。通过数据合成,丰富训练集的多样性;基础和进阶蒸馏训练则涵盖黑盒和白盒知识转移策略、强化学习及偏好优化,从而提升小模型的性能。
|
搜索推荐 物联网 PyTorch
Qwen2.5-7B-Instruct Lora 微调
本教程介绍如何基于Transformers和PEFT框架对Qwen2.5-7B-Instruct模型进行LoRA微调。
13215 34
Qwen2.5-7B-Instruct Lora 微调
|
11月前
|
机器学习/深度学习 算法
广义优势估计(GAE):端策略优化PPO中偏差与方差平衡的关键技术
广义优势估计(GAE)由Schulman等人于2016年提出,是近端策略优化(PPO)算法的核心理论基础。它通过平衡偏差与方差,解决了强化学习中的信用分配问题,即如何准确判定历史动作对延迟奖励的贡献。GAE基于资格迹和TD-λ思想,采用n步优势的指数加权平均方法,将优势函数有效集成到损失函数中,为策略优化提供稳定梯度信号。相比TD-λ,GAE更适用于现代策略梯度方法,推动了高效强化学习算法的发展。
1821 3
广义优势估计(GAE):端策略优化PPO中偏差与方差平衡的关键技术