反着用scaling law验证数据:群聊场景指代消歧

本文作者:白牛

我们之前开源了 LLM 群聊助手茴香豆(以下简称豆哥),它的特点是:

  • 设计了一套拒答 pipeline,实用于群聊场景。能够有效抵抗各种文本攻击、过滤无关话题,累计面对 openmmlab 数千用户运行半年( 17 个群、7w 条群消息)。这个过程确认了 text2vec 模型更适合反着用
  • 工业级开源。除算法 pipeline 外,还实现对应的 android、web service, License 支持商用
  • 成本低。配合 LLM API 只需要 1.5G 显存

此外我们还工程优化了 ReRoPE,llama2 13B 在 A100 单卡上不训练,就可以从 8k 外推到 40k token。

上海AI Lab推出“茴香豆”:群聊场景中的领域知识助手

然而在群聊中,豆哥往往会遇到类似对话:

张三:mmpose 支持移动端部署么?
李四:搭车问一下,怎么把它部署到 TX2 ?
王二:你们说的是哪家的算法框架?

显然 “” 应该替换成 "mmpose",然而豆哥处理李四的问题时,不能直接输入所有人的对话,否则会影响 pipeline 精度;受成本约束,也不能每一句都消,所以整件事第一步是,判断应不应该消歧


项目链接:

https://github.com/internlm/huixiangdou

(文末点击阅读原文可直达,欢迎点亮小星星)


为了解决上述问题,我们使用的方法是手工标注 + SFT 优化 LLM,也就是 NLPer 常见地,用 LLM 优化下游 NLP 任务。

最终结果如上图,“0.5B 媲美 14B”。

绿色的是训练前的 precision 曲线,证明反反复复标一周没白干,确实能靠 scaling law 明确问题和训数据;

蓝色的是训练后的 F1 score 曲线。

  • 14B 的 recall 是最高的、能达到 92.11
  • 32B 的 F1 score 最高,到了85.58
  • 额外地,MoE-2.7B 涨了 +29.07,详见见 arXiv 里的表格
本文贡献是:
1.如何证明标注本身没有 bias ? 我们使用 scaling law 定义问题、确认标注可靠。
scaling law 是说数据内容不变,精度随参数量和训练数据量线性增大。
反过来想,取一组相同架构的 LLM(qwen 0.5~32B)不变,prompt 和数据标注变化。如果数据的精度表现,随模型体积而改善,那是不是证明了数据标得好 ?
当然这个 “标得好” 更多的是和 qwen 更契合,更容易 finetune、更适合 GPU-poor。


2.数据来自微信群聊——卷卷群(ncnn contributors group),我们开源了 2.3k 手工标注数据和对应的 LoRA weights,授权见末尾。


3.所有实验均可复现,trick 已在论文中注明。

1.数据准备

数据来源。选 ncnn 卷卷群是因为:

  • 群友背景复杂,当老板的打工的读书的都有、软件硬件女装啥都会。 AKA 数据范化性强。
  • ncnn 不是某个 team 维护的,大小事情是靠爱发电,导致平均群活跃高达 87 条/人月。

预处理。原始输入取了 58,000 条,直接标注能标死我。所以做了 concat 和 filter 两步预处理:一来是用户确实发 2 句话才讲 1 个事; 二来大部分内容也不是问题,豆哥并不关心陈述句。预处理后得到 2,302 句问题。

标注过程是个循环,不是手工标一次搞定的。

  • STEP1. 按指代消歧的定义构造 prompt,想清了问题再手动标
  • STEP2. 标好了用 7 个 vanilla LLM 跑精度
  • STEP3. 如果 precision 不随参数量增长,检查 prompt 和问题定义,看哪里没明确。重复 STEP1

如此重复 5 轮,得到 alpaca.json

2. 训练

参照知乎其他人的 finetune 经验, 2k 数据量上不了 further pretrain,fp16 的 SFT 也未必好。

虽然 LoRA 不靠谱,可听人劝吃饱饭。我们用的 axolotl,顺手发了个 typo PR。

第一轮 LoRA epoch=1,lr=2e-4,rank=64,4B F1 score 掉点 -12,其他模型都在涨。

想象中,4B 的 F1 score 应该在 62.9 到 69.22 之间。

那咋整?继续治疗呗..

