首页 > 其他分享 >大语言模型优化方法简介:Prompt、RAG、Fine-tuning

大语言模型优化方法简介:Prompt、RAG、Fine-tuning

时间:2024-01-05 16:45:12浏览次数:36  
标签:检索 RAG Prompt 模型 微调 生成器 生成 Fine

GPT、LLama、Gemini等大语言模型虽展现出强大能力,但在实际应用中仍有问题,例如在准确性、知识更新速度和答案透明度方面,仍存在挑战。

论文“Retrieval-Augmented Generation for Large Language Models: A Survey(面向大语言模型的检索增强生成技术:调查)
https://arxiv.org/abs/2312.10997 对解决这些问题的模型优化方法做了分类,如下图:

图:模型优化方法的比较,两个坐标轴分别是:对外部知识的需求和模型的适配复杂度。

附:这篇论文的中文翻译推荐看宝玉翻译的版本:
https://baoyu.io/translations/ai-paper/2312.10997-retrieval-augmented-generation-for-large-language-models-a-survey

一、Prompt Engineering 提示词工程

提示词工程可以分三个层次:

  • 标准提示词
  • Few-shot 少量示例提示词,通过提供少量的示例来让模型回答的更精准。
  • XoT 提示词,例如 CoT(思维链),ToT(思维树),参看 使用思维链写Prompt

下面是一个 Few-shot prompt的示例:

A "whatpu" is a small, furry animal native to Tanzania. An example of a sentence that uses
the word whatpu is:
“whatpu”是坦桑尼亚的一种小型毛茸茸的动物。一个使用whatpu这个词的句子的例子是:

We were traveling in Africa and we saw these very cute whatpus.
我们在非洲旅行时看到了这些非常可爱的whatpus。

To do a "farduddle" means to jump up and down really fast. An example of a sentence that uses the word farduddle is:
“farduddle”是指快速跳上跳下。一个使用farduddle这个词的句子的例子是:

输出:

When we won the game, we all started to farduddle in celebration.
当我们赢得比赛时,我们都开始庆祝跳跃。

二、RAG 检索增强生成

检索增强生成(Retrieval-Augmented Generation, RAG) 特指一种模式:模型在回答问题或生成文本时,首先从广阔的文档库中寻找相关信息。然后,模型使用这些找到的信息来生成回答或文本,从而提高其预测的准确度。

论文中把RAG分成三种范式:

  • Naive RAG 朴素RAG, 添加相关上下文
  • Advanced RAG 高级RAG,在索引/检索前/检索后做优化
  • Modular RAG 模块化RAG,有机组合多种模块

下图是三种RAG范式的比较

2.1、Naive RAG 朴素RAG

Naive RAG 的流程如下:将文本分割成小块,然后使用某种 Transformer Encoder 模型将这些小块转换为向量,把这些向量汇总到一个索引中,最后创建一个针对大语言模型的提示,指导模型根据我们在搜索步骤中找到的上下文回答用户的查询。

下面是一个RAG例子,中文的prompt在注释里:

def question_answering(context, query):
    # 请回答后面用三个反引号 ```{query}``` 包围的问题,
    # 回答时参考用三个反引号 ```{context}``` 包围的参考信息。
    # 如果提供的上下文中没有相关信息,尝试自己回答,但要告诉用户你没有相关的上下文作为回答的依据。
    # 回答要简洁,输出的答案少于80个token。
    prompt = f"""
Give the answer to the user query delimited by triple backticks ```{query}```\
using the information given in context delimited by triple backticks ```{context}```.\
If there is no relevant information in the provided context, try to answer yourself,
but tell user that you did not have any relevant context to base your answer on.
Be concise and output the answer of size less than 80 tokens.
"""

    response = get_completion(instruction, prompt, model="gpt-3.5-turbo")
    answer = response.choices[0].message["content"]
    return answer

这种原始RAG在三个方面面临挑战:检索质量、回应生成质量和增强过程。

挑战1:检索质量

该方面的问题多方面。最主要的问题是低精度,即检索集中的文档块并不都与查询内容相关,这可能导致信息错误或不连贯。

其次是低召回率问题,即未能检索到所有相关的文档块,使得大语言模型无法获取足够的背景信息来合成答案。

此外,过时信息也是一个挑战,因为数据冗余或过时可能导致检索结果不准确。

挑战2:回应生成质量:

这方面的问题同样多样。最突出的问题是制造错误信息,即模型在缺乏足够上下文的情况下虚构答案

另一个问题是回答不相关,即模型生成的答案未能针对查询问题。

