引言
系列第三期,笔者曾得出结论: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中高频的labelrecency bias
,指倾向于预测prompt中靠后的labelcommon 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