我们尝试了 lr=2e-5;不同的 rank;换 LoRA+,也就改 lr 能让损失缩小到 -3。

注意缩小 lr 对其他模型(7B、1.8B、2.7B)都没用,并不是个可靠方法。

果然 LoRA 不靠谱,继续遍历参数已经没有意义。我们也尝试过全量微调,2 个 epoch 后模型会退化为下游 NLP 任务中的分类器,尽管 F1 score 高达 71.38,全量微调后的模型已经失去通用能力。

3. 结论

现在看来 base 模型和数据是可靠的,但训练方法不太行。

  • 检查 weight ,看训练方法为啥不行,即 4B 上 low-rank 前提被满足了多少?
  • 现在有个 recall 92 的模型,只是应用的第一步。我估计后面实用还都是坑 qaq。

附录

论文地址:https://arxiv.org/abs/2405.02817

alpaca 训练数据:https://huggingface.co/datasets/tpoisonooo/HuixiangDou-CR/tree/main

LoRA 14B 权重:https://huggingface.co/tpoisonooo/HuixiangDou-CR-LoRA-Qwen-14B

LoRA 32B 权重:https://huggingface.co/tpoisonooo/HuixiangDou-CR-LoRA-Qwen-32B

WanDb 实验记录:https://wandb.ai/tpoisonooo/huixiangdou-cr

复现步骤:https://github.com/InternLM/HuixiangDou/tree/main/sft

