提示词工程教程(七):小样本和上下文学习

概述

本教程使用 OpenAI 的 GPT 模型和 LangChain 库探索小样本学习和上下文学习的前沿技术。这些方法使 AI 模型能够使用最少的示例执行复杂的任务,从而彻底改变了我们处理机器学习问题的方式。

主题

传统机器学习通常需要大量数据集进行训练,这非常耗时且耗费资源。小样本学习和上下文学习利用大型语言模型的强大功能,仅用少量示例即可执行任务,从而解决了这一限制。这种方法在标记数据稀缺或获取成本高昂的情况下尤其有用。

内容概要

  1. OpenAI 的 GPT 模型:最先进的语言模型,作为我们学习技术的基础。
  2. LangChain 库:一个强大的工具,可简化处理大型语言模型的过程。
  3. PromptTemplate:一种格式化语言模型输入的结构化方法。
  4. LLMChain:管理提示和语言模型之间的交互。

实施方案

1. 基础小样本学习

+ 使用少量学习来实现情绪分类任务。 + 演示如何构建提示并提供示例供模型学习。 + 解释模型如何从这些示例推广到新的输入。

2. 高级小样本技术

+ 探索情感分析和语言检测的多任务学习。 + 讨论如何设计提示以使单个模型能够执行多个相关任务。 + 深入了解这种方法的好处,例如提高效率和更好的泛化。

3. 情境学习

+ 自定义任务(例如文本转换)的上下文学习演示。 + 仅根据提示中提供的示例来解释模型如何适应新任务。 + 讨论该方法的灵活性和局限性。

4. 最佳实践与评估

+ 为小样本学习选择有效示例的指南。 + 用于优化模型性能的快速工程技术。 + 实施评估框架来评估模型准确性。 + 讨论多样化测试用例和适当指标的重要性。

结论

少量学习和上下文学习代表了人工智能领域的重大进步。通过使模型能够使用最少的示例执行复杂任务,这些技术为数据有限的领域的人工智能应用开辟了新的可能性。本教程为理解和实施这些强大的方法提供了坚实的基础,为学习者提供了在自己的项目中有效利用大型语言模型的工具。

随着该领域的不断发展,掌握这些技术对于希望保持自然语言处理和机器学习前沿的人工智能从业者来说至关重要。

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChainload_dotenv()
os.environ["OPENAI_API_KEY"] = os.getenv('OPENAI_API_KEY') # OpenAI API keyllm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
print("Setup complete.")

设置完成

基础小样本学习

我们将实现一个用于情绪分类的基本小样本学习场景。

情绪分类:

  • 定义:确定一系列词语背后的情感基调。
  • 应用:客户服务、市场研究、社交媒体分析。

少量学习方法:

  1. 提供一小组标记示例(在本例中为 3 个)。
  2. 构建提示以清晰地呈现示例和新输入。
  3. 利用语言模型的预先训练的知识。

关键组件:

  • PromptTemplate:构建模型的输入。
  • LLMChain:管理提示和语言模型之间的交互。
def few_shot_sentiment_classification(input_text):few_shot_prompt = PromptTemplate(input_variables=["input_text"],template="""将情绪分类为积极,消极或中性。示例:文本:我喜欢这个产品!太棒了。情绪:积极文本:这部电影很糟糕。我讨厌它。情绪:消极文本:今天的天气还可以。情绪:中性, 分类以下:文本: {input_text}情绪:""")chain = few_shot_prompt | llmresult = chain.invoke(input_text).content# Clean up the resultresult = result.strip()# Extract only the sentiment labelif ':' in result:result = result.split(':')[1].strip()return result  # 将仅返回“积极”、“消极”或“中性”test_text = "我真不敢相信这家新餐厅有多棒!"result = few_shot_sentiment_classification(test_text)print(f"输入: {test_text}")print(f"预测情绪: {result}")
输入:我简直不敢相信这家新餐厅有多棒!
预测情绪:积极

高级小样本技术

我们现在将探索情感分析和语言检测的多任务学习。

多任务学习:

  • 定义:训练模型同时执行多个相关任务。
  • 好处:提高效率,泛化能力更强,减少过度拟合。

执行:

  1. 设计一个包含多个任务示例的提示模板。
  2. 使用特定于任务的指令来指导模型的行为。
  3. 演示同一模型如何根据输入在任务之间切换。
def multi_task_few_shot(input_text, task):few_shot_prompt = PromptTemplate(input_variables=["input_text", "task"],template="""对给定的文本执行指定的任务。示例:文本:我喜欢这个产品!它太棒了。任务: 情绪结果: 积极文本:Bonjour, comment allez-vous?任务: 语言结果: 法语现在,执行以下任务:文本: {input_text}任务: {task}结果:""")chain = few_shot_prompt | llmreturn chain.invoke({"input_text": input_text, "task": task}).contentprint(multi_task_few_shot("我真不敢相信这有多棒!", "情绪"))
print(multi_task_few_shot("Guten Tag, wie geht es Ihnen?", "语言"))
积极的
结果:德语

