利用LLM的力量:零射和少射提示
LLM的力量:零射和少射提示
介绍
LLMs的威力已成为人工智能社区的新热点。早期采用者涌向了不同的生成式AI解决方案,如GPT 3.5、GPT 4和BARD,用于不同的用例。它们已被用于问答任务、创意文本写作和关键分析。由于这些模型在大量的语料库上进行了诸如下一句预测之类的任务训练,因此人们期望它们在文本生成方面表现出色。
强大的基于transformer的神经网络使得模型也能够适应基于语言的机器学习任务,如分类、翻译、预测和实体识别。因此,数据科学家可以通过给出适当的指令来利用生成式AI平台进行更实际和工业化的基于语言的ML用例。在本文中,我们旨在展示如何使用提示和批判性地分析零样本和少样本提示来简单地使用生成式LLMs进行普遍的基于语言的ML任务。
学习目标
- 了解零样本和少样本提示。
- 分析它们在一个示例机器学习任务上的性能。
- 评估少样本提示与Fine-tuning等更复杂的技术的性能。
- 了解提示技术的优缺点。
本文作为数据科学博客马拉松的一部分发表。
什么是提示?
让我们从定义LLMs开始。大型语言模型(LLM)是一个由多层transformer和前馈神经网络构建的深度学习系统,包含数亿到数十亿个参数。它们在不同来源的大规模数据集上进行训练,并被设计用于理解和生成文本。一些示例应用包括语言翻译、文本摘要、问答、内容生成等。LLMs有不同的类型:仅编码器(BERT)、编码器+解码器(BART、T5)和仅解码器(PALM、GPT等)。带有解码器组件的LLMs被称为生成式LLMs,这是大多数现代LLMs的情况。
如果你告诉生成式LLM做一个任务,它会生成相应的文本。但是,我们如何告诉生成式LLM执行特定的任务呢?很简单,我们给它一个书面的指令。LLMs被设计为根据指令(也称为提示)响应最终用户。如果你与ChatGPT等LLM进行过互动,你就使用过提示。提示是将我们的意图以自然语言查询的形式进行打包,以引起模型返回所需的响应(例如:图1,来源:Chat GPT)。
在接下来的章节中,我们将看到两种主要类型的提示技术:零样本和少样本。我们将结合一些基本示例来详细介绍它们。
零样本提示
零样本提示是生成式LLMs特有的零样本学习的一种特定场景。在零样本中,我们不向模型提供任何标记数据,并期望模型在一个全新的问题上工作。例如,通过提供适当的指令,使用ChatGPT进行零样本提示来处理新任务。LLMs能够适应未见过的问题,因为它们理解来自多个资源的内容。让我们来看几个例子。
这是一个将文本分类为正面、中性和负面情感类别的示例查询。
推文示例
推文示例来自Twitter美国航空公司情感数据集。该数据集包含对不同航空公司的反馈推文,标记为正面、中性或负面。在图2(来源:ChatGPT)中,我们提供了任务名称,即情感分类,类别,即正面、中性和负面,文本内容和用于分类的提示。图2中的航空公司反馈是积极的,赞赏与航空公司的飞行体验。ChatGPT正确将该评论的情感分类为积极,显示了ChatGPT在新任务上的泛化能力。
上图显示了Chat GPT在另一个例子中进行零-shot学习,但情感为负面。Chat GPT再次正确预测了推文的情感。虽然我们展示了两个模型成功分类评论文本的例子,但也存在一些边界情况,即使是最先进的LLM模型也会失败。例如,让我们看下面的图4中的例子。用户在投诉航空公司的食物质量,但Chat GPT错误地将情感识别为中性。
在下表中,我们可以看到零-shot学习与BERT模型(来源)在Twitter情感数据集上的性能比较。我们将查看准确度、F1分数、精确度和召回率等指标。对每种情况,对航空公司情感数据集的随机选择子集进行零-shot学习的性能评估,并将性能数字四舍五入为最接近的整数。零-shot学习在每个评估指标上有较低但不错的性能,展示了提示功能的强大之处。性能数字已四舍五入为最接近的整数。
Few-shot提示
与零-shot学习不同,few-shot提示涉及在提示中提供少量标记示例。这与传统的few-shot学习不同,后者是指使用少量样本对LLM进行微调来解决新问题。这种方法通过允许模型迅速适应并为少量标记样本的新类别提供精确的预测,减少了对大型标记数据集的依赖。当为新类别收集大量标记数据需要时间和精力时,这种方法非常有益。下面是few-shot提示的一个例子(图5):
Few Shot vs Zero Shot
few-shot学习在性能上比零-shot学习有所提升。如下表所示,通过提供一些高质量的示例以及边界和关键示例的样本,我们可以提高任务的准确性,同时在提示生成式人工智能模型时使用few-shot学习(10个、20个和50个示例)。few-shot学习在每种情况下对航空公司情感数据集的随机子集进行了性能评估,性能数字已被四舍五入为最接近的整数。
根据上表中的评估指标,few-shot学习在准确性上相对于零-shot学习提高了10%,在F1分数上提高了7%,并且达到了微调的BERT模型的性能水平。另一个关键观察是,在20个示例之后,改进停滞不前。我们在分析中涵盖的示例是Chat GPT在Twitter美国航空公司情感数据集上的一个特定用例。让我们看另一个例子,以了解我们的观察结果是否适用于更多任务和生成式AI模型。
语言模型:few-shot学习器
下面(图6)是在论文“语言模型是few-shot学习器”中描述的研究中的一个例子,比较了few-shot、one-shot和零-shot模型与GPT-3的性能。在LAMBADA基准测试(目标单词预测)中,性能在不同的few-shot设置下进行了评估。LAMBADA的独特之处在于它关注评估模型处理文本中的长距离依赖性的能力,即信息与其相关上下文之间有相当大的距离的情况。few-shot学习在准确性上比零-shot学习提高了12.2个百分点。
在上述论文中的另一个例子中,对比了GPT-3在SuperGLUE基准测试中使用不同数量的示例进行提示时的性能与对比Fine-Tuned BERT模型的表现。SuperGLUE被认为是评估语言理解机器学习任务性能的关键基准。图表(图7)显示前八个示例具有最大的影响力。随着我们增加更多的示例进行少样本提示,我们遇到了一个问题,即我们需要指数增加示例才能看到明显的改进。我们可以非常清楚地看到,与我们情感分类示例的相同观察结果被复制。
仅在缺少标记数据的情况下才应考虑零样本。如果我们有一些标记示例,与零样本相比,我们可以通过少样本获得很好的性能提升。一个悬而未决的问题是,当与Fine-Tuning等更复杂的技术进行比较时,这些技术的表现如何。最近已经有几种发展较好的LLM Fine-Tuning技术,并且它们的使用成本也大大降低。为什么我们不只是Fine-Tuning我们的模型呢?在接下来的章节中,我们将深入比较提示技术与Fine-Tuned模型。
少样本提示与Fine-Tuning
使用生成性LLM的少样本的主要优点是实施方法的简单性。收集一些标记的示例并准备提示,运行推理,我们就完成了。即使有几种现代创新,Fine-Tuning在实现上也相当笨重,并且需要大量的训练时间和资源。对于一些特定的实例,我们可以使用不同的生成性LLM界面来获得结果。对于更大的数据集的推理,代码可能只是这样简单:
import os
import openai
messages = []
# Chat GPT labeled examples
few_shot_message = ""
# Mention the Task
few_shot_message = "Task: Sentiment Classification \n"
# Mention the classes
few_shot_message += "Classes: positive, negative \n"
# Add context
few_shot_message += "Context: We want to classify sentiment of hotel reviews \n"
#Add labeled examples
few_shot_message += "Labeled Examples: \n"
for labeled_data in labeled_dataset:
few_shot_message += "Text: " + labeled_data["text"] + "\n";
few_shot_message += "Label: " + labeled_data["label"] + "\n"
# Call OpenAI API for ChatGPT providing the few-shot examples
messages.append({"role": "user", "content": few_shot_message})
chat = openai.ChatCompletion.create(
model="gpt-3.5-turbo", messages=messages
)
for data in unlabeled_dataset:
# Add the text to classfy
message = "Text: " + data + ", "
# Add the prompt
message += "Prompt: Classify the given text into one of the sentiment categories."
messages.append({"role": "user", "content": message})
# Call OpenAI API for ChatGPT for classification
chat = openai.ChatCompletion.create(
model="gpt-3.5-turbo", messages=messages
)
reply = chat.choices[0].message.content
print(f"ChatGPT: {reply}")
messages.append({"role": "assistant", "content": reply})
少样本与Fine-Tuning相比的另一个关键优点是数据量。在Twitter美国航空公司情感分类任务中,BERT Fine-Tuning需要超过10,000个示例,而少样本提示只需要20到50个示例就能达到类似的性能。然而,这些性能提升是否适用于其他以语言为基础的机器学习任务?我们所介绍的情感分类示例是一个非常特定的用例。少样本提示的性能可能不会达到每个用例的Fine-Tuned模型的水平。然而,它在各种语言任务中展示出类似/更好的能力。为了展示少样本提示的威力,我们在下面的章节中将其与SOTA和Fine-Tuned的语言模型(如BERT)在标准化的语言理解、翻译和问答基准测试任务上进行了性能比较。(来源:语言模型是少样本学习器)
语言理解
为了比较少样本和Fine-Tuning在语言理解任务上的性能,我们将看一下SuperGLUE基准测试。SuperGLUE是一个语言理解基准测试,包括分类、文本相似性和自然语言推理任务。用于比较的Fine-Tuned模型是Fine-Tuned的BERT大型和Fine-Tuned的BERT++模型,而用于比较的生成性LLM是GPT-3。下图(图8和图9)中的图表显示了生成性LLM的足够大尺寸的少样本提示,大约32个少样本示例足以击败Fine-Tuned的BERT++和Fine-Tuned的BERT大型。与BERT大型相比的准确率提高约2.8个百分点,展示了少样本在生成性LLM上的强大能力。
翻译
在下一个任务中,我们将比较少样本学习和微调在基于翻译的任务上的性能。我们将使用BLUE基准,也称为双语评估协作。BLEU计算一个介于0和1之间的分数,其中较高的分数表示更好的翻译质量。BLEU的主要思想是将生成的翻译与一个或多个参考翻译进行比较,并测量生成的翻译与参考翻译包含相似n-gram的程度。比较使用的模型是XLM、MASS和mBART,生成的LLM是GPT-3。
如下图中的表格(图10)所示,使用少样本的提示与生成的LLM相结合,仅凭几个示例就足以击败XLM、MASS、多语言BART,甚至在不同的翻译任务中超越了SOTA。少样本的GPT-3在将英文翻译时比以前的无监督神经机器翻译工作提高了5个BLEU,反映了其作为英文翻译语言模型的优势。然而,需要注意的是,该模型在某些翻译任务上表现不佳,比如英文到罗马尼亚语的翻译,突显了其差距和需要逐案评估性能的必要性。
问答
在最后一个任务中,我们将比较少样本学习和微调在问答任务上的性能。任务名称不言自明。我们将关注三个问答任务的关键基准:PI QA(程序信息问答)、Trivia QA(事实知识和回答问题)和CoQA(对话问答)。将其与微调模型的SOTA进行比较,生成的LLM是GPT-3。如下图所示(图11、图12和图13),使用少样本的提示与生成的LLM相结合,仅凭几个示例就足以击败PIQA和Trivia QA的微调SOTA。该模型在CoQA的微调SOTA上没有达到,但准确率相当。
提示的限制
上面的众多示例和案例研究清楚地显示了少样本学习如何成为几种基于语言的机器学习任务的首选解决方案。在大多数情况下,少样本技术实现了比微调更好或接近的结果。然而,需要注意的是,在大多数利基用例中,领域特定的预训练将大大优于微调[来源],因此也优于提示技术。这个限制不能在提示设计层面解决,需要在通用LLM的发展方面取得重大进展。
另一个基本限制是生成的LLM的幻觉。通用LLM往往容易产生幻觉,因为它们通常过于追求创造性写作。这是领域特定LLM更精确、在领域特定基准上表现更好的另一个原因。
最后,使用像Chat GPT和GPT-4这样的通用LLM会比微调或领域特定模型具有更高的隐私风险,因为我们可以构建我们自己的模型实例。这是一个关注点,特别是对于依赖专有或敏感用户数据的用例。
结论
提示技术已经成为LLMs和实际的基于语言的机器学习任务之间的桥梁。零样本,不需要先前标记数据的要求,展示了这些模型泛化和适应新问题的潜力。然而,与微调相比,它未能达到类似/更好的性能。大量的示例和基准性能比较表明,少样本提示为各种任务提供了一种引人注目的微调替代方案。通过在提示中提供一些标记示例,这些技术使模型能够迅速地适应具有最少标记数据的新类别。此外,上述部分列出的性能数据表明,将现有解决方案迁移到使用少样本提示与生成性LLM是一个值得投资的举措。使用本文中提到的方法进行实验将提高使用提示技术实现目标的机会。
要点
- 提示技术实现实际应用:提示技术是生成性LLMs和实际的基于语言的机器学习任务之间的强大桥梁。零样本提示允许模型在没有标记数据的情况下进行泛化,而少样本通过提供几个示例来快速适应。这些技术简化了部署,为有效利用提供了一条途径。
- 少样本比零样本表现更好:少样本通过提供有针对性的示例来为LLM提供更好的性能指导。它允许模型利用其预训练知识,并从最少的任务特定示例中受益,从而为给定任务提供更准确和相关的响应。
- 少样本提示与微调竞争:少样本是微调的一种有前途的替代方案。少样本通过在提示中提供标记示例,在分类、语言理解、翻译和问答任务上实现了类似或更好的性能。它在标记数据稀缺的场景中表现尤为出色。
- 局限性和注意事项:尽管生成性LLMs和提示技术有许多好处,但专门任务仍然需要领域特定的预训练。此外,与泛化的LLMs相关的隐私风险强调了需要谨慎处理敏感数据的重要性。
常见问题
参考资料
- Tom B. Brown等人,Language models are few-shot learners, In Proceedings of the 34th International Conference on Neural Information Processing Systems (NIPS’20), 2020.
- https://www.kaggle.com/datasets/crowdflower/twitter-airline-sentiment
- https://www.kaggle.com/code/sdfsghdhdgresa/sentiment-analysis-using-bert-distillation
- https://github.com/Deepanjank/OpenAI/blob/main/open_ai_sentiment_few_shot.py
- https://www.analyticsvidhya.com/blog/2023/08/domain-specific-llms/
本文中显示的媒体不归Analytics Vidhya所有,仅根据作者的判断使用。