好久没更新LLM作为标注员系列,本期介绍一套prompt engineering方法,这套方法能够提升LLM在专业领域的标注效果,同时又不依赖太多的专家人力。
方法来自于这篇论文:Can Generalist Foundation Models Outcompete Special-Purpose Tuning? Case Study in Medicine[1]。
回想笔者之前有关LLM标注范式的总结文章,本文的方法属于「炼丹式」,并且集实用技巧为一身。
问题定义
假设,存在一批标注好的数据D_labeled,其包含m个标注样本(x, y)。
目标是,基于D_labeled,构建基于LLM的数据标注器L,其中L(x)=y_pred,目标是对于任意数据x,标注器能够进行尽量准确的标注。
框架
核心是 三板斧 :
- model-generated Chain Of Thought 。在直接预测y之前,先让模型生成推理过程(即Chain Of Thought,简称CoT),提升效果与可信度;有特色的是,除了在inference时使用,也对训练数据D_labeled生成CoT,并以此构建(x, CoT, y),用于few-shot learning;
- kNN few-shot learning 。在inference时,将k个最相似的(x, CoT, y)作为few-shot examples;根据anthropic的论文In-context Learning and Induction Heads[2],In Context Learning奏效的原理是“类比”,即context中如果有A->B,那么对于A*,模型会预测B*;kNN方法提供相似的样例,因此理论上ICL的效果会更好;
- ensemble 。对于QA任务,更换choice的顺序,跑N次结果,取majority结果;核心是为了消除position bias的影响。
整体的流程图,可以参照如下的伪代码:
- 对training data中的每个样本x,都生成CoT + y;
- 只保留那些答案正确的CoT,构成(x, CoT, y),作为few-shot examples的来源;
- 在inference时,使用embedding检索最邻近的k个examples(x,CoT,y),将其作为context,让LLM执行标注任务;
- 第三步的最外层,加入ensemble策略,以QA为例,可以把各个choice进行N次随机shuffle,得到N个标注结果,然后通过majority vote选择最终答案。
这套方法的厉害之处在于, 全程只需使用标注数据D_labeled即可,无需再引入任何专家人力,整个过程是非常自动化的 。
以上这套流程,原本是为了解决QA任务,但也适用于标注任务;其中kNN Few Shot Learning(简称kNN FSL)和model-generated CoT是通用的方法,ensemble策略则需要有所调整:
- 对于NLU任务,可以对标签顺序进行shuffle,然后同样使用majority vote;
- 对于NLG任务,可以将N次生成结果一齐给LLM,让其基于N个结果来生成答案,这种方法称之为ensemble refining[3]。
效果如何
原论文主要focus在医学QA任务,选择的LLM为GPT-4,对比模型为经过领域微调的Med-Palm2。
可有以下发现:
- 只用简单的prompt,GPT-4就已有较强的能力了,在MedQA上接近80%,但对于医学领域,这个准确率可能还不足,因此专业领域LLM有发展空间;
- 依此加入few-shot examples, model-generated CoT, kNN few-shot, choice shuffle,均会带来效果提升,最终在MedQA上能从81.7% -> 90.2%(需要注意的是,不能简单认为对指标增益小的技术,就是作用小的技术,因为加入顺序是个重要影响因子);
- 通用的foundation LLMs在专业领域也有很大的潜能,prompt engineering则是unlock这些能力的关键;至少在QA任务中,Foundation LLMs + Prompt Engineering是Specific-Domain LLMs的有力竞争者。
为证明这一方法在各专业领域的通用性,原论文还在机器学习、电气工程等领域做了实验,也均选取QA任务,效果如下。
这个结果证明,这套方法对各个专业领域都是通用的。
更深入一点
- ZSL vs fixed FSL vs random FSL vs kNN FSL
ZSL,纯靠LLM的先验知识;fixed FSL,提供了一定的domain知识,并通常由人工选择有代表性的examples;random FSL,知识覆盖率不能保证,反而引入了不确定性;kNN FSL,符合In context learning的原理,且能更充分利用标注数据D_labeled。
同时,kNN FSL还能用于修复问题。对于标注错误的数据,可以手动将这份数据录入D_labeled,下次再遇到相似问题时,这个数据就会被当作few-shot examples,问题就有大概率被解决了;因此kNN FSL能够 data scaling 。
- 机器写的CoT,比人写的好?
论文中也对这个问题进行了探讨,有些出人意料的是,模型写的CoT确实比人写的要好。
人写的CoT,可能带有个人的bias,不一定对其他问题通用,而且可能较短、不够详细;而模型生成的CoT没有这些问题,它更长、更详细、也更通用;下图的实验结果也证明,LLM生成的CoT效果更好。
总结
本文介绍了一套对各领域通用的、自动化的prompt engineering方法,其中kNN FSL、model-generated CoT是最有价值的部分,ensemble则是锦上添花。
虽然原论文的初衷不是用于标注,而是指出foundation LLM + prompt能够达到领域微调LLM的效果,但原论文也提到,这套方法虽然在QA中表现好,但在open world场景中的作用是有限的,换言之,这套方法更适用于有限的特定任务,标注就是一个良好的应用场景。
欢迎关注
欢迎关注笔者,了解更多有趣/有用的NLP知识:)
参考资料
[1] Can Generalist Foundation Models Outcompete Special-Purpose Tuning? Case Study in Medicine: https://arxiv.org/pdf/2311.16452
[2] In-context Learning and Induction Heads: https://arxiv.org/pdf/2209.11895
[3] Towards Expert-Level Medical Question Answering with Large Language Models: https://arxiv.org/pdf/2305.09617