Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NONE-2024-LLM Memo #370

Open
BrambleXu opened this issue Jan 27, 2024 · 1 comment
Open

NONE-2024-LLM Memo #370

BrambleXu opened this issue Jan 27, 2024 · 1 comment
Assignees
Labels
LLM(M) Large language models

Comments

@BrambleXu
Copy link
Owner

BrambleXu commented Jan 27, 2024

2024

Click me

2014/01

RAG“新手村”速通攻略:RAG的2-stage优化核心策略及主流方案

Click me

IMG_7229
图1:RAG的基础方案

RAG优化核心策略主要基于Information Retrieval的2-stage经典思路展开:即同时保证高召回率和精度。2-stage在基础RAG策略上进行升级,包含两个阶段:

IMG_7230

精度:The signal to noise ratio of retrieved context
召回率:Retrieved information to all the relevant information required to answer the question

第一阶段:最大化召回率(High Recall),同时接受较低的精度( Low Precision)。此阶段涵盖RAG的Indexing和Retrieval部分(为了区别于一般意义上的Retrieval,我们改称该部分为Recalling),其目标是使用较为快速、低廉的方式覆盖全部输入文档,并保证问题相关的文档切片都可以被召回。

第二阶段:提升精度(Higher Precision)。此阶段由新增的Reranking部分构成,其目的是在切片文档被获取后进行“Postprocessing”,以提升Top_K的精度,降低送往大模型文档切片的噪声。

在11月的开发者大会上,OpenAI展示了2-stage策略的效果。经过2-stage改造,OpenAI RAG系统的准确率从45%提升到98%(图3):

Reranking

在53%的准确度提升中,约44%的提升来源于针对Indexing、Recalling和Reranking这三个部分的优化。由此可见,针对这三部分的优化是RAG优化的核心。

2-stage在Recalling、Indexing和Reranking等三个部分至少存在9个优化点位(图4)。每个点位都包括N个技术实现,此外,点位的组合又会产生多种优化方案,非常容易让新手眼花缭乱,陷入实现细节。

IMG_7232

所以,在方案选择上,我们建议采用“Top-Down”策略。首先,依据实际业务需求厘清优化目标,明确要在哪一个或者多个部分实现优化。Recalling、Indexing和Reranking三部分优化目标分别如下:

  • Recalling的目标是完善Query以取得更高的召回率;
  • Indexing的优化目标是在提升召回率的同时保证语义完整性;
  • Reranking的优化目标是保证Top_K的精度。

其次,根据优化目标,选择不同类型的方案或方案组合。

下述内容列举了一些当前比较主流的方案及其优化目标:

Query Transformation

  1. Standard 2-stage由基础RAG策略 + Reranking环节构成。该方案中最重要的是Reranker(也称为cross-encoder,由大模型或者算法实现),其能够在召回的切片之上,基于相关性对切片进行重排,以保证返回最相关的n个切片。

IMG_7234

以下是Rerank的大模型实现方式:

  • 商业模型 - Cohere AI[2];
  • 开源模型 - bge-reranker[3]。
  1. Question Transformation[4]是通过改写、拓展和丰富问题的语义以提升召回率。当前比较流行的方案包括:
  • Rewrite-Retrieve-Read:使用大模型改写问题;
  • Step Back prompting:使用大模型产生问题的“Step-back Question”,并将问题和Step-back一同用于召回;
  • Follow Up Questions:将历史对话记录融入当前问题进行召回;
  • Multi Query Retrieval:使用大模型基于原始问题,从不同角度产生多个新问题,并使用每一个新问题进行召回;
  • HyDE[5]:使用大模型产生问题的Hypothetical答案,并将问题和答案一同用于召回。
  1. RAG-Fusion[6] 结合Multi Query Retrieval 和基于Reciprocal Rank Fusion (RRF)[7]算法的Reranker,通过产生多个问题变种、进行多次召回,再用RRF算法进行合并和排序来提升召回率和精度。其主要流程如下:

IMG_7235

RAG-Fusion兼备2-stage和Query Transformation的优点,且不需要大模型来进行Reranking,是当下热度较高的方案。

  1. Hybrid Search[8] 同时执行Keyword Search和Vector Search,并使用RRF算法合并、并重排两种不同检索的结果(图8)。相较于Vector Search,Keyword Search更善于:
  • 精准匹配,例如产品名称和人名;
  • 仅匹配几个字符;
  • 匹配低频度词汇。

