CritiQ 工作文档

LLM生成评估指标,协助标注数据完成Reward模型训练

CritiQ 记录

[TOC]

目标

  • 训练模型,由模型判断语料文本数据的质量(高/低),完成质量检测,帮助后续模型训练

训练数据准备

  • 至少需要300正例+300负例,希望是人类专家的标注

在训练数据不足1w的情况,使用CritiQ去做数据标注

传统训练都是训练集>测试集

这里是通过挖掘人类偏好,测试集合远大于训练集,使用训练集挖掘出来的指标,对测试集进行标注

当训练数据超过1w的时候,可以直接跳过这个部分去做分类模型训练

Knowledge Base

对于数据质量评估,如果完全交由模型生成评估指标,从各个角度来说都很水

参考:2502.19279] CritiQ: Mining Data Quality Criteria from Human Preferences

workflow:

  • 从huggingface的数据集中寻找参考论文列表
  • 从arxiv能找到的论文中爬取摘要
  • 通过制作agent分析摘要,判断论文中是否有关于数据集评价等内容
  • 提取评估指标

最后论文作者得到了一个370+数量的指标

根据不同的待测数据集,跑一遍,选择准确度较高的

数量不够让模型生成

Training

github

环境

cuda 12.4 + torch 2.6 + Python3.10

1
2
3
conda create -n critiq_env python=3.10 -y
conda activate critiq_env
pip3 install torch torchvision torchaudio
1
python -c "import torch; print('PyTorch版本:', torch.__version__); print('GPU可用:', torch.cuda.is_available()); print('GPU名称:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else '无可用GPU')"
1
2
3
git clone https://github.com/KYLN24/CritiQ
cd CritiQ
pip install -e ".[vllm,train]"

之后如果网络不太行,换一个源:

1
2
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"

数据集

Pair Data格式如下:

1
2
3
4
class PairData(TypedDict):
    A: str
    B: str
    answer: Literal["A", "B"]

训练数据格式(保存为train_reward.jsonl):

1
2
{"A": "金属的导热系数显著高于木材(铁约80 W/m·K vs 木材约0.1 W/m·K),根据傅里叶定律q=-k∇T,更高的导热系数导致更快的热传导速率,使手部热量迅速流失。","B": "金属传热特别快,能迅速把你手上的热量带走,所以摸起来凉;木头传热慢,热量不容易流失,感觉就没那么凉。就像夏天坐金属凳子比坐木凳子感觉更凉快。","answer": "B"}
{"A": "由牛顿第一定律可知,物体保持原有运动状态。当汽车以加速度a减速时,乘客因惯性保持原速v,直到受到座椅摩擦力f=μN的作用才减速。","B": "因为你的身体想保持原来的运动状态。车停了,但你的身体还在往前,所以会往前倾。就像跑步时突然停下,身体还会往前冲一样。","answer": "B"}

Reward模型输入格式(保存为predict_reward.jsonl):

1
2
3
4
5
6
{"text": "金属的导热系数显著高于木材(铁约80 W/m·K vs 木材约0.1 W/m·K),根据傅里叶定律q=-k∇T,更高的导热系数导致更快的热传导速率,使手部热量迅速流失。"}
{"text": "金属传热特别快,能迅速把你手上的热量带走,所以摸起来凉;木头传热慢,热量不容易流失,感觉就没那么凉。就像夏天坐金属凳子比坐木凳子感觉更凉快。"}
{"text": "由牛顿第一定律可知,物体保持原有运动状态。当汽车以加速度a减速时,乘客因惯性保持原速v,直到受到座椅摩擦力f=μN的作用才减速。"}
{"text": "因为你的身体想保持原来的运动状态。车停了,但你的身体还在往前,所以会往前倾。就像跑步时突然停下,身体还会往前冲一样。"}
{"text": "光从光密介质(水,n=1.33)进入光疏介质(空气,n≈1)时发生折射,根据斯涅尔定律n₁sinθ₁=n₂sinθ₂,折射角大于入射角导致视觉偏移。"}
{"text": "因为光从水进入空气时会拐弯,让我们看到的位置和实际位置不一样,所以筷子看起来像是弯的。就像把吸管插进水里也会看起来弯折一样。"}

