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

概述

本教程使用 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可视化定制的前提,需要对产品进行三维建模。可通过三维扫描仪或建模师进行建模,将产品的外观、结构、材质等细…

开源 SOAP over UDP

简介 看到有人想要实现两个 EXE 之间的互动。这可以采用 RPC 的方式嘛。 Delphi 现成的 RPC 框架,比如 WebService,比如 DataSnap; 当然,github 上面还有第三方开源的 XMLRPC 等等。 为啥要搞一个 UDP Delphi 的 WebService …

【Laravel】接口的访问频率限制器

Laravel 接口的访问频率,你可以在 Laravel 中使用速率限制器(Rate Limiter)。以下是一个详细的步骤,展示如何为这个特定的 API 路由设置速率限制: 1. 配置 RouteServiceProvider 首先,确保在 App\Provide…

Vue.use()和Vue.component()

当很多页面用到同一个组件,又不想每次都在局部注册时,可以在main.js 中全局注册 Vue.component()一次只能注册一个组件 import CcInput from /components/cc-input.vue Vue.component(CcInput);Vue.use()一次可以注册多个组件 对于自定义的组件&#…

地理数据库Telepg面试内容整理-请描述空间索引的基本概念,如何使用它提高查询性能

空间索引的基本概念 空间索引是专门用于加速空间数据(如地理位置、几何对象等)查询的一种数据结构。空间数据本质上是多维的,包含了坐标、形状、区域等信息,这使得传统的单维索引(如 B+ 树)并不适用。空间索引通过将空间数据映射到特定的索引结构中,使得在进行空间查询时…

Rust : tokio中select!

关于tokio的select宏,有不少的用途。包括超时和竞态选择等。 关于select宏需要关注,相关的异步条件,会同时执行,只是当有一个最早完成时,会执行“抛弃”和“对应”策略。 说明:对本文以下素材的来源表示感…

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

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

python EEGPT报错:Cannot cast ufunc ‘clip‘ output from dtype(‘float64‘)

今天在运行EEGPT的时候遇见了下面的问题,首先是nme报错,然后引起了numpy的报错: numpy.core._exceptions._UFuncOutputCastingError: Cannot cast ufunc clip output from dtype(float64)在网上找了好久的教程,但是没有找到。猜测…

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

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

[论文笔记] 从生成到评估:LLM-as-a-judge 的机遇与挑战

https://arxiv.org/pdf/2411.16594 1. LLM-as-a-judge 的引入 传统的评估方法(如 BLEU 和 ROUGE)在处理生成内容的有用性、无害性等细腻属性时表现不足。随着大语言模型(LLM)的发展,提出了 “LLM-as-a-judge”(LLM 作为评估者)的新范式,用于对任务进行评分、排序或选择…

Bluetooth Spec【0】蓝牙核心架构

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

【C 基础】C语言代码编译过程

从一个源文件(.c)到可执行程序到底经历了哪几步&#xff0c;我想大多数的人都知道&#xff0c;到时到底每一步都做了什么&#xff0c;我估计也没多少人能够说得清清楚楚&#xff0c;明明白白。 其实总的流程是这样的。 【第一步】编辑hello.c 1 #include <stdio.h> 2 …

数据处理之数据规约

数据处理之数据规约 1. 数据规约概述 数据规约是数据处理中的重要方法&#xff0c;旨在让数据处理更简便、高效&#xff0c;以满足业务需求。当从数据仓库获取的数据量庞大时&#xff0c;直接在海量数据上进行分析和挖掘成本颇高。数据规约可得到数据集的归约表示&#xff0c…

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

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

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

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

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

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

免费 IP 归属地接口

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