IMG_7236

BM25[9]是Keyword Search的核心算法,该算法估算Keyword与文档之间的相关性,已经被广泛应用于搜索系统,其特点是可以高速完成对海量文档的覆盖。

此外,相当多的Vector Store,例如Pinecoine、TencentVectorDB等,已经原生支持Hybrid Search,通过调整参数即可调整Hybrid Search中Keyword Search和Vector Search的比例。

5.Small-to-Big采用分离索引和内容的方式以提升Vector Search的完整性。该类方案通常通过一小段索引(节点)关联到一大块完整的切片,以小切片搜索的精确度驱动大切片内容的完整性。Small-to-Big有如下实现:

  • Sentence-window retrieval[10]:索引句子,关联到句子的上下文;
  • Auto-merging retrieval[10]:通过子节点递归关联父节点;
  • Multiple-Vector Retriever[11]:通过切片的Summary,找到存储在Doc Store中的切片原文。

6.Question Construction[12]是利用Metasearch和Text-to-SQL等技术提升对“结构化”数据查询的准确性。“结构化”数据不仅仅存在于关系型数据中(例如数据库),也存在于非关系型的文本中(例如文本中的数字,年份等)。使用Metasearch和Text-to-SQL可以有效地提升这部分数据的召回率。而鉴于Metasearch和Text-to-SQL都是较为成熟的技术,这里就不一一展开了。

2023

2023-12 ChatGPT Prompt顶级思维框架:LangGPT(附Prompt生成器)

Click me

“LangGPT”的思维框架

RPBGCSWEI 分为9个核心组成部分:

• Role(角色)
• Profile(概况)
• Background(背景)
• Goals(目标)
• Constraints(约束)
• Skills(技能)
• Workflow(工作流)
• Examples(示例)
• Initialization(初始化)

示例prompt:

## Role: 文章改写大师

## Profile

- Author: 几道

- Version: 1.0

- Language: 中文

- Description: 我是一位专业的文章改写大师,擅长根据用户需求,以及提供的原始文章,将文章进行改写,使之更加易读、流畅。通过我专业的改写技巧和语言表达能力,帮助用户生成高质量的文章。

## Background

- 熟练掌握各类文章改写技巧和策略,包括但不限于替换词汇、重组句子、简化句子等方法。
- 对不同领域和行业的文章拥有广泛的理解和阅读经验。
- 注重文章改写后的文章质量和可读性,力求改写后的文章在语言表达和逻辑结构上更加优秀。

## Goals

- 帮助用户改写原始文章,使之更加清晰、准确、易读。
- 提供高质量的句子重组、词汇替换和简化句子等改写技巧,以满足用户的需求。
- 保持改写后文章的原意,并遵循用户对文章改写的要求。

## Constraints

- 严格按照用户的要求进行文章改写,不添加任何不必要的内容或修改原意。
- 不改写任何负面、不当或敏感内容。
- 如果不确定某些细节,会与用户进行沟通并进行确认。

## Skills

- 熟练使用各类文章改写技巧和策略,以提升文章的可读性和流畅度。
- 对不同领域的文章具有一定了解,能准确运用专业术语和行业概念。
- 善于与用户进行沟通和确认,确保改写后的文章符合用户的需求和要求。

## Workflow

1. 与用户充分交流,请求用户提供原文和需求。
2. 分析原始文章的内容和结构,设计合理的文章改写框架。
3. 使用专业的改写技巧和策略,进行文章的句子重组、词汇替换和简化句子等操作。
4. 与用户进行反馈交流,根据用户的意见和建议,对文章进行修改和完善。

## Examples

原文:

标题:带你回味经典,看看影视剧中的那些印象深刻场景

内容:大部分影视剧中,都有一些令人难以忘怀的场景,它们或许是剧情的高潮,或者是角色的情感表达,更或者是背景音乐的加持。这些场景在观众的心中留下了深刻的印象,成为了经典。让我们一起回顾一些影视剧中的那些难以忘怀的场景吧!

改写后:

标题:重温经典瞬间,探索影视剧中令人铭记的场景

