https://huggingface.co/blog/hrishioa/retrieval-augmented-generation-1-basics
https://huggingface.co/blog/hrishioa/retrieval-augmented-generation-2-walking
https://huggingface.co/blog/hrishioa/retrieval-augmented-generation-3-structure
Better RAG 1: Advanced Basics
这是系列的第一篇,作为后续两部分的基础。1. 核心概念 文章首先介绍了大型语言模型(LLMs)作为few shot learner的能力,它们几乎可以作为通用智能体来学习新任务、处理复杂信息并作为数字助手。然而,LLMs的输入/输出窗口(即上下文)有限,这是使它们真正智能化的最大障碍。文章强调了将人类数据的语料库与LLMs的有限上下文相结合的重要性,以创建能够即时学习和适应的系统,就像人类一样。
2. 检索增强型生成(RAG) 讨论了RAG系统的基本工作流程,包括信息导入、嵌入结果、检索与问题相关的数据块、将这些块导入模型的有限上下文中,并要求模型生成答案。这个过程看似简单,但在实践中很快就会遇到问题。检索大型数据集中与问题相关的部分仅使用问题中包含的信息是一项挑战。文章还提到了现代RAG系统的复杂性,以及不同系统如何尝试解决相同的问题。
3. 检索系统的问题 探讨了检索系统面临的挑战,包括传统方法(如BM25和TFIDF)和基于嵌入的检索方法。这些方法试图使用查询中的信息来找到源文档的相关部分。文章还讨论了LLM预训练作为索引大量信息的有效方法,以及上下文学习如何利用模型的输入空间来注入信息。
4. 嵌入模型 文章对嵌入模型描述为机器学习模型理解语言的“大脑切片”。嵌入模型将高维向量转换为低维空间,使得具有相似概念的输入在嵌入空间中靠近聚集。文章还提到了嵌入模型的局限性,包括它们通常难以解释和修复,以及它们通常比其他搜索方法更昂贵。
5. 结论 最后强调了理解问题复杂性的重要性,以及如何根据预期的问题类别来构建系统。作者提出了一些有用的规则,比如保持简单性、从查询开始构建系统、以及在查询时和数据摄取时分离工作。文章还提到了使用LLMs作为转换工具的潜力,以及如何通过递归总结来提高跨数据集的回答能力。
Better RAG 2: Single-shot is not good enough
这篇文章专注于多轮检索的概念,即如何让AI模型请求新信息、发现信息中的长距离关系,并将这些信息结合起来以获得更好的结果。文章通过实例展示了如何使用GPT和Huggingface助手来提取事实、发现新的信息来源,并从特定位置检索信息。
作者指出大多数现有的RAG系统都是单次检索,即对于给定的问题,系统检索信息、修剪和修改,然后使用语言模型(LLM)生成答案。然而,这种方法忽视了人类回答问题时的多轮检索过程。文章强调,为了达到更准确和全面的回答,我们需要一种方法让中央智能(无论是人类还是LLM)请求更多与已检索信息相关的信息。
1.实施多轮检索的方法 文章详细介绍了实现多轮检索所需的三个要素:
- 从检索到的源数据中提取部分信息,以便我们边学边用。
- 根据源数据和问题找到新的查找地点。
- 从这些特定位置检索信息。
2. 事实提取(Fact Extraction) 使用GPT和Huggingface助手作为示例,展示了如何从文档中提取事实。通过提供一个大型文档(如COP24报告)和一个复杂问题,文章演示了如何让模型提取与问题直接相关的信息,并解释这些事实的相关性。
3. 寻找新的线索(Finding new threads) 一旦我们有了部分事实,我们希望知道这些事实告诉我们关于寻找额外信息的新地点的信息。文章展示了如何从检索到的块中提取引用,并使用这些引用来发现更多信息。
4. 连接线索(Connecting the threads) 文章讨论了如何使用嵌入来搜索文档中与检索到的描述符相关的新信息块。这种方法可以帮助我们在文档中找到之前检索轮次可能遗漏的新信息。
5. 熵(Entropy)和中间输出(Intermediates) 文章强调了熵在语义搜索系统中的作用,熵可以用来描述句子中包含的信息量。在人类术语中,熵可以被视为上下文。文章还讨论了中间输出的价值,包括提供即时反馈、标记和分类文档以及构建知识图。
6. 结论 文章总结指出,我们记录的信息——无论是PDF、文本消息、Excel表格还是书籍——都是深度相互关联的。文章强调了循环(或称为walking RAG、代理等)是提高现代检索系统能够处理的问题复杂性的一种方式。作者还提到了一些未在文章中详细讨论的主题,例如如何在摄取时构建图、输入数据的转换以及如何实现循环终止。
Better RAG 3: The text is your friend
讨论了如何通过应用源数据和问题的转换来提高检索性能。文章强调了在检索之前对文本进行转换的重要性,以减少查询和答案之间的距离。
1. 转换的重要性 文章的核心观点是,许多RAG系统在设计时过于依赖嵌入(embeddings)技术,而忽视了文本数据本身的价值。作者提出,应该在转换和嵌入之前,尽可能多地从源文本中提取有用信息,这样可以更有效地指导搜索过程。
2. 源数据的转换 作者讨论了在检索之前对源数据进行转换的方法,包括元数据提取和文本结构推断。这些转换可以帮助缩小搜索范围,提高检索的速度和准确性。例如,通过提取文档的元数据(如标题、摘要、关键词等),可以为检索提供更具体的指导。
3. 问题和答案之间的距离 文章还探讨了如何减少问题和答案之间的距离。作者认为,通过在问题和数据上应用转换,可以帮助它们在语义上更接近,从而提高检索的准确性。这可能涉及到对问题进行重新表述,或者对数据进行预处理,以便更好地匹配查询。
4. 嵌入模型的使用 尽管文章强调了文本的重要性,但作者并没有完全否定嵌入模型的价值。相反,他提出了一种更平衡的方法,即在利用文本数据的同时,适当地使用嵌入模型来提高检索性能。这种方法可以避免过度依赖嵌入,从而减少系统的复杂性和成本。
5.结论 在文章的结尾,作者总结了一些有用的经验和建议,旨在帮助开发者构建更有效的RAG系统。他强调了简单性的重要性,以及在构建新系统时从问题本身出发的重要性。此外,作者还提到了在查询时和数据摄取时分离工作的重要性,以及如何利用大型语言模型(LLMs)作为转换工具的潜力。