进一步来说,生成有害或偏见性回应也是一个问题。

挑战3:增强过程:

最终,增强过程面临几个重要挑战。特别重要的是,如何将检索到的文段的上下文有效融入当前的生成任务。如果处理不得当,生成的内容可能显得杂乱无章。当多个检索到的文段包含相似信息时,冗余和重复成为问题,这可能导致生成内容的重复。

此外,如何判断多个检索到的文段对生成任务的重要性或相关性非常有挑战性,增强过程需要恰当地评估每个文段的价值。检索到的内容可能具有不同的写作风格或语调,增强过程需调和这些差异,以确保最终输出的一致性。

最后,生成模型可能会过度依赖于增强信息,导致生成的内容仅是重复检索到的信息,而缺乏新的价值或综合信息

2.2、Advanced RAG 高级RAG

为了克服 Naive RAG 的局限性,高级 RAG 进行了针对性的改进。


比起 Naive RAG,增加了下面优化:

  • “Pre-Retrieval”(检索前)优化,例如:细粒度数据清洗、添加文件结构以及查询重写/澄清等。
  • “Post-Retrieval”(检索后)优化,从向量数据库检索后的优化,例如:重排序、过滤和提示压缩等。

2.3、Modular RAG 模块化RAG

这是一个更复杂的系统,具有处理查询和文档的新模块和模式。

2.3.1、Modules 新模块

  • 图中外层包括“Search 搜索”、“Predict 预测”、“Memory 记忆”、“Criticize 评估”、“Demonstrate 验证”、“Fusion 对齐” 这六个模块。
  • 内层是包括“Retrieve 检索”、“Rerank 重排序”、“Rewrite 重写”和“Read 阅读”过程的RAG(检索增强生成)模块。

2.3.2、Patterns 新模式

涉及多种信息处理流程,这些显示了系统处理信息并响应用户查询的不同路径。

  • Navie RAG : Retrieve 检索 → Read 阅读
  • Advanced RAG : Rewrite 重写 → Retrieve 检索 → Rerank 重排序 → Read 阅读
  • DSP : Demonstrate 验证 → Search 搜索 → Predict 预测
  • ITER - RETGEN : Retrieve 检索 → Read 阅读 → Retrieve 检索 → Read 阅读

三、Fine-tuning 微调

这三种微调方法都是为了提高模型在特定任务上的表现,但它们关注的焦点不同。检索器微调专注于改进信息查找过程,生成器微调专注于改进输出的质量,而协同微调则旨在优化这两个组件之间的协作。

3.1、Retriever Fine-tuning(检索器微调)

检索器是指模型中用来从大量数据中检索信息的部分,通常用于处理需要查找和利用外部知识的任务,如问答系统。

微调检索器就是对这部分模型进行特殊训练,使其更擅长从数据集中找到相关信息。

举个例子,就像在图书馆中训练一个图书管理员,使其更快地找到你需要的书。

3.2、Generator Fine-tuning(生成器微调):

生成器是模型中负责产生响应或输出的部分,如文本生成模型中创建新文本的部分。

微调生成器意味着特别训练这个部分,使其在产生输出时更准确、更符合目标任务的要求。

例如,如果你想让模型写诗,你会特别训练它理解和使用诗歌的结构和韵律。

3.3、Collaborative Fine-tuning(协同微调)

这是一种更复杂的微调方法,涉及到模型中的检索器和生成器同时被调整,以更好地协同工作完成任务。

在协同微调过程中,检索器和生成器相互学习,以提高整体性能。检索器提供的信息可以帮助生成器产生更准确的输出,而生成器的需求可以引导检索器寻找更相关的信息。

可以想象成一个团队工作的情况,团队中的每个成员(检索器和生成器)都在相互学习,以更好地协作完成任务。

四、总结

大型语言模型(如GPT、LLama、Gemini)在准确性、知识更新速度和答案透明度方面存在挑战,常用的解决优化方法:Prompt Engineering(提示词工程)、Retrieval-Augmented Generation(RAG,检索增强生成)和Fine-tuning(微调)。每种方法都有不同的层次和特点。

Prompt Engineering:通过使用标准提示词、Few-shot提示词和XoT提示词(如CoT和ToT),来提高模型的回答精准度。

RAG:模型首先从文档库中寻找相关信息,然后使用这些信息来生成回答或文本。RAG分为三种类型:

  • Naive RAG:添加相关上下文。
  • Advanced RAG:在索引/检索前后进行优化。
  • Modular RAG:组合多种模块。