内容:影视剧的世界充满了无数令人铭记的时刻。这些瞬间或是剧情的巅峰,展现角色的情感深处,或是背景音乐的完美融合,都为观众带来了难以忘怀的体验。这些精彩场景成为了经典,永存我们的心中。现在,就让我们一起重新探索这些影视剧中令人回味无穷的经典场景吧!

## Initialization

您好,我是一位专业的文章改写大师,很高兴为您提供文章改写服务。请告知您的需求,并提供原始文章,我将根据您的要求和期望进行文章改写,在保持原意的基础上,使之更加易读、流畅。期待与您的合作!

2023-07 我为什么放弃了 LangChain?

Click me

ReAct: Synergizing Reasoning and Acting in Language Models

image (ReAct 论文中的 ReAct 流示例) image
@BrambleXu BrambleXu added the LLM(M) Large language models label Jan 27, 2024
@BrambleXu BrambleXu self-assigned this Jan 27, 2024
@BrambleXu
Copy link
Owner Author

BrambleXu commented Jan 27, 2024

2023-11 A Survey of Techniques for Maximizing LLM Performance

Click me Pasted Graphic 34

为什么优化LLM很难

  • 从噪音中提取信号
  • 性能很难量化
  • 什么时候用什么方式优化
Pasted Graphic 35

本次演讲的目的

  • 一个基础模型
  • 学会选择合适的方法
  • 有信息能自己优化
Pasted Graphic 36 image

上面两张图,优化不是线性的,而是从两个方面去优化,context和llm。

image

一个典型的优化流程

  • (prompt engineering) prompt
  • (prompt engineering) fewshot
  • (RAG) add simple retrieval
  • (fine-tuning) Fine-tune model
  • (RAG) Add HyDE retrieval + fact-checking step
  • (fine-tuning) Add RAG context to training examples
  • Try something else

01 Prompt Engineering

image image

改进示例

image image image

02 RAG

image image

RAG的基本流程

image image

注意这里HyDE效果不好,FT Embedding有效果,但是太花钱了

  • 只通过改进chunking,能有20%的效果提升
  • reranking:比如使用rule,如果是针对科学文献的搜索,那么优先选取最新的文档。这部分应该用到了meta data,比如文档的时期
  • classification step: 比如利用meta data里的domain,对检索的结果查看meta data里的domain,然后分类哪些chunk的domain是最相关的
  • prompt engineering:做一些prompt上的改进
  • tool use:我们随后审视了我们回答错误的问题类型,并引入了工具。例如,我们注意到有些问题涉及结构化数据,需要从这些文档中提取数据。我们的解决方案是直接让它访问一个SQL数据库,在其中输入变量,执行查询,然后实际返回结构化数据的答案。这里使用工具的意思应该是访问SQL数据库的工具
  • query expansion: 比如一下子有三个问题,那么需要对每个问题进行拆分,然后检索,最后把所有内容合成

上面这些方法都是针对如何获得context的,还没有涉及到finetune,效果已经有了98%。

下面是一个需要警惕的情况

image

回答是一首歌,看似是出现了幻觉

image

但其实不是幻觉,因为context里有相关的文档。

整个RAG里容易出错的地方太多了,检索可以出错,llm可以出错。这也是为什么我们需要使用恰当的指标对不同容易出错的地方进行评价。这里提到了ragas的4个评价指标。

image

03 Fine-tuning

image image (FT的优点) image (不用FT的缺点,prompt长,结果容易出错) image (使用FT的优点,prompt短,反应速度快,在domain上结果好) image (注意,如果prompt engineer效果不好,FT可能也没什么效果)

下面是使用FT后成功的效果

image image

使用FT的注意事项(哈哈,训练语料很重要的)

image

下面是FT的步骤

image image image image

FT的best practices

image

FT+RAG的优点

image

04 Application of theory

image (Yale的一个text-to-sql的比赛) image (给出左边的schema和问题,生成右边的sql) image (RAG方面的尝试,有下划线的是效果不错的方法) image
  • 69: baseline
  • 72: few-shot
  • 77:使用了HyDE,生成一些假定的答案,放在prompt里
  • 80:n=5,增加了获取的文件数量
  • 84:通过llm生成新的问题,进行chunk检索
image

使用了GPT4进行FT,结果也才84。。还是RAG容易出效果啊

recap

image

@BrambleXu BrambleXu pinned this issue Mar 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
LLM(M) Large language models
Projects
None yet
Development

No branches or pull requests

1 participant