作为标注员的LLM(三):中文开源LLM的标注效果初体验

大模型关系型数据库微服务

引言

LLM作为标注员 系列的前两期,笔者介绍了两种将LLM引入标注的方法,分别是蒸馏法多角度标注+弱监督学习法

在第三期,笔者开展实验,以探究 在中文任务上,参数量 < 10B的开源LLM的标注效果

从实验结果来看,在TNEWS新闻标题分类数据上,ChatGLM2-6BQwen-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-Shot0.838(0.023)0.492(0.017)
Zero-Shot + Self-Consistency * 30.93(0.026)0.506(0.016)
15-Shot0.776(0.024)0.528(0.024)
30-Shot0.75(0.019)0.533(0.012)

Qwen-7B-Chat的效果:

Prompt策略覆盖率Acc
Zero-Shot0.936(0.03)0.485(0.034)
Zero-Shot + Self-Consistency * 30.984(0.011)0.443(0.02)
15-Shot0.928(0.013)0.47(0.037)
30-Shot0.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-UniNLU0.990.495
PaddleNLP0.930.538

对比两类标注员的效果,可以发现:

  • 零样本分类模型在覆盖率、准确率上,都要强于< 10B的开源LLM ,看来参数量小的开源LLM并不是开箱即能用,标注效果还不够理想

补充:零样本分类模型中,唯一的变量是类别的顺序,笔者未实验不同的类别顺序,和LLM实验一样,直接使用了sorted顺序

实验2:任务模型的蒸馏效果

从标签的来源角度,可区分3类训练任务模型的方法:

  • Type1 :使用LLM标注来训练+验证,用来分析对干净验证集的依赖程度
  • Type2 :使用LLM标注来训练,使用人类标注来验证
  • Type3 :使用人类标注来训练+验证,是1和2的效果上限

Type3的 Acc=0.545 ,其他各标注员在各种训练方法下的效果,如下表所示。第三列表示任务模型在测试集上的Acc,第四列代表标注员直接在测试集上标注的效果,用以分析任务模型的泛化性。

标注员TypeAcc标注员覆盖率/Acc
ChatGLM2-6B10.4510.9360.464
Qwen-7B-Chat10.4520.9510.448
siamese-UniNLU10.4890.970.489
PaddleNLP10.4910.9390.531
ChatGLM2-6B20.490.9360.464
Qwen-7B-Chat20.4560.9510.448
siamese-UniNLU20.5010.970.489
PaddleNLP‍‍20.5070.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方法:

  1. Majority Vote 。取多个标注中最频繁的结果,隐含假设是每个标注员是独立的,且重要性一致
  2. Label Model (来自Snorkel[12])。可建模标注员间的关系,可自动学习标注员的权重

首先来看标注的效果:

ensemble方法覆盖率(test)Acc(test)
Majority Vote0.8330.558
Label Model1.00.512

很明显,两个方法 各有优劣Majority Vote的准确率很高,但是牺牲了覆盖率(当4个标注员无法进行Majority Vote时,则放弃此次标注);Label Model的效果更加均衡,可以覆盖所有的样本,但是准确率相对更低一些。但是, 两个方法都要比单独的标注员效果要好

再来看使用ensemble标注结果后,任务模型的学习效果:

标注员TypeAcc(test)
Majority Vote10.514
Label Model10.514
Majority Vote20.527
Label Model20.519

首先,不论使用哪一种ensemble方法、不论是否有clean validation, 都可以取得明显的效果提升,Acc可以提升2%的绝对值 ;

其次,尽管覆盖率降低了,但 由于准确率有大幅提升Majority Vote在Type2训练时,效果要更好;

这也比较符合直觉,毕竟4个标注员的水平差距不是很大,具有权重一致性假设的Majority Vote,效果已足矣。

结论

在TNEWS新闻标题分类数据集上:

  • ChatGLM2-6BQwen-7B-Chat的标注效果不及零样本分类模型
  • 干净验证集对任务模型的学习效果影响大,使用LLM、零样本分类模型来标注,也并没能摆脱验证集依赖
  • 同类型标注员的一致性要明显大于不同类标注员
  • ensemble可以取得明显更好的效果,简单的Majority Vote足矣,但效果仍无法超越人类标注训练模型的结果

局限性

读者需要注意的是,本次实验有诸多局限性:

  • 实验数据集仅有一个,本文的结论可能不具备普适性
  • In-Context Learning调优方面还不足,未对example的挑选、顺序进行调优,未对prompt结构进行调优,因此LLM的标注效果可能还有提升空间
  • 进行实验的开源LLM只选取了ChatGLM2-6BQwen-7B-Chat,没有实验baichuan-7B/13BMoss(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等方法

读者反馈收集

picture.image

参考资料

[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

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论