一共准备了137条数据:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
请生成100个初中物理现象问题与解答,要求:  
1. 每个问题包含两种回答:  
   - **A**:专业严谨的物理解释(含公式、原理名称、数据等)  
   - **B**:通俗易懂的讲解(用比喻、生活实例,语言口语化)  
   - **answer**:固定标注"B"  
2. 数据格式:每行一个完整JSON对象,严格遵循以下结构:  
   {"A": "...", "B": "...", "answer": "B"}  
3. 内容要求:  
   - 物理现象需贴近日常生活(如热学、光学、力学等)  
   - B回答必须正确且易于理解,避免专业术语  
   - 示例类比需直观(如"像磁铁吸住""像气球爆炸")  
4. 输出:直接给出结果,无需注释,禁止使用```包裹  

示例格式:  
{"A": "金属导热系数较高(铁80 W/m·K),根据傅里叶定律q=-k∇T...", "B": "金属像‘传热快手’,迅速带走热量,所以摸起来更凉", "answer": "B"}

由模型生成

先做一个预测:

1
python ./critiq/scripts/reward_predict.py --model Qwen/Qwen2.5-1.5B-Instruct --data ./data/predict_reward.jsonl --output_dir ./output

输出结果在output

1
2
3
4
5
6
{"text": "金属的导热系数显著高于木材(铁约80 W/m·K vs 木材约0.1 W/m·K),根据傅里叶定律q=-k∇T,更高的导热系数导致更快的热传导速率,使手部热量迅速流失。", "reward": 0.9465966820716858}
{"text": "金属传热特别快,能迅速把你手上的热量带走,所以摸起来凉;木头传热慢,热量不容易流失,感觉就没那么凉。就像夏天坐金属凳子比坐木凳子感觉更凉快。", "reward": 0.9046503901481628}
{"text": "由牛顿第一定律可知,物体保持原有运动状态。当汽车以加速度a减速时,乘客因惯性保持原速v,直到受到座椅摩擦力f=μN的作用才减速。", "reward": 0.9736446738243103}
{"text": "因为你的身体想保持原来的运动状态。车停了,但你的身体还在往前,所以会往前倾。就像跑步时突然停下,身体还会往前冲一样。", "reward": 0.9664104580879211}
{"text": "光从光密介质(水,n=1.33)进入光疏介质(空气,n≈1)时发生折射,根据斯涅尔定律n₁sinθ₁=n₂sinθ₂,折射角大于入射角导致视觉偏移。", "reward": 0.9532749652862549}
{"text": "因为光从水进入空气时会拐弯,让我们看到的位置和实际位置不一样,所以筷子看起来像是弯的。就像把吸管插进水里也会看起来弯折一样。", "reward": 0.9845753908157349}

给的分数都很高,因为两种风格的文本质量都不低

为了让模型出现人类的偏好,我们开始训练一下:

1
python ./critiq/scripts/train_reward.py --data ./data/train_reward.jsonl --eval_steps 40

eval_steps一定要开大一点……原代码是1,每一步保存一个模型,磁盘炸的很快

训练的模型保存路径:<output_dir>/<job_name>

我这里是./output/tmp

再跑一下预测:

1
python ./critiq/scripts/reward_predict.py --model ./output/tmp/checkpoint-109 --data ./data/predict_reward.jsonl --output_dir ./output

还没fixed的bug:

predict不知道为什么给的结果永远是:0.9以上

我直接修改了train.py,训练完直接跑预测,结果是对的(

1
2
3
4
5
6
7
{"text": "突然关水龙头像‘管道撞车’,水流‘刹车不及’撞出巨响", "reward": 0.9999999586005831}
{"text": "磁致伸缩ΔL/L≈10^-5(镍),逆效应用于超声换能器", "reward": 2.2827974365423323e-05}
{"text": "磁致伸缩材料像‘会呼吸的磁铁’,磁场一变就‘伸缩’", "reward": 0.9999999123574378}
{"text": "防晒霜氧化锌散射UV,粒径d≈20 nm最优", "reward": 1.568953403843032e-05}
{"text": "物理防晒像‘纳米镜子’,把紫外线‘弹弹球’般反射", "reward": 0.9999999918479713}
{"text": "橡皮船浮力F=ρgV,PVC材料ρ≈1.4 g/cm³", "reward": 1.0129980850990629e-05}
{"text": "充气船像‘塑料泡泡’,空气‘内胆’让它漂水面", "reward": 0.9999985406223194}
使用 Hugo 构建
主题 StackJimmy 设计