引言
系列第三期,笔者曾得出结论:ChatGLM2-6B、Qwen-7B-Chat在TNEWS数据集上,标注效果不如零样本分类模型 -- Siamese-UniNLU和paddleNLP。
本着不抛弃不放弃的精神,在第四期,笔者尝试优化Qwen-7B-Chat的标注效果。
优化方向仍然是In-Context Learning,本期试验的3种技术如下:
- Noisy Channel Model
- Contextual Calibration(下文简称CC)
- Domain-context Calibration(下文简称DC)
实验表明,在TNEWS(新闻标题分类)和NLPCC2014-Task2(微博情感二分类)数据上,  DC可明显提升Qwen-7B-Chat的Zero-Shot效果(+3%),是值得应用的技术 ;在Few-Shot下,DC和CC提升了鲁棒性,但均未提升Few-Shot效果,  Few-Shot还需再觅良方 。
背景知识
LLM进行分类的两种方法
有两种方法将LLM用于分类任务:
- Generative Classifier:直接将LLM的output(即token)作为分类结果,有- Greedy Decode和- Sample两种,第三期实验即采用- Sample方法
- 优点 :推理成本低,一次推理只需调用一次LLM
- 缺点 :覆盖率 <= 100%,因为LLM的输出格式可能不规范
- Discriminal Classifier:对每个类别y,计算P(y|x),本期的实验主要属于这类方法
- 优点 :覆盖率 = 100%,由于可以拿到y的概率分布,扩展性强(可用于蒸馏、卡阈值等)
- 缺点 :推理成本高,一次推理最多 需要调用 |Y|次LLM,其中|Y|= 标签数量
使用LLM计算P(y|x)的原理示意图如下。
有两种基本方法计算P(y|x):
- Probability 。采取概率连乘的方式计算,即P(y|x) = P(y1|x) * P(y2|x,y1),因此,P(正面|“物美价廉”) = 0.8 * 0.99 = 0.792,P(负面|“物美价廉”)= 0.1 * 0.99 = 0.099
- Average Log-Likelihood (简称Avg)。logP(y|x) = (logP(y1|x) + logP(y2|x,y1))/2,因此,P(正面|“物美价廉") = 0.8899,P(负面|“物美价廉”) = 0.3146
前人论文[1]指出Avg的方法效果好,因此  本文采取Avg的方法来计算P(y|x) 。
Noisy Channel Model:反其道而行之
一般来说,分类模型通过P(y|x)来进行分类,但是Noisy Channel Model却使用P(x|y)。
理论依据如下:
            
P(y|x) = (P(x|y) * P(y)) / P(x)
            
            
由于P(x)与y无关,因此可用P(x|y) * P(y)近似
            
            
假设P(y)为均匀分布,则可采用P(x|y)来进行分类
        
在实现时,要计算P(x|y),只需将Prompt反着写,即将分类任务转化为生成任务:
            
原Prompt:文本:{input_text},标签:
            
现Prompt:标签:{label_name},文本:
        
直观上理解,Noisy Channel Model在分类时需逐字考虑,因此比较鲁棒。详细内容请参阅原论文[2]。
Contextual Calibration(CC):消除3类bias
In-Context Learning具有  高variance 问题,Task Instruction的写法、Few-Shot Examples的选择和呈现顺序等,都对最终的效果有影响。
CC的作者发现了3类bias,可能是variance问题的元凶:
- majority label bias,指倾向于预测prompt中高频的label
- recency bias,指倾向于预测prompt中靠后的label
- common token bias,指倾向于预测在预训练数据中高频的label
作者于是提出校准方法---CC。其公式抽象如下:
P_CC(y|x) = P(y|x) / P(y|NULL)
其中NULL表示content-free input(如''、空、N/A),实现方法比较简单,直接用content-free input替换原本的待推理样本,从而得到P(y|NULL)。
论文实验结果表明,在Zero-Shot、Few-Shot设定下,CC都可显著提升效果,并可减少variance。详细内容请参阅原论文[3]。
Domain-context Calibration(DC):再消除domain bias
在CC的基础上,DC作者再次对bias进行了分类:
- vanilla label bias,与LLM本身参数有关,对应- CC中的- common token bias
- context label bias,与prompt有关,对应- CC中的- majority label bias与- recency bias
- domain label bias,与input_text的分布有关,未被- CC考虑
论文作者举了一个例子,解释何谓domain lable bias
在Tweet hate数据集上,随机从domain中抽取词语,LLM极大程度地预测其为hate,而随机英文单词的预测结果相对均衡,因此Tweet hate的domain label bias比较大;相比之下,SST-2就几乎没有domain label bias。
DC的公式如下:
P_DC(y|x) = P(y|x) / P(y|domain_random_words)
从方法来看,DC与CC的主要不同在于,用于校准的input不再是content-free input,而是domain_random_words,其组成方式是:从domain corpus中随机选L个word,其中L为domain data的平均长度。在实践中,常常重复这一步m步,再取m个结果的平均。
从论文结果来看,  引入更多domain信息 的DC,效果比CC要好,尤其在那些本身的domain label bias比较大的数据集上。详细内容可参阅原论文[4]。
实验设置
实验环境 :ModelScope社区[5]的免费GPU(PAI-DSW),显存为22GB,新用户有36h免费时间
模型训练和推理框架 :ModelScope
实验数据集
- CLUE Benchmark[6]中的TNEWS数据集,新闻标题多分类任务,共有15个分类标签,包括教育、科技、娱乐、游戏等主题;选取train集的前200条 进行实验
- NLPCC2014-Task2[7],微博情感分类数据集,二分类任务,正负比例1:1,随机采样300条 数据进行实验
评测指标 :Accuracy
标注员 :主要的实验模型为Qwen-7B-Chat[8],baseline仍为两个零样本分类模型(达摩院的Siamese-UniNLU-base[9]、百度的PaddleNLP-零样本分类[10])
问题1:Zero-Shot效果如何?
在 TNEWS 数据集上:
| 标注员 | Acc | Cov | 
|---|---|---|
| Qwen + GD | 0.4681 | 0.94 | 
| Qwen + Avg | 0.46 | 1.0 | 
| Qwen + Channel | 0.265 | 1.0 | 
| Qwen + CC | 0.48 | 1.0 | 
| Qwen + DC | 0.494(0.49) | 1.0 | 
| Siamese | 0.4747 | 0.99 | 
| PaddleNLP | 0.511 | 0.91 | 
在 NLPCC2014-Task2 数据集上:
| 标注员 | Acc | Cov | 
|---|---|---|
| Qwen + GD | 0.7767 | 1.0 | 
| Qwen + Avg | 0.7767 | 1.0 | 
| Qwen + Channel | 0.5333 | 1.0 | 
| Qwen + CC | 0.7833 | 1.0 | 
| Qwen + DC | 0.8113(0.81) | 1.0 | 
| Siamese | 0.7867 | 1.0 | 
| PaddleNLP | 0.8199 | 0.7033 | 
根据上述结果,可以发现:
- Channel Model的效果非常差 。笔者分析发现,该方法的类别区分度太低,因此效果不好
- CC和- DC均可提升Zero-Shot效果,效果最好的是- DC,Acc可提升3%(绝对值) ,已经可以超过- Siamese,与- paddleNLP也可一战
- domain_random_words的改变,对- DC的效果影响不大
补充:Cov指标 = Coverage,GD - Greedy Decode;实验中所使用的prompt结构与第三期一致;在prompt确定的情况下,除了
DC外,其他方法都没有随机性,因此其他方法的实验只跑了1次,而DC跑了5次,并报告mean Acc和worst- case Acc;DC所使用的domain corpus也来自测试集;DC中m = 20;CC选择了3个content-free input: ['', '空', '无']
问题2:Few-Shot效果如何?
在Tnews数据集上:
| 方法 | #s | Mean | Best | Worst | 
|---|---|---|---|---|
| GD | 4 | 0.464- | 0.508+ | 0.392- | 
| Avg | 4 | 0.406- | 0.445- | 0.375- | 
| CC | 4 | 0.436- | 0.465- | 0.4- | 
| DC | 4 | 0.456- | 0.48- | 0.415- | 
| GD | 8 | 0.518+ | 0.564+ | 0.455- | 
| Avg | 8 | 0.482+ | 0.51+ | 0.46 | 
| CC | 8 | 0.48 | 0.495+ | 0.465- | 
| DC | 8 | 0.482- | 0.505+ | 0.47- | 
在NLPCC2014-Task2上:
| 方法 | #s | Mean | Best | Worst | 
|---|---|---|---|---|
| GD | 4 | 0.774- | 0.803+ | 0.73- | 
| Avg | 4 | 0.774- | 0.787+ | 0.76- | 
| CC | 4 | 0.784+ | 0.807+ | 0.76- | 
| DC | 4 | 0.802 - | 0.827+ | 0.783- | 
| GD | 8 | 0.783+ | 0.813+ | 0.74 - | 
| Avg | 8 | 0.778+ | 0.797+ | 0.75 - | 
| CC | 8 | 0.793+ | 0.797+ | 0.787+ | 
| DC | 8 | 0.803- | 0.827+ | 0.783- | 
根据上述结果,可以发现:
- 即使使用了CC和DC,Few-Shot的效果还是不尽如人意,效果可能不如Zero-Shot,但增加#shot对效果有帮助
- GD有潜力,但variance问题仍然明显 ,在TNEWS数据上Best Acc - Worst Acc >10%
- CC和- DC均可提升Avg的鲁棒性 ,体现在Best与Worst的差距在减小
补充:所有实验均跑了5次;Few-Shot Example来自验证集前100条,采样方式为随机采样;
Noisy Channel Model在初步实验中效果太差,不予展示;各项Acc指标中最后的+代表相比Zero-Shot设定下的Mean Acc有提升,-代表下降
结论
以Qwen-7B-Chat为基础模型时,在TNEWS和NLPCC2014-Task2数据集上:
- Bias Calibration(CC、DC)可明显提升Zero-Shot的效果,表现最好的是DC(可以提升 3% 的绝对值),因此, 在Zero-Shot设定下推荐使用DC技术
- Bias Calibration(CC、DC)在Few-Shot设定下,体现了鲁棒性,可减少Best表现与Worst表现的差距,但Few-Shot的效果不明显,有时效果不如Zero-Shot,因此, 在Few-Shot方面,还需要探索其他的优化技术
实验代码
https://github.com/duanyu/LLM\_annotator/tree/main/experiment\_vol4
Future Work
- 扩大实验的覆盖面。包括增加数据集和任务类型、增加LLM的数量和类型(如更多的开源LLM、百亿/千亿级LLM)
- 进一步优化Few-Shot的效果。包括增加#shot、优化example的挑选和顺序等
关注笔者
参考资料
[1] Surface Form Competition: Why the Highest Probability Answer Isn’t Always Right: https://aclanthology.org/2021.emnlp-main.564/
[2] Noisy Channel Language Model Prompting for Few-Shot Text Classification: https://aclanthology.org/2022.acl-long.365/
[3] Calibrate Before Use: Improving Few-shot Performance of Language Models: http://proceedings.mlr.press/v139/zhao21c.html
[4] Mitigating Label Biases for In-context Learning: https://aclanthology.org/2023.acl-long.783/
[5] ModelScope: https://modelscope.cn/my/overview
[6] CLUE: https://github.com/CLUEbenchmark/CLUE
[7] NLPCC2014-Task2: http://tcci.ccf.org.cn/conference/2014/pages/page04\_sam.html
[8] Qwen-7B-Chat: https://modelscope.cn/models/qwen/Qwen-7B-Chat/summary
[9] Siamese-UniNLU-base: https://modelscope.cn/models/damo/nlp\_structbert\_siamese-uninlu\_chinese-base/summary
[10] PaddleNLP-零样本分类: https://github.com/PaddlePaddle/PaddleNLP/blob/develop/docs/model\_zoo/taskflow.md