卷卷群隐私授权,我是群主我说了算(逃

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/614634.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

031.下一个排列Java实现

题意 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&#…

Codeforces Round 944 (Div. 4) A - G

div.4只写部分题解了&#xff0c;都比较基础&#xff0c;数学偏多一点&#xff0c;几乎没有算法&#xff0c;有不懂的欢迎评论区提问&#xff01; A. My First Sorting Problem #include<bits/stdc.h> using namespace std ; typedef long long ll ; const int maxn 2…

return语句

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 return语句 一、return语句后面跟表达式二、return无返回三、return返回的值和函数返回类型不一致四、return语句执行后,后方仍然存在代码五、存在分支语句&#xff0c;需考虑…

ue引擎游戏开发笔记(37)——实现敌人接收攻击伤害,并作出反应

1.需求分析&#xff1a; 现在已经显示造成实际伤害&#xff0c;但敌人对实际伤害并未产生反馈&#xff0c;例如还击&#xff0c;或者死亡倒地等等&#xff0c;实现敌人对于受击的反馈。 2.操作实现&#xff1a; 1.思路&#xff1a;在动画蓝图中添加死亡动画&#xff0c;并通过…

vue阶段案例,练习filter、map、forEach,双向绑定,三元表达式,以及图片滚动,文字跳动等等。

阶段案例 通过案例来练习双向绑定&#xff0c;三元表达式&#xff0c;以及图片滚动&#xff0c;文字跳动等等。 代码如下&#xff1a; <template><table class"bjtp" ><div class"title" >{{title}}</div><div class"s…

人生是旷野,不是轨道

最近看到一句话&#xff0c;很喜欢&#xff0c;分享一下。"人生是旷野&#xff0c;不是轨道"。人生不是固定的方程式&#xff0c;也没有唯一答案&#xff0c;没有谁生来就应该是什么样。别太被太多世俗观念束缚住手脚&#xff0c;每个人都有权利自由生长&#xff0c;…

二叉树进阶 --- 中

目录 1. find 的递归实现 2. insert 的递归实现 3. erase 的递归实现 3.1. 被删除的节点右孩子为空 3.2. 被删除的节点左孩子为空 3.3. 被删除的节点左右孩子都不为空 4. 析构函数的实现 5. copy constructor的实现 6. 赋值运算符重载 7. 搜索二叉树的完整实现 1. fi…

IM 是什么?

在当今数字化的时代&#xff0c;即时通讯&#xff08;IM&#xff09;已经渗透到人们的日常生活和企业的工作环境中。IM技术的快速i发展为人们提供了一种高效、便捷的沟通方式&#xff0c;不仅推动了社会的信息化进程&#xff0c;也提升了企业的协同效率和竞争力。 作为企业级I…

程序环境和预处理、编译链接过程、编译的几个阶段、运行环境、预定义符号等的介绍

文章目录 前言一、程序的翻译环境和执行环境二、编译链接过程三、编译的几个阶段四、运行环境五、预定义符号总结 前言 程序环境和预处理、编译链接过程、编译的几个阶段、运行环境、预定义符号的介绍。 一、程序的翻译环境和执行环境 在 ANSI C 的任何一种实现中&#xff0c…

建模电梯的状态图和学生选课ER图

第一题 尝试建模电梯的状态图&#xff08;选做&#xff09; 第二题 学校规定&#xff1a; 一个学生可选修多门课&#xff0c;一门课有若于学生选修。 一个教师可讲授多门课&#xff0c;一门课只有一个教师讲授。 一个学生选修一门课&#xff0c;仅有一个成绩。 学生的属性有学号…

【力扣】63.不同路径 II

原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 目录 1.题目描述 2.思路分析 3.代码实现 1.题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试…

C++11:并发新纪元 —— 深入理解异步编程的力量(1)

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之《C11&#xff1a;并发新纪元 —— 深入理解异步编程的力量》&#xff0c;在这篇文章中&#xff0c;你将会学习到C新特性以及异步编程的好处&#xff0c;以及其如何带来的高性能的魅力&…

RabbitMQ(安装配置以及与SpringBoot整合)

文章目录 1.基本介绍2.Linux下安装配置RabbitMQ1.安装erlang环境1.将文件上传到/opt目录下2.进入/opt目录下&#xff0c;然后安装 2.安装RabbitMQ1.进入/opt目录&#xff0c;安装所需依赖2.安装MQ 3.基本配置1.启动MQ2.查看MQ状态3.安装web管理插件4.安装web管理插件超时的解决…

操作系统基础之磁盘

概述 基本概念 磁盘有正反两个盘面&#xff0c;每个盘面有多个同心圆&#xff0c;每个同心圆是一个磁道&#xff0c;每个同心圆又被划分为多个扇区&#xff0c;数据就被存在扇区中。 磁头首先寻找到对应磁道&#xff0c;然后等到磁盘进行周期旋转到指定的扇区&#xff0c;才…

【SpringBoot篇】基于Redis分布式锁的 误删问题 和 原子性问题

文章目录 &#x1f354;Redis的分布式锁&#x1f6f8;误删问题&#x1f388;解决方法&#x1f50e;代码实现 &#x1f6f8;原子性问题&#x1f339;Lua脚本 ⭐利用Java代码调用Lua脚本改造分布式锁&#x1f50e;代码实现 &#x1f354;Redis的分布式锁 Redis的分布式锁是通过利…

工业中常见大数据技术组件

随着大数据技术在各行各业的广泛应用&#xff0c;数据产品经理的角色也变得越来越重要。了解常见的大数据技术组件对于数据产品经理来说至关重要&#xff0c;因为这有助于他们更好地设计产品架构和功能模块&#xff0c;满足数据处理和分析的需求。在处理海量数据的产品中&#…

【Linux】-网络请求和下载、端口[6]

目录 一、网络请求和下载 1、ping命令 2、wget命令 3、curl命令 二、端口 1、虚拟端口 2、查看端口占用 一、网络请求和下载 1、ping命令 可以通过ping命令&#xff0c;检查指定的网络服务器是否可联通状态 语法&#xff1a;ping [ -c num ] ip或主机名 选项&…

window.location.href的介绍及使用

目录 介绍&#xff1a; 获取当前 URL 设置新的 URL URL 的组成部分 解析 URL 参数 什么是片段标识符的URL&#xff1f; 使用new URL&#xff1a; 输出的部分解释&#xff1a; 假如我们需要获取路径上的最后一级的路径名&#xff1a; 介绍&#xff1a; window.location.h…

2023版brupsuite专业破解安装

安装教程&#xff0c;分两部分&#xff1a; 1、安装java环境、参考链接JAVA安装配置----最详细的教程&#xff08;测试木头人&#xff09;_java安装教程详细-CSDN博客 2、安装2023.4版本brupsuite&#xff1a;参考链接 2023最新版—Brup_Suite安装配置----最详细的教程&…

【数据分析】 JupyterNotebook安装及使用简介

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 在数据分析中&#xff0c;一般用Pycharm编辑代…