小周带你正确理解Prompt-engineering,RAG,fine-tuning工程化的地位和意义

有人会说:"小周,几天不见这么拉了,现在别说算法了,连code都不讲了,整上方法论了。" 

      我并没有拉!而且方法论很重要,尤其工程化的时候,你总得知道每种技术到底适合干啥,其实主要是现实中,我在项目里发现大家对这块其实并不是分的很清楚。

      所以我来给大家捋一捋,因为这毕竟直接取决于你设计的解决方案是否能真正解决问题

图片

       如上图所示,OpenAI把对于优化LLM返回结果分为两个方向,一个方向是横坐标系的对LLM 模型本身的优化,另一个是对你提供的Context的优化

  •       在对LLM本身的优化上没啥可弄的,最后就只能走到Fine-tuning这一条路

  •      在对本身的Context进行优化的方式,我们一般起手式是先prompt-engineering

  •     prompt-engineering不好使了,我们会借助RAG来实现额外的能力和知识

      我们先来把几个概念再捋一下

prompt-engineering

图片

      上图就是一个不清晰的prompt的典型,没有清晰的system message定义,得到的回应也是特别的随机,并且没有清晰的format

图片

      优化上面的prompt,从几个维度入手:

  • 首先肯定是要指令变得更清晰

  • 其次用COT的方式提问让它拆解复杂的任务

  • 顺便告诉LLM你要什么样输出的回答格式

图片

      再进阶就要上few_shot了,告诉LLM,你想要的答案是长啥样的,甚至风格

      我上面说的看起来好像都很日常,但是你真的了解prompt-engineering吗?

      Prompt-engineering的一个最重要的隐藏功能就是超级测试工具,当你的项目涉及到非常复杂的推理场景,尤其是多步推理能力的时候,COT就是你最好的测试工具

      Tips: 在我们给project挑选模型底座的时候,除了去看一些所谓的测试结果以外,很大一部分工作时要做COT+fewshot的测试例,尤其是COT,比如写50到100个COT的问题,观察list里的LLMs,究竟谁的回答更靠谱,更有逻辑,尤其是复杂推理场景,相信我,这一步都过不去的LLM,你就没有必要再考虑后面的RAG和FT了(这篇文章看到这,其实读者就你大赚特赚了,省了你多少精力!)

      继续说,prompt-engineer它调用毕竟还是基座模型的能力,你要想让模型输出一些训练数据中没有的知识,甚至都不在互联网上可查询的知识,或者这个模型的所有说话方式都不适合你的应用场景,那你怎么办?

      一般这个时候大家都会说我们可以fine-tuning也可以RAG,这两个方法都能解决这些问题,如果你也是相同的想法,坦白说看这篇文章你又赚到了,这俩不但不是同一个东西,解决的问题也不一样

图片

      诚然,我们在很多时候都会认为像上图一样,RAG也好,FT也好都能让LLM产生新的记忆,我们可以把RAG认为是短期记忆,FT产生的是长期记忆,某种程度看起来没错。

      这里需要纠正的是FT产生的,我们不能认为它是长期记忆,微调无法让LLM学习知识,而是学习了行为模式,或者叫学习了结构,这块如果要讲理论,比较复杂,拆开讲要讲3篇, 后面看看有时间可以开个新坑,大家目前简单理解这几句话即可

       我们来逐一解决上文提到的问题,无非是两个:

  • 新知识

  • 表达方式

     

       RAG

       新知识你就用RAG来做就可以了(当然也可以拿agent来做,我这里不讲agent)

        评估一个RAG系统的好坏,我们一般分为4大维度

  • 第一个 真实性

  • 第二个 精确性

  • 第三个 回答的关联性

  • 第四个 召回率

图片

      有读者说,你这几个指标看着都还行,像那么回事,那我们怎么来做量化呢?下面链接,拿走不谢

图片

explodinggradients/ragas: Evaluation framework for your Retrieval Augmented Generation (RAG) pipelines (github.com)

图片

       通过regas这个项目调用openai就能自动为你的RAG系统这几个参数来打分,根据分数高低来调整你的RAG系统

       另外可能有读者说以前做过RAG,不就是拿向量数据库来做匹配吗!但是这个其实已经很落伍了,比较先进的架构是同时拿多个RAG方式来提取多个RAG答案,一起汇总,然后经过re-ranking系统来排出top_k, 最后跟着prompt一起给到LLM

      可选的RAG方式除了向量库做余弦匹配以外,也流行直接拿text-to-sql,或者直接拿标量搜索去取企业里的准确数据

      你加的越多,就越准确,但是你整体LLM流程就越慢

图片

图片

,需要balance

      另外在向量库的选择和document切分这块能玩的花活儿也很多,某种程度上决定了你RAG系统的上限(留个坑,以后讲)

图片

图片

如上图所示,RAG答案丰富度,对模型的test 效果有一定的正相关关系