Fine-tuning:涉及检索器微调、生成器微调和协同微调,旨在提高模型在特定任务上的表现。检索器微调专注于改进信息查找过程,生成器微调专注于改进输出质量,协同微调则优化这两个组件间的协作。

标签:检索,RAG,Prompt,模型,微调,生成器,生成,Fine
From: https://www.cnblogs.com/ghj1976/p/17947589/da-yu-yan-mo-xing-you-hua-fang-fa

相关文章

  • react-draggable All In One
    ReactDraggableComponentAllInOneHTML5DnD/DragandDrop/draggableDraggableAPIreact-draggablehttps://www.npmjs.com/package/react-draggablehttps://github.com/react-grid-layout/react-draggabledemoshttps://react-grid-layout.github.io/react-......
  • NeurIPS'23 Paper Digest | PromptTPP: Prompt Pool 与时序点过程模型的持续学习
    为期一周的人工智能和机器学习领域顶级会议 NeurIPS 已于当地时间 12 月 16 日圆满结束。蚂蚁集团有 20 篇论文被本届会议收录,其中《Prompt-augmented Temporal Point Process for Streaming Event Sequence》由蚂蚁集团研究并撰写,作者包括薛思乔、王言、褚志轩、师......
  • NeurIPS'23 Paper Digest | PromptTPP: Prompt Pool 与时序点过程模型的持续学习
    为期一周的人工智能和机器学习领域顶级会议 NeurIPS 已于当地时间 12 月 16 日圆满结束。蚂蚁集团有 20 篇论文被本届会议收录,其中《Prompt-augmented Temporal Point Process for Streaming Event Sequence》由蚂蚁集团研究并撰写,作者包括薛思乔、王言、褚志轩、师......
  • Unity3d Vertex/Fragment Shader添加Shadow
    Shader"ZX/BaseVertFragmentShadow"{Properties{_DiffuseTexture("DiffuseTexture",2D)="white"{}_DiffuseTint("DiffuseTint",Color)=(1,1,1,1)}SubShader{......
  • FineReport动态隔间运算
    1、动态隔间运算入门说明首先提供一个公式,公式:“显示列[显示列的父列:偏移量]”。此时你不需要知道这个公式是什么意思,目前有个印象就行,通过下面的学习你就明白了。动态隔间运算类似于EXCEL表格中的公式运算,相当于你在某个单元格中输入“=…”这样的公式。定义不太好叙述,下面......
  • 使用LOTR合并检索提高RAG性能
    RAG结合了两个关键元素:检索和生成。它首先使用语义搜索等高级技术来浏览大量数据,包括文本、图像、音频和视频。RAG的本质在于它能够检索相关信息,然后作为下一阶段的基础。生成组件利用大型语言模型的能力,解释这些数据块,制作连贯的、类似人类的响应。与传统的生成模型相比,这个过程......
  • Modbus转Profinet,不会编程也能用!轻松快上手!
    Modbus转Profinet,不会编程也能用!轻松快上手!Modbus转Profinet是一种用于工业自动化领域的通信协议转换器,可以将Modbus协议转换为Profinet协议,实现设备之间的数据交换与通信。这个工具的使用非常简单,即使没有编程经验的人也可以轻松上手。即使不会编程的人也可以轻松快速上手使用Mo......
  • 大模型系统与应用:Prompt-learning技术探讨
    近年来,随着深度学习技术的不断发展,大型神经网络模型已经成为许多领域的重要工具。这些大型模型具有数十亿甚至数百亿的参数,能够处理海量的数据,并学习到非常复杂的特征。然而,随着模型规模的增大,训练和调优的难度也在逐步增加。为了解决这个问题,研究者们提出了一些新的技术,包括Prompt......
  • The JAVA_HOME environment variable is not defined correctly,解决
    k8s集成jenkins,在进行子工程mvncleaninstall过程中报截图中错误,经过排除是之前在系统管理->系统配置中,添加的JAVA_HOME环境变量不对,可能目前我使用的jenkins是通过k8sPod生成的,并不是直接在主机上安装的,所以此处填的JAVA_HOMEjenkins识别不到,所以报错.取消后不再报错.......
  • 快速实现Modbus和Profinet互转的方案
    快速实现Modbus和Profinet互转的方案为了快速实现将Modbus信号转换为Profinet信号的畅通无阻,我们可以使用Modbus转Profinet网关(XD-MDPN100/200)。Modbus转Profinet网关(XD-MDPN100/200)可以实现快速的协议转换,将Modbus信号转换为Profinet信号,并且在转换过程中确保通信的稳定和安全。......