引言
在 LLM作为标注员 系列的前两期,笔者介绍了两种将LLM引入标注的方法,分别是蒸馏法和多角度标注+弱监督学习法。
在第三期,笔者开展实验,以探究 在中文任务上,参数量 < 10B的开源LLM的标注效果 。
从实验结果来看,在TNEWS新闻标题分类数据上,ChatGLM2-6B
和Qwen-7B-Chat
的标注效果还不够理想,要想学习到泛化性好的任务模型也仍然需要干净的验证集,并未摆脱验证集依赖[1],好消息是:使用简单的ensemble策略,例如Majority Vote
,可明显提升效果。
实验设置
实验环境 :ModelScope社区[2]的免费GPU,显存为24GB,新用户有36h免费时间
模型训练和推理框架 :ModelScope
实验数据集 :CLUE Benchmark[3]中的TNEWS数据集,属于新闻标题多分类任务,共有15个分类标签,包括教育、科技、娱乐、游戏等主题;由于没有公开test集,将dev集均分为val和test,同时为方便起见,将train/val/test的 前1000条 用于实验
评测指标 :Accuracy
标注员 :共两类标注员,一类是开源LLM,包括ChatGLM2-6B[4]、Qwen-7B-Chat[5],另一类是零样本分类模型,包括达摩院的Siamese-UniNLU-base[6]、百度的PaddleNLP-零样本分类[7]
任务模型 :StructBERT-Base[8]
任务模型的学习方法 :直接在标注结果(hard label)上进行监督式训练,即蒸馏法中的CLS
方法
实验1:各个标注员的效果对比
LLM + In-Context Learning
笔者选择实验的In-Context Learning技巧为:Self-Consistency[9]、Few-Shot Prompting。
Prompt的构造结构如下,label_name_list
为分类标签的中文名称,example
为few-shot examples,input_text
为待预测的样本。
prompt = f'''
给定一段文本,输出一个分类标签。
分类标签集合:[{','.join(label_name_list)}]
请直接输出结果,不要附带其他内容。
{example}
文本:'{input_text}'
这段文本所属标签:
'''
ChatGLM2-6B
的效果:
Prompt策略 | 覆盖率 | Acc |
---|---|---|
Zero-Shot | 0.838(0.023) | 0.492(0.017) |
Zero-Shot + Self-Consistency * 3 | 0.93(0.026) | 0.506(0.016) |
15-Shot | 0.776(0.024) | 0.528(0.024) |
30-Shot | 0.75(0.019) | 0.533(0.012) |
Qwen-7B-Chat
的效果:
Prompt策略 | 覆盖率 | Acc |
---|---|---|
Zero-Shot | 0.936(0.03) | 0.485(0.034) |
Zero-Shot + Self-Consistency * 3 | 0.984(0.011) | 0.443(0.02) |
15-Shot | 0.928(0.013) | 0.47(0.037) |
30-Shot | 0.952(0.008) | 0.464(0.024) |
根据结果,可以得出结论:
- Few-Shot和Self-Consistency** 的作用不总是正向的** ,覆盖率或准确率反而可能下降。主要原因是模型的参数量太小,不足以涌现出Few-Shot、Self-Consistency能力[10]
综合考虑覆盖率和准确率,ChatGLM2-6B选择的Prompt策略为: Zero-Shot Prompt+ Self-Consistency * 3 ;Qwen-7B-Chat选择的策略为: Zero-Shot Prompt 。
补充:为加快实验,标注效果评估使用了train的前100条;每组实验重复进行5组,报告平均值和标准差(括号内为标准差);Few-Shot Prompting的样本挑选策略是每类采样同样数量的样本,样本来自validation set;在Zero-Shot、Few-Shot中类别的排列顺序直接采用
sorted
顺序,未经调优和实验
零样本分类模型
零样本分类 | 覆盖率 | Acc |
---|---|---|
siamese-UniNLU | 0.99 | 0.495 |
PaddleNLP | 0.93 | 0.538 |
对比两类标注员的效果,可以发现:
- 零样本分类模型在覆盖率、准确率上,都要强于< 10B的开源LLM ,看来参数量小的开源LLM并不是开箱即能用,标注效果还不够理想
补充:零样本分类模型中,唯一的变量是类别的顺序,笔者未实验不同的类别顺序,和LLM实验一样,直接使用了
sorted
顺序
实验2:任务模型的蒸馏效果
从标签的来源角度,可区分3类训练任务模型的方法:
- Type1 :使用LLM标注来训练+验证,用来分析对干净验证集的依赖程度
- Type2 :使用LLM标注来训练,使用人类标注来验证
- Type3 :使用人类标注来训练+验证,是1和2的效果上限
Type3的 Acc=0.545 ,其他各标注员在各种训练方法下的效果,如下表所示。第三列表示任务模型在测试集上的Acc,第四列代表标注员直接在测试集上标注的效果,用以分析任务模型的泛化性。
标注员 | Type | Acc | 标注员覆盖率/Acc |
---|---|---|---|
ChatGLM2-6B | 1 | 0.451 | 0.9360.464 |
Qwen-7B-Chat | 1 | 0.452 | 0.9510.448 |
siamese-UniNLU | 1 | 0.489 | 0.970.489 |
PaddleNLP | 1 | 0.491 | 0.9390.531 |
ChatGLM2-6B | 2 | 0.49 | 0.9360.464 |
Qwen-7B-Chat | 2 | 0.456 | 0.9510.448 |
siamese-UniNLU | 2 | 0.501 | 0.970.489 |
PaddleNLP | 2 | 0.507 | 0.9390.531 |
根据结果,可有以下发现:
- 由于标注员的Acc还不够高(~ 50%),因此任务模型的效果离人类标注训练的模型,还有差距
- 任务模型的效果主要与标注员的准确率相关,覆盖率略低一些没有关系
- clean validation对任务模型的泛化性影响很大。当不使用clean validation时(即Type1方式),任务模型效果很难超过标注员,而使用clean validation时(即Type2方式),效果有明显提升
补充:validation的作用是调参 + 选择最佳checkpoint;调参只针对
learning rate
,候选集为{1e-5, 2e-5, 3e-5, 4e-5, 5e-5},其他参数固定:batch_size = 32
,优化器为Adam
,最多训练20个epoch;注意,本节的所有实验均只跑了一次
实验3:标注员的一致性分析
使用Cohen's Kappa Score[11]来衡量标注员的一致性,结果如下:
对比标注员 | Kappa Score |
---|---|
ChatGLM vs Qwen(同类) | 0.599 |
ChatGLM vs siamese(不同类) | 0.473 |
ChatGLM vs PaddleNLP (不同类) | 0.515 |
Qwen vs siamese(不同类) | 0.468 |
Qwen vs PaddleNLP(不同类) | 0.46 |
siamese vs PaddleNLP(同类) | 0.588 |
首先,所有标注员之间的Kappa得分都在0.4以上,属于 中等一致性 ;
其次, 同类标注员间的一致性明显更大 ,这与相近的模型结构、相近的训练方式、相近的训练数据有关。
实验4:ensemble的效果
对于1个样本,通过4个标注员,可以得到4个标注结果,一个自然的思路是对这些标注进行ensemble。
主要对比两类ensemble方法:
- Majority Vote 。取多个标注中最频繁的结果,隐含假设是每个标注员是独立的,且重要性一致
- Label Model (来自Snorkel[12])。可建模标注员间的关系,可自动学习标注员的权重
首先来看标注的效果:
ensemble方法 | 覆盖率(test) | Acc(test) |
---|---|---|
Majority Vote | 0.833 | 0.558 |
Label Model | 1.0 | 0.512 |
很明显,两个方法 各有优劣 。Majority Vote
的准确率很高,但是牺牲了覆盖率(当4个标注员无法进行Majority Vote
时,则放弃此次标注);Label Model
的效果更加均衡,可以覆盖所有的样本,但是准确率相对更低一些。但是, 两个方法都要比单独的标注员效果要好 。
再来看使用ensemble标注结果后,任务模型的学习效果:
标注员 | Type | Acc(test) |
---|---|---|
Majority Vote | 1 | 0.514 |
Label Model | 1 | 0.514 |
Majority Vote | 2 | 0.527 |
Label Model | 2 | 0.519 |
首先,不论使用哪一种ensemble方法、不论是否有clean validation, 都可以取得明显的效果提升,Acc可以提升2%的绝对值 ;
其次,尽管覆盖率降低了,但 由于准确率有大幅提升 ,Majority Vote
在Type2训练时,效果要更好;
这也比较符合直觉,毕竟4个标注员的水平差距不是很大,具有权重一致性假设的Majority Vote
,效果已足矣。
结论
在TNEWS新闻标题分类数据集上:
ChatGLM2-6B
、Qwen-7B-Chat
的标注效果不及零样本分类模型- 干净验证集对任务模型的学习效果影响大,使用LLM、零样本分类模型来标注,也并没能摆脱验证集依赖
- 同类型标注员的一致性要明显大于不同类标注员
- ensemble可以取得明显更好的效果,简单的
Majority Vote
足矣,但效果仍无法超越人类标注训练模型的结果
局限性
读者需要注意的是,本次实验有诸多局限性:
- 实验数据集仅有一个,本文的结论可能不具备普适性
- 在
In-Context Learning
调优方面还不足,未对example的挑选、顺序进行调优,未对prompt结构进行调优,因此LLM的标注效果可能还有提升空间 - 进行实验的开源LLM只选取了
ChatGLM2-6B
和Qwen-7B-Chat
,没有实验baichuan-7B/13B
、Moss(16B)
、InternLM-Chat-7B
等模型
代码地址
本文实验所使用的代码:
https://github.com/duanyu/LLM\_annotator/tree/main/experiment\_vol3
Future Work
在未来,笔者将在以下几个方向进行探索:
- 扩大实验的覆盖面。包括使用更多样的LLM、更大参数的LLM、扩展实验的数据和任务类型
- 探索简单的、鲁棒的
In-Context Learning
优化方法 - 探索其他的
Task Adaption
策略,例如Few-Shot Fine-Tuning
等方法
读者反馈收集
参考资料
[1] Weaker Than You Think- A Critical Look at Weakly Supervised Learning: https://aclanthology.org/2023.acl-long.796.pdf
[2] ModelScope: https://modelscope.cn/my/overview
[3] CLUE: https://github.com/CLUEbenchmark/CLUE
[4] ChatGLM2-6B: https://modelscope.cn/models/ZhipuAI/chatglm2-6b/summary
[5] Qwen-7B-Chat: https://modelscope.cn/models/qwen/Qwen-7B-Chat/summary
[6] Siamese-UniNLU-base: https://modelscope.cn/models/damo/nlp\_structbert\_siamese-uninlu\_chinese-base/summary
[7] PaddleNLP-零样本分类: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/docs/model\_zoo/taskflow.md
[8] StructBERT: https://openreview.net/forum?id=BJgQ4lSFPH
[9] Self-Consistency Improves Chain of Thought Reasoning in Language Models: https://openreview.net/pdf?id=1PL1NIMMrw
[10] Emergent Abilities of Large Language Models: https://arxiv.org/abs/2206.07682
[11] Cohen's Kappa Score: https://scikit-learn.org/stable/modules/generated/sklearn.metrics.cohen\_kappa\_score.html
[12] Snorkel: https://github.com/snorkel-team/snorkel