图片

      RAG上加的feature越多,也和你RAG系统的准确度成正相关

      Fine-tuning

      下图把Fine-tuning能干啥,不擅长干啥写的已经很清楚了,所以读者们今后别再假设通过FT能给你模型增加新知识了,这条路是走不通的(当然可能也有人是把追加预训练和FT给搞混了,这俩可不是一个东西)

图片

      相反

  • 如果你要强化你预训练里面的知识的能力,比如专门针对代码的FT

  • 如果你要做情感陪伴的时候,想让模型以某种不好描述的态度对你说话的时候

  • 如果你想让你模型能读懂特别复杂的指令,你又不想写很复杂的prompt的时候

    那么选Fine-tuning,没错的

      下面这两幅图很好的举例了FT前后的output对比

图片

     

图片

     从某种意义上说,对特定任务的Fine-tuning会给小参数模型以超过大参数模型的能力,如下图所举的例子

     Canva(做设计的公司)通过对GPT-3.5进行 FT,能得到超过GPT-4的能力

    

图片

      prompt-engineering,RAG,fine-tuning,这几个东西各自有各自的用途和场景,也能混用,但是不能平行着用,读完了我这篇文章,相信读者们应该很好的理解了他们的各司其职,最好的方法肯定还是混着用

      比如Scale AI他们就给出过几种能力叠加以后的准确率相关性

图片

本文完

图片

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

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

相关文章

政安晨:演绎在KerasCV中使用Stable Diffusion进行高性能图像生成

小伙伴们好,咱们今天演绎一个使用KerasCV的StableDiffusion模型生成新的图像的示例。 考虑计算机性能的因素,这次咱们在Colab上进行,Colab您可以理解为在线版的Jupyter Notebook,还不熟悉Jupyter的的小伙伴可以去看一下我以前的文…

Linux中FIFO管道

介绍: FIFO被称为命名管道,pipe只能用于有血缘关系的进程间通信,但通过FIFO,不相关的进程也可以进程间通信。 FIFO是linux基础文件类型的一种(文件类型为p),FIFO文件在磁盘上没有数据块&#…

3秒实现无痛基于Stable Diffusion WebUI安装ComfyUI!无需重复安装环境!无需重复下载模型!安装教程

标题略有夸张哈哈哈哈,但想表达的是,相较于直接下载或者通过秋叶包更新而,接下来这一套方案确实很简单,而且能够 大大节省磁盘空间,和下载时间。 这篇教程不需要你有: 代码基础。都是复制粘贴就完事。魔法…

windows 下安装gin

go install 执行命令,执行不了的参考一下 https://blog.csdn.net/weixin_42592326/article/details/135946806 Golang 中没法下载第三方包解决办法-CSDN博客 go install github.com/gin-gonic/ginlatest 还是安装不了的话,用手机开热点,电…

肿瘤浸润性巨噬细胞的复杂作用(综述浏览)

The complex role of tumor-infiltrating macrophages - PubMed (nih.gov) 长期以来,人们一直认为巨噬细胞是一种进化古老的细胞类型,参与组织稳态和对病原体的免疫防御,但现在人们又发现巨噬细胞是包括癌症在内的多种疾病的调节因子。肿瘤相…

Apache 神禹(shenyu)源码阅读(一)——Admin向Gateway的数据同步(Admin端)

源码版本:2.6.1 单机源码启动项目 启动教程:社区新人开发者启动及开发防踩坑指南 源码阅读 前言 开了个新坑,也是第一次阅读大型项目源码,写文章记录。 在写文章前,已经跑了 Divide 插件体验了一下(体…

【十五】【C++】list的简单实现

list 的迭代器解引用探究 /*list的迭代器解引用探究*/ #if 1 #include <list> #include <vector> #include <iostream> #include <algorithm> using namespace std;class Date {private:int _year;int _month;int _day;public:Date(): _year(2024), _m…

Stable Diffusion 模型下载:majicMIX reverie 麦橘梦幻

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

模型 AISAS(注意、兴趣、搜索、行动、分享)

系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。消费者行为模型。 1 模型AISAS(注意、兴趣、搜索、行动、分享)的应用 1.1 AISAS用于社交媒体营销 假设我们有一家健身中心&#xff0c;想要通过社交媒体营销来吸引新客户。 A&#xff08;A…

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树

1、设备树文件的路径 1)、创建linux中的设备树头文件 在“my_linux/linux-5.4.31/arch/arm/boot/dts/”目录中&#xff0c;以“stm32mp15xx-edx.dtsi”为蓝本&#xff0c;复制一份&#xff0c;并命名为 “stm32mp157d-atk.dtsi”&#xff0c;这就是我们开发板的设备树头文件。…

精品springboot疫苗发布和接种预约系统

《[含文档PPT源码等]精品基于springboot疫苗发布和接种预约系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; Java——涉及技术&#xff1a; 前端使用技术&#xff1a;…

微信小程序(四十二)wechat-http拦截器

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.wechat-http请求的封装 2.wechat-http请求的拦截器的用法演示 源码&#xff1a; utils/http.js import http from "wechat-http"//设置全局默认请求地址 http.baseURL "https://live-api.ith…