提示工程:少样本提示(Few-shot Prompting)

少样本提示(Few-shot Prompting)是一种利用大语言模型从少量示例样本中学习并处理任务的方法。它的核心思想是利用大语言模型的上下文学习能力,通过在提示中增加“示例样本”来启发大语言模型达到举一反三的效果。这种方法避免了重新训练或者微调模型,是一种非常经济的做法。

让我们看看下面这个纠正错别字的例子。

# 任务描述
请对以下每一行文本纠错,找出其中的错别字,并按照“输出格式”输出。

# 待纠错文本
熊猫打滚,可爱又玩皮
熊猫血,珍贵无敝
熊猫国宝,人见人哀

# 输出格式
原始文本行(错字→对字)

# 输出结果
->

输出结果:

熊猫打滚,可爱又调皮 → 玩皮
熊猫血,珍贵无比 → 无敝
熊猫国宝,人见人爱 → 哀

我们可以看到,大语言模型并没有真正理解任务要求,它只是根据自己的常识和偏好给出了答案。为了进一步提升效果,我们可以在提示中提供一个具体的输出示例,让大语言模型根据示例学习这种处理任务的模式,示例如下:

# 任务描述
请对以下每一行文本纠错,找出其中的错别字,并按照“输出格式”输出。

# 错别字
熊猫打滚,可爱又玩皮
熊猫血,珍贵无敝
熊猫国宝,人见人哀

# 输出格式
原始文本行(错字→对字)

# 输出示例
熊猫眼,黑白分名(名→明)
...

# 输出结果
->

输出结果:

熊猫打滚,可爱又玩皮(玩→顽)
熊猫血,珍贵无敝(敝→比)
熊猫国宝,人见人哀(哀→爱)

可以看到,大语言模型仅仅通过这一个示例学就会了任务处理模式并输出了正确的结果。

当然,有时候仅通过一个示例可能还不够,需要持续地给大语言模型提供更多的示例才能达到更好的效果。在接下来的这个例子中。我们想让大语言模型根据一个动物的名称,输出它的表情符号、喜欢的食物的表情符号,以及居住区域的旗帜符号,提示如下:

# 任务描述
我会给你一个动物名称,请按照如下格式输出。

# 示例
输入->熊猫
输出->熊猫 🐼 🎋 🇨🇳

# 输入
袋鼠
# 输出

输出结果:

袋鼠 🦘

可以看到,大语言模型只输出了袋鼠的表情符号。我们尝试给大语言模型增加更多的示例,如下:

# 任务描述
我会给你一个动物名称,请按照如下格式输出:

# 示例
## 示例1
输入->熊猫
输出->熊猫 🐼 🎋 🇨🇳

## 示例2
输入->考拉
输出->考拉 🐨 🌿 🇦🇺

# 输入
袋鼠
# 输出

输出结果:

袋鼠 🦘 🌿 🇦🇺

可以看到,这次完全地达到了预期的效果输出。

小样本提示是一种非常强大的技术,它可以让大语言模型从少量的示例中学习处理任务的模式,而不需要大量的计算资源和标注数据。从而有效地提高大语言模型输出效果。

通过以上这些示例,我们不难发现少样本提示在大语言模型应用中展现出的强大力量,它以巧妙的方式,用少量示例就能引导模型准确完成任务。如果你想要更系统地学习提示工程相关知识,深入挖掘大语言模型的更多潜力,推荐你阅读《AI 原生应用开发:提示工程原理与实战》,这本书为你精心搭建起从理论到实践的桥梁,让你全面掌握提示工程的核心要点,开启提示工程的深度探索之旅吧。

京东图书:

是土豪、全价下单:https://item.jd.com/14373635.html 豪横就是任性!
早鸟价,半价下单:https://item.jd.com/14976580.html薅到就是赚到啦!
在这里插入图片描述

### Few-Shot 学习与 CLIP 模型的应用及实现 Few-shot 学习是一种机器学习范式,旨在利用少量样本完成特定任务的学习目标。CLIP(Contrastive Language–Image Pre-training)作为一种强大的多模态预训练模型,在 few-shot 场景下表现出显著的优势[^1]。 #### LAMM 方法概述 为了进一步提升 CLIP 的 zero-shotfew-shot 性能,研究者提出了 LAMM(Learnable Adaptive Multimodal Matching)。该方法的核心在于通过端到端的方式优化标签嵌入,从而缩小图像特征与其对应类别表示之间的差距。具体而言,LAMM 将 prompt 中的固定文本模板替换为可学习的标记 \(< M_i >\) (\(i=1, 2, ..., k\),这些标记代表不同类别的语义信息。在训练阶段,仅需更新每个下游数据集中对应的类别向量集合 \(\{< M_i >\}_{i=1}^{k}\),而不改变 CLIP 预训练权重。 这种设计不仅保留了 CLIP 原有的跨模态理解能力,还增强了其针对特定领域或任务的适应性。例如,在 CoOp(Context Optimization Prompting)框架基础上引入 LAMM 后,可以通过用可训练向量替代原始类别描述来改进提示模板结构。 以下是基于 PyTorch 实现的一个简化版代码片段展示如何结合 LAMM 进行 fine-tuning: ```python import torch from clip import load as load_clip device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = load_clip("ViT-B/32", device=device) class LearnablePrompt(torch.nn.Module): def __init__(self, num_classes, embedding_dim=512): super().__init__() self.learned_prompts = torch.nn.ParameterList([ torch.nn.Parameter(torch.randn(1, embedding_dim)) for _ in range(num_classes)]) def forward(self, class_indices=None): if class_indices is None: return torch.cat([p for p in self.learned_prompts]) else: return torch.stack([self.learned_prompts[i][0] for i in class_indices]) def compute_similarity(image_features, text_features): image_features /= image_features.norm(dim=-1, keepdim=True) text_features /= text_features.norm(dim=-1, keepdim=True) logit_scale = model.logit_scale.exp() logits_per_image = logit_scale * image_features @ text_features.t() return logits_per_image # Example usage of the learnable prompts module. num_classes = 10 learnable_prompt_module = LearnablePrompt(num_classes).to(device) optimizer = torch.optim.AdamW(learnable_prompt_module.parameters(), lr=1e-3) for epoch in range(epochs): optimizer.zero_grad() images = ... # Load batch of images labels = ... # Corresponding labels processed_images = [preprocess(img) for img in images] tensor_stack = torch.stack(processed_images).to(device) with torch.no_grad(): image_features = model.encode_image(tensor_stack) learned_text_embeddings = learnable_prompt_module(labels) similarity_scores = compute_similarity(image_features, learned_text_embeddings) loss_fn = torch.nn.CrossEntropyLoss() loss = loss_fn(similarity_scores, labels.to(device)) loss.backward() optimizer.step() ``` 上述代码展示了如何定义并训练一个简单的可学习提示模块 `LearnablePrompt` 来适配不同的分类任务需求。值得注意的是,实际部署时可能还需要考虑更多细节调整以及更复杂的网络架构设计以满足更高精度的要求。 #### 结论 综上所述,借助像 LAMM 这样的技术手段能够极大地提高 CLIP 在 small-data regimes 下的表现效果。通过对类别嵌入表征进行微调操作而非重新训练整个神经网络参数组,则既节省资源又保持住了原有泛化特性的同时实现了定制化的功能扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

alphaAIstack

借AI之力,探索无限可能。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值