情境学习

上下文学习允许模型根据提示中提供的示例适应新任务。

关键方面:

  1. 无需微调:模型从提示中的示例中学习。
  2. 灵活性:可应用于多种任务。
  3. 提示工程:精心设计提示对于性能至关重要。

示例实现:我们将演示自定义任务(将文本转换为猪拉丁语)的上下文学习。

def in_context_learning(task_description, examples, input_text):example_text = "".join([f"输入: {e['input']}\n输出: {e['output']}\n\n" for e in examples])in_context_prompt = PromptTemplate(input_variables=["task_description", "examples", "input_text"],template="""任务: {task_description}示例:{examples}现在,对以下输入执行任务:输入: {input_text}输出:""")chain = in_context_prompt | llmreturn chain.invoke({"task_description": task_description, "examples": example_text, "input_text": input_text}).contenttask_desc = "将给定的文本转换为猪拉丁语。"
examples = [{"input": "hello", "output": "ellohay"},{"input": "apple", "output": "appleay"}
]
test_input = "python"result = in_context_learning(task_desc, examples, test_input)
print(f"输入: {test_input}")
print(f"输出: {result}")
入:python
输出:输出:ythonpay

最佳实践与评估

为了最大限度地提高小样本学习和情境学习的有效性:
  1. 选择示例:
    • 多样性:涵盖任务的不同方面。
    • 清晰度:使用明确的例子。
    • 相关性:选择与预期输入相似的例子。
    • 平衡:确保类别/种类的代表性均等。
    • 边缘情况:包括不寻常或困难的情况的例子。
  2. 快捷工程:
    • 明确的指示:明确指定任务。
    • 一致的格式:保持示例和输入的统一结构。
    • 简洁性:避免不必要的信息导致模型混淆。
  3. 评估:
    • 创建多样化的测试集。
    • 将模型预测与真实标签进行比较。
    • 根据任务使用适当的指标(例如准确度、F1 分数)。
def evaluate_model(model_func, test_cases):'''Evaluate the model on a set of test cases.Args:model_func: The function that makes predictions.test_cases: A list of dictionaries, where each dictionary contains an "input" text and a "label" for the input.Returns:The accuracy of the model on the test cases. '''correct = 0total = len(test_cases)for case in test_cases:input_text = case['input']true_label = case['label']prediction = model_func(input_text).strip()is_correct = prediction.lower() == true_label.lower()correct += int(is_correct)print(f"Input: {input_text}")print(f"Predicted: {prediction}")print(f"Actual: {true_label}")print(f"Correct: {is_correct}\n")accuracy = correct / totalreturn accuracytest_cases = [{"input": "This product exceeded my expectations!", "label": "Positive"},{"input": "I'm utterly disappointed with the service.", "label": "Negative"},{"input": "The temperature today is 72 degrees.", "label": "Neutral"}]accuracy = evaluate_model(few_shot_sentiment_classification, test_cases)print(f"Model Accuracy: {accuracy:.2f}")
输入:该产品超出了我的预期!
预测:正面
实际:正数
正确:正确输入:我对这项服务非常失望。
预测:负面
实际:负面
正确:正确输入:今天的温度是 72 度。
预测:中性
实际情况:中性
正确:正确模型准确率:1.00

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Excel表格在线发布期末考试成绩单

每到期末,发布学生的期末考试成绩单便是老师们的一项重要任务。以往,传统的纸质成绩单分发效率低还易出错,而借助 Excel 表格在线发布,则开启了全新高效模式。 老师们先是精心整理各科成绩,录入精准无误的分数到 Excel…

WPF 绘制过顶点的圆滑曲线(样条,贝塞尔)

项目中要用到样条曲线,必须过顶点,圆滑后还不能太走样,捣鼓一番,发现里面颇有玄机,于是把我多方抄来改造的方法发出来,方便新手: 如上图,看代码吧: -------------------…

python监控数据处理应用服务Socket心跳解决方案

1. 概述 从网页、手机App上抓取数据应用服务,涉及到多个系统集成协同工作,依赖工具较多。例如,使用Frida进行代码注入和动态分析,以实现对网络通信的监控和数据捕获。在这样的集成环境中,手机模拟器、手机中应用、消息…

商品线上个性定制,并实时预览3D定制效果,是如何实现的?

商品线上3D个性化定制的实现涉及多个环节和技术,以下是详细的解释: 一、实现流程 产品3D建模: 是实现3D可视化定制的前提,需要对产品进行三维建模。可通过三维扫描仪或建模师进行建模,将产品的外观、结构、材质等细…

Python PyMupdf 去除PDF文档中Watermark标识水印

通过PDF阅读或编辑工具,可在PDF中加入Watermark标识的PDF水印,如下图: 该类水印特点 这类型的水印,会在文件的字节流中出现/Watermark、EMC等标识,那么,我们可以通过改变文件字节内容,清理掉…

旧衣回收小程序开发,绿色生活,便捷回收

随着绿色生活、资源回收利用理念的影响,人们逐渐开始关注旧衣回收,选择将断舍离等闲置衣物进行回收,在资源回收的同时也能够减少资金浪费。目前,旧衣回收的方式也迎来了数字化发展,相比传统的回收方式更加便捷&#xf…

Bluetooth Spec【0】蓝牙核心架构

蓝牙核心系统由一个主机、一个主控制器和零个或多个辅助控制器组成蓝牙BR/ EDR核心系统的最小实现包括了由蓝牙规范定义的四个最低层和相关协议,以及一个公共服务层协议;服务发现协议(SDP)和总体配置文件要求在通用访问配置文件&a…

vulnhub靶场-matrix-breakout-2-morpheus攻略(截止至获取shell)

扫描出ip为192.168.121.161 访问该ip,发现只是一个静态页面什么也没有 使用dir dirsearch 御剑都只能扫描到/robots.txt /server-status 两个页面,前者提示我们什么也没有,后面两个没有权限访问 扫描端口,存在81端口 访问&#x…

Java - 日志体系_Apache Commons Logging(JCL)日志接口库

文章目录 官网1. 什么是JCL?2. JCL的主要特点3. JCL的核心组件4. JCL的实现机制5. SimpleLog 简介6. CodeExample 1 : 默认日志实现 (JCL 1.3.2版本)Example 2 : JCL (1.2版本) Log4J 【安全风险高,请勿使用】 7. 使用…

C++-----------映射

探索 C 中的映射与查找表 在 C 编程中,映射(Map)和查找表(Lookup Table)是非常重要的数据结构,它们能够高效地存储和检索数据,帮助我们解决各种实际问题。今天,我们就来深入探讨一下…

免费 IP 归属地接口

免费GEOIP,查询IP信息,支持IPV4 IPV6 ,包含国家地理位置,维度,asm,邮编 等,例如 例如查询1.1.1.1 http://geoip.91hu.top/?ip1.1.1.1 返回json 对象

Linux应用软件编程-多任务处理(进程)

多任务:让系统具备同时处理多个事件的能力。让系统具备并发性能。方法:进程和线程。这里先讲进程。 进程(process):正在执行的程序,执行过程中需要消耗内存和CPU。 进程的创建:操作系统在进程创…

认识计算机网络

单单看这一个词语,有熟悉又陌生,让我们来重新认识一下这位大角色——计算机网络。 一、是什么 以及 怎么来的 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路和通信设备连接起来,在网络操作…

3. Kafka入门—安装与基本命令

Kafka基础操作 一. 章节简介二. kafka简介三. Kafka安装1. 准备工作2. Zookeeper安装2.1 配置文件2.2 启动相关命令3. Kafka安装3.1 配置文件3.2 启动相关命令-------------------------------------------------------------------------------------------------------------…

【Redis】 数据淘汰策略

面试官询问缓存过多而内存有限时内存被占满的处理办法,引出 Redis 数据淘汰策略。 数据淘汰策略与数据过期策略不同, 过期策略针对设置过期时间的 key 删除, 淘汰策略是在内存不够时按规则删除内存数据。 八种数据淘汰策略介绍 no evision&…

meshy的文本到3d的使用

Meshy官方网站: 中文官网: Meshy官网中文站 ​编辑 Opens in a new window ​编辑www.meshycn.com Meshy AI 中文官网首页 英文官网: Meshy目前似乎还没有单独的英文官网,但您可以在中文官网上找到英文界面或相关英文资料。 链…

计算机网络压缩版

计算机网络到现在零零散散也算过了三遍,一些协议大概了解,但总是模模糊糊的印象,现在把自己的整体认识总结一下,(本来想去起名叫《看这一篇就够了》,但是发现网上好的文章太多了,还是看这篇吧&a…

C++-----线性结构

C线性结构模板 概念:线性结构是一种数据元素之间存在一对一线性关系的数据结构,如数组、链表、栈、队列等。C中的模板可以让我们编写通用的代码,适用于不同的数据类型,而不必为每种数据类型都重复编写相同的代码结构。作用&#…

探究音频丢字位置和丢字时间对pesq分数的影响

丢字的本质 丢字的本质是在一段音频中一小段数据变为0 丢字对主观感受的影响 1. 丢字位置 丢字的位置对感知效果有很大影响。如果丢字发生在音频信号的静音部分或低能量部分,感知可能不明显;而如果丢字发生在高能量部分或关键音素上,感知…

支持向量机入门指南:从原理到实践

目录 1 支持向量机的基本概念 1.2 数学表达 2 间隔与支持向量 2.1 几何间隔 2.2 支持向量的概念 2.3 规范化超平面 2.4 支持向量的深入分析 2.4.1 支持向量的特征 2.4.2 支持向量的作用 2.4.3 支持向量的代数表示 2.5 KKT条件 3 最优化问题 3.1 问题的形成 3.2 规…