<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>RAG - 南极滑稽的博客</title>
	<atom:link href="https://blog.nanjihuaji.top/tag/rag/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.nanjihuaji.top</link>
	<description>一个学术垃圾的博客</description>
	<lastBuildDate>Fri, 11 Apr 2025 05:53:45 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.nanjihuaji.top/wp-content/uploads/2024/08/cropped-Cache_45925d60c206ddd8-150x150.jpg</url>
	<title>RAG - 南极滑稽的博客</title>
	<link>https://blog.nanjihuaji.top</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>元认知增强检索大预言模型：MetaRAG论文导读</title>
		<link>https://blog.nanjihuaji.top/2025/01/17/%e5%85%83%e8%ae%a4%e7%9f%a5%e5%a2%9e%e5%bc%ba%e6%a3%80%e7%b4%a2%e5%a4%a7%e9%a2%84%e8%a8%80%e6%a8%a1%e5%9e%8b%ef%bc%9ametarag%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb/</link>
					<comments>https://blog.nanjihuaji.top/2025/01/17/%e5%85%83%e8%ae%a4%e7%9f%a5%e5%a2%9e%e5%bc%ba%e6%a3%80%e7%b4%a2%e5%a4%a7%e9%a2%84%e8%a8%80%e6%a8%a1%e5%9e%8b%ef%bc%9ametarag%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb/#respond</comments>
		
		<dc:creator><![CDATA[Nanjihuaji]]></dc:creator>
		<pubDate>Fri, 17 Jan 2025 09:13:08 +0000</pubDate>
				<category><![CDATA[论文]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[RAG]]></category>
		<guid isPermaLink="false">https://blog.nanjihuaji.top/?p=271</guid>

					<description><![CDATA[<p>居然可以用心理学概念加强RAG的性能！</p>
<p>The post <a href="https://blog.nanjihuaji.top/2025/01/17/%e5%85%83%e8%ae%a4%e7%9f%a5%e5%a2%9e%e5%bc%ba%e6%a3%80%e7%b4%a2%e5%a4%a7%e9%a2%84%e8%a8%80%e6%a8%a1%e5%9e%8b%ef%bc%9ametarag%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb/">元认知增强检索大预言模型：MetaRAG论文导读</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;">原论文：Zhou, Y., Liu, Z., Jin, J., Nie, J. Y., & Dou, Z. (2024, May). Metacognitive retrieval-augmented large language models. In <em>Proceedings of the ACM on Web Conference 2024</em> (pp. 1453-1463).</p>
<p>他们在<a href="https://github.com/ignorejjj/MetaRAG">Github</a>上公开了MetaRAG的源代码。</p>
<h2>原文摘要</h2>
<p>检索增强生成技术（RAG）因其在生成事实内容方面的作用而成为自然语言处理的核心。虽然传统方法采用单次检索，但最近的方法已转向多跳推理任务的多次检索。但是，这些策略受<strong>预定义的推理步骤</strong>的约束，可能会导致响应生成不准确。本文介绍了<strong><em>MetaRAG</em></strong>，这是一种<strong>将RAG过程与元认知（Metacognition，对认知的认知）相结合的方法</strong>。在认知心理学中，元认知允许实体进行自我反思，并批判性地评估其认知过程。通过集成元认知，MetaRAG 使模型能够监控（monitoring）、评估（evaluating）和规划（Planning）其响应策略，从而增强其内省推理能力。通过三步元认知调节管道，该模型可以识别初始认知反应中的不足之处并加以修复。实证评估表明，MetaRAG的性能明显优于现有方法。</p>
<h2>方法简析</h2>
<h3>概要</h3>
<p>之前的各种方法虽然从各种地方改进了RAG的检索效果，但是这些方法中的检索步骤都是固定的。与此不同，我们人类可以<strong>反思并改进</strong>我们的思考方式，这种能力被称为<strong>元认知（Metacognition）</strong>。作者们认为，让RaLM(Retrieval-Augmented Language Model，i.e. 采用RAG的LLM)模拟人类的元认知能力，可以提高其在复杂任务上的表现。</p>
<p><img decoding="async" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/metacognitionhuman.png" alt="" /></p>
<p>如上图，人类的元认知可以分为两个部分：<strong>知识（Knowledge）</strong>和<strong>元认知知识（Metacognitive Knowledge）</strong>，其中，知识表明我们对客观事实、方法等的认知，而元认知知识则是我们对认知过程的管理和调控，我们可以由元认知知识了解事物运行背后的逻辑，并由此找到自我提升的手段。向我们的输入会先由我们的知识部分得出一个响应，随后根据具体情况决定是否进入元认知部分进行分析，最终输出一个不错的响应。</p>
<p><img decoding="async" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/metacognitionLLM.png" alt="" /></p>
<p>仿照上文中人类的知识和元认知知识，作者将他们设计的LLM分为<strong>外部知识</strong>部分和<strong>元认知知识</strong>部分，给LLM一个输入，它会先像普通的RaLM一样从外部知识库中检索，并生成一个响应，随后由根据具体情况决定是否要进入元认知知识部分进行分析，最终输出一个还不错的响应。他们称这种方法为<strong>MetaRAG</strong>。</p>
<p>具体的，他们的方法可以归结为下图：</p>
<p><img decoding="async" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/MetaRAG.png" alt="" /></p>
<p>首先，他们将MetaRAG分作<strong>认知空间(Cognition Space)</strong>以及<strong>元认知空间(Metacognition Space)</strong>，对应之前提到过的External Knowledge和Cognitive Knowledge。认知空间执行正常的RAG步骤。</p>
<p>元认知空间由<strong>Monitoring, Evaluating和Planning</strong>部分组成，其中，Monitoring部分负责评估回答质量，决定是否进入元认知空间，如果不进入，则按正常的RAG步骤输出，如果决定进入，则进入Evaluating部分，这一部分负责判断现有的内外知识是否足够解决问题，以及是由于犯了哪些错误导致回答质量不佳，随后的Planning阶段根据Evaluating阶段所得出的结论判断应该采取哪些操作提升回答的质量。</p>
<h2>细节</h2>
<h3>Monitoring部分</h3>
<p>如上文所说，Monitoring是负责评估<strong>回答的质量是否足够好</strong>的。对此，他们选择使用<strong>专家模型</strong>生成相同问题的回答，并通过对比LLM与专家模型的回答的<strong>相似度</strong>来决定答案是否足够好的。具体来说，他们将模型生成的嵌入与专家模型生成的嵌入作比较，如果相似性小于k，则认为这个答案是不好的。</p>
<p>（为什么他们不直接输出专家模型的结果呢？我也不知道，但是这个论文已经被A会接受了，或许大佬们认为这样做是没问题的？）</p>
<h3>Evaluating部分</h3>
<p>Evaluating是Monitoring认为答案不够好后进入的部分，主要聚焦于两点：</p>
<p>（a） 内部和外部知识来源都足以解决所提出的问题吗？</p>
<p>（b） QA LLM 的推理过程是否容易受到多跳 QA 中经常遇到的常见问题的影响？</p>
<p>为了解决这两个问题，他们又引入了两个概念：过程知识和陈述性知识。程序知识体现了对面对特定任务所必需的<strong>方法和策略</strong>的把握，而陈述性知识则锚定在特定事实或基于内容的信息中，涵盖与解决问题相关的<strong>事实和概念</strong>。他们在prompt中让模型充当evaluator-critic系统，认为这样做效果比让模型从问题的回答者去评估生成的答案要好。</p>
<p>在<strong>过程性知识</strong>的评估过程中，他们使用模型充当的evaluator-critic系统评估模型的内部知识，用NLI（自然语言推理）模型去衡量模型的外部知识，NLI模型可被抽象为形如 f⁢(<span style="cursor: pointer; border-bottom: 2px dotted #3399ff;" data-kimi-id="1737104029599" data-kimi-disabled="false" data-kimi-recommend="false">premise</span>,hypothesis) 的函数，在premise可以推出hypothesis时返回1，否则返回0，同时，他们也给模型做了一个prompt：</p>
<div class="MathJax_SVG_Display" style="text-align: center;"> </div>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Please act as an evaluator-critic system, determine if you can provide a reliable answer to the {question} based on your own knowledge?</p>
</blockquote>



<p>判断完后，他们可以将知识上的不足分为四类，我们稍后会谈到。</p>



<p>在<strong>陈述性知识</strong>的评估过程中，他们将推理错误分为三类：不完全推理、答案冗余、歧义理解，并调用evaluator-critic系统去判断错误可能是什么，prompt如下：</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Please act as an evaluator-critic system, assess whether the {response} based on {references} for the {question} contains any {error types}?</p>
</blockquote>



<h3 class="wp-block-heading">Planning部分</h3>



<p>对错误有了认知后，就可以对症下药，尝试去解决错误了。现在填上文挖的坑，知识不足可以根据哪方面的知识来源不足被分为四类：</p>



<ul class="wp-block-list">
<li>无知识</li>



<li>仅外部有</li>



<li>仅内部有</li>



<li>内部和外部都有</li>
</ul>



<p>严格来说，最后一个不算知识不足，不过也属于可能的一种情形。无论如何，判断出来知识是哪方面不足后就可以对症下药了，对症生成prompt后，模型就可以从相应的地方继续搜索，直到问题解决或放弃为止。</p>



<p>知识不足不是模型回答错误的全部原因，另一种可能导致不准确回答的情况是内部和外部知识之间存在差异，即<strong>知识冲突</strong>，解决方案即直接放弃某个部分的知识，仅依赖单一知识来源就可以做出比较好的回答，不过他们这么做并没有考虑模型内部知识与外部知识的质量的差异，如果能考虑到评估知识库的质量，决定放弃某一个知识库可能会更好。</p>



<p>哪怕知识已经足够，模型可能还会在推理过程中犯错误，即<strong>错误推理</strong>，如果推理是用CoT等多步推理方法进行的，LLM会被要求重新检查推理过程中哪里可能出错，并对症重新进行推理。这里看起来似乎可以和ToT或者MCTS这样的方法结合一下，说不定会更好用呢？</p>



<h2 class="wp-block-heading">评估部分</h2>



<p>总体来说，</p>



<ol class="wp-block-list">
<li>MetaRAG 始终优于两个数据集的所有基线方法。与 Reflexion 相比，Reflexion 在其推理过程中还集成了自我批评机制，MetaRAG 在所有指标上都表现出了实质性的改进。这表明使用元认知策略比仅仅依靠自我批评更有益。</li>



<li>配备自我批评机制的模型与没有自我批评机制的模型相比，表现出优异的性能。</li>
</ol>



<p>他们做了一个消融实验，证明剥离元认知空间中的任何一个组件都会造成效果的极大下降。</p>



<p>他们还研究了相似性阈值k，不过这些说起来也比较繁琐，在这里就不说了。</p>



<p>这篇理论上八月就看的差不多了，不过当时一直忙着没写完，现在才有时间写完发出来，不得不说我真的是……</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="246" height="241" src="http://migrate.nanjihuaji.top/wp-content/uploads/2025/01/爆.png" alt="" class="wp-image-371"/></figure>



<p></p><p>The post <a href="https://blog.nanjihuaji.top/2025/01/17/%e5%85%83%e8%ae%a4%e7%9f%a5%e5%a2%9e%e5%bc%ba%e6%a3%80%e7%b4%a2%e5%a4%a7%e9%a2%84%e8%a8%80%e6%a8%a1%e5%9e%8b%ef%bc%9ametarag%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb/">元认知增强检索大预言模型：MetaRAG论文导读</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.nanjihuaji.top/2025/01/17/%e5%85%83%e8%ae%a4%e7%9f%a5%e5%a2%9e%e5%bc%ba%e6%a3%80%e7%b4%a2%e5%a4%a7%e9%a2%84%e8%a8%80%e6%a8%a1%e5%9e%8b%ef%bc%9ametarag%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>RaLMSpec论文导读：使用推测方法加速RAG</title>
		<link>https://blog.nanjihuaji.top/2024/08/02/ralmspec%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb%ef%bc%9a%e4%bd%bf%e7%94%a8speculative%e6%96%b9%e6%b3%95%e5%8a%a0%e9%80%9frag/</link>
					<comments>https://blog.nanjihuaji.top/2024/08/02/ralmspec%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb%ef%bc%9a%e4%bd%bf%e7%94%a8speculative%e6%96%b9%e6%b3%95%e5%8a%a0%e9%80%9frag/#respond</comments>
		
		<dc:creator><![CDATA[Nanjihuaji]]></dc:creator>
		<pubDate>Thu, 01 Aug 2024 18:58:32 +0000</pubDate>
				<category><![CDATA[论文]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[RAG]]></category>
		<category><![CDATA[RAG加速]]></category>
		<guid isPermaLink="false">https://blog.nanjihuaji.top/?p=220</guid>

					<description><![CDATA[<p>居然可以将缓存的概念用在RAG上！</p>
<p>The post <a href="https://blog.nanjihuaji.top/2024/08/02/ralmspec%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb%ef%bc%9a%e4%bd%bf%e7%94%a8speculative%e6%96%b9%e6%b3%95%e5%8a%a0%e9%80%9frag/">RaLMSpec论文导读：使用推测方法加速RAG</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>原文标题：ACCELERATING RETRIEVAL-AUGMENTED LANGUAGE MODEL SERVING WITH SPECULATION</p>



<p>Zhihao Zhang1†, Alan Zhu1, Lijie Yang1, Yihua Xu2, Lanting Li1, Hitchaya Mangpo Phothilimthana3, Zhihao Jia1‡</p>



<p>1Carnegie Mellon University, School of Computer Science<br>2 University of California, Berkeley 3 Google DeepMind<br>† zhihaoz3@andrew.cmu.edu,<br>‡ zhihao@cmu.edu</p>



<p>注：本文相当部分的内容是我根据自己的理解写的，如有错误，敬请谅解，也欢迎指正与讨论。</p>



<p>原文摘要：</p>



<p>检索增强语言模型 （RaLM） 已经证明了通过将非参数知识库与参数语言模型相结合来解决知识密集型自然语言处理 （NLP） 任务的潜力。RaLM 不是对完全参数化的模型进行微调，而是作用在低成本地适应最新数据和更好的源归因机制方面。在各种 RaLM 方法中，由于检索器和语言模型之间的交互更频繁，迭代 RaLM 提供了更好的生成质量。尽管有这些好处，但由于频繁的检索步骤，迭代 RaLM 通常会遇到高开销。为此，我们提出了 RaLMSpec，这是一个受推测启发的框架，它为迭代 RaLM 提供通用加速，同时通过推测检索和批量验证保留相同的模型输出。通过进一步结合预取、最优推测步幅调度器和异步验证，RaLMSpec 可以自动充分利用加速潜力。对于朴素迭代的RaLM服务，在4个下游QA数据集上对三种语言模型的广泛评估表明，当检索器为精确密集检索器、近似密集检索器和稀疏检索器时，RaLMSpec的加速比分别为1.75-2.39×、1.04-1.39×和1.31-1.77×与基线相比。对于 KNN-LM 服务，当检索器是精确的密集检索器和近似的密集检索器时，与baseline相比，RaLMSpec 可以实现高达 7.59× 和 2.45× 的加速比。</p>



<p></p>



<p>方法简析：</p>



<p>一般的RaLM从知识库中查找与用户输入相似度最高的文档（它们都会被转化成向量进行相似性比较），但是由于知识库中的文档数量很多，查找所需的时间长，所以迭代RaLM会因为冗长的查找流程而遇到堪忧的性能问题。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="401" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-1024x401.png" alt="" class="wp-image-222" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-1024x401.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-300x118.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-768x301.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-1536x602.png 1536w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-670x262.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image.png 1672w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>对此，作者等人想到，可以<strong>推测一部分可能会用到的文献</strong>，提前存放在本地缓存中（这就是Speculative的地方），在本地缓存中查找文档与在知识库中查找文档的方法相似，但由于本地缓存的文档数远远小于知识库中的文档数，因此，查找会变得<strong>非常快速</strong>（这就是Speculative Retrieval）。</p>



<p>具体来说，RaLM有一个本地缓存，如果这个本地缓存是空的，就进行一次Initial Query，查找一些文档放入其中。随后查找的时候就只从这个缓存里面查找了。</p>



<p>但是本地缓存毕竟不是知识库（除非它有着和知识库几乎一样的文档，但是这样就没意义了），所以这样子查找会出错。作者们想到了一个法子，可以先查s个文档，然后再批量对这些文档进行验证（也就是从知识库批量对比这些文档是不是最相似的那些，这就是Batched Verification），如果发现某s个文档中的第i个文档出错了，就回滚到第i个文档，然后代之以正确的文档并将之加入到本地缓存里，随后再用新的文档生成新的prompt。这里的s被称为<strong>推测步长</strong>，而且s要取一个比较好的值，如果s太短，比如我们让s=1，那每从本地缓存里查出来一个文档，就要从知识库里查这个文档对不对，不管用不用这个方法，每查一次文档都要上一次知识库，那这岂不是白用这个方法了（笑）；如果s太长，假如s=114514，但s从第二个开始就错了，那后面的114512个文档就白查了。至于怎么取，后文有所介绍。</p>



<p>此外，检索步骤和验证步骤可以<strong>异步进行</strong>，这样效率会更高。</p>



<p>现在我们来说一说s是怎么实现的，作者们称这个方法为Optimal Speculation Stride Scheduler(OS<sup>3</sup>)，它能自动地确定最好的s。原理是这样的：</p>



<div class="wp-block-wp-mathjax-block mathjax">


考虑a代表一个检索步骤的耗时，b代表一个验证步骤的耗时, \\\gamma(X)=p(d_i=\hat{d}_i|X)代表着在上下文X中\\猜测文档d_i与正确文档\hat{d}_i相匹配的概率. \\记目标函数为\mathbb{E}(匹配文档数|X, s)\\为在上下文X中，推测步长为s时\\匹配到正确的文档的数学期望。
\\
对于同步验证，\\\mathbb{E}=1+\sum_{i=1}^{s-2}i\gamma(X)^i(1-\gamma(X))+(s-1)\gamma(X)^{(s-1)}\\=\frac{1-\gamma(X)^s}{1=\gamma(X)}\\
对于异步验证，\\\mathbb{E}=\frac{1-\gamma(X)^s}{(1-\gamma(X))[\gamma(X)^s((s-1)a+max(a,b))+(1-\gamma(X)^s)(sa+b)]}\\
只需要令s=arg\space max\space \mathbb{E}，即可求出最优的步长了。


</div>



<p>至于这个数学期望是怎么算出来的，就超出我的理解范围了（叹气）。</p>



<p>但是事情到这里还没有完，我们之前定义了三个参数，现在我们要讨论怎么估计它们了。对于a和b，可以直接依靠RaLM最近的表现来预测。但对于γ(X)，我们需要用到对数最大似然估计。作者们所用的式子是这样的：</p>



<div class="wp-block-wp-mathjax-block mathjax">


\hat{\gamma}(X)=\frac{\sum_tM(s(t),X)}{\sum_tM(s(t),X)+\sum_t\mathbb{I}(M(s(t),X) < s(t))}\\
其中，\mathbb{I}(·)是指标函数，表明若M(s(t), X) < s(t)，则其值为1，反之则为0.  \\s(t)， t \in [w] 表示第 t 个最近验证步骤中的推测步长，\\M(s(t),X)表示相应数量的匹配文档



</div>



<p>无论如何，我们已经有办法确定最优步长s了。下面就是RaLMSpec的流程：</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="368" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-2-1024x368.png" alt="" class="wp-image-225" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2-1024x368.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2-300x108.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2-768x276.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2-1536x552.png 1536w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2-670x241.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2.png 1612w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>他们先进行3个Speculative Retrieval(i.e. q0, q1, q2, 所查询到的文档为A, B, A)，随后对这些文档进行批量验证，在这里，q3所对应的A出错了（其实应该是C），所以将之修改为C，并将C存入到本地缓存中，然后重新进行LM Decoding环节。更精确的说，这段过程的伪代码是这样的：</p>



<pre class="wp-block-code"><code>1: Input: Input tokens X = {x0, x1,... , xt−1}, external corpus C, language model f(·)
2: Output: RaLM generated outputs
3: Initialize local cache Q = {}, speculation stride s, model generation stride k
4: q = encode(X), Q.insert(C.retrieve(q)) ▷ cache prefetching
5: <strong>while</strong> EOS <strong>not in</strong> X <strong>do</strong>
6: <strong>for</strong> i = 1 <strong>to</strong> s <strong>do</strong>
7: qi = encode(X),ˆdi = Q.retrieve(qi) ▷ speculative retrieval
8: Xˆi = f(X, ˆdi, k) ▷ model generation step that generates k new tokens
9: X = &#91;X, Xˆi]
10: <strong>end for</strong>
11: d1,... , ds = C.retrieve(q1,... , qs) ▷ batched verification
12: m = arg miniˆdi != di
13: <strong>if</strong> m ≤ s <strong>then</strong> ▷ do correction if needed
14: Roll X back to the m-th speculation step
15: Xˆ = f(X, di, k)
16: X = &#91;X, Xˆ]
17: <strong>end if</strong>
18: <strong>end while</strong></code></pre>



<p>大体上来说，这段代码主要是在：初始化本地缓存，并进行初始预取。在主循环中，进行推测性检索和生成新的token。每经过s次推测后，进行批量验证。如有需要，进行校正，确保生成结果的准确性。直到生成结束符 (EOS)，生成过程结束。</p>



<p></p>



<p>评估：</p>



<p>实验设置如下：</p>



<p>•<strong>LLMs</strong>: GPT2-medium, OPT-1.3B, LLaMA-2-7B. 对于KNN-LM服务，采用了16 layers, decoder-only, 247M的LLM</p>



<p>•<strong>Datasets:</strong></p>



<p>•四个 QA 数据集：Wiki-QA、Web Questions、Natural Question, Trivia-QA;</p>



<p>•外部知识库: Wikipedia Corpus;</p>



<p>•KNN-LM评估: Wikitext-003.</p>



<p>•<strong>Retrievers:</strong></p>



<p>•Exact Dense Retrievers(EDR): Dense Passage Retriever(DPR);</p>



<p>•Approximate Dense Retriever(ADR): DPR-HNSW;</p>



<p>•Sparse Retriever(SR): BM25 Retriever.</p>



<p>•<strong>Baseline:</strong></p>



<p>•Naïve Iterative RaLM: 使用RaLMSeq作为基准，在每个LLM生成4个token后执行检索;</p>



<p>•KNN-LM:对生成的每个token执行检索.</p>



<p>评估结果：</p>



<ol class="wp-block-list">
<li>RaLMSpec对EDR提升效果最显著，OS<sup>3</sup>对ADR，SR的提升作用最大</li>
</ol>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-3-1024x770.png" alt="" class="wp-image-226" style="width:593px;height:auto" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-3-1024x770.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-3-300x226.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-3-768x578.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-3-670x504.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-3.png 1150w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="639" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-4-1024x639.png" alt="" class="wp-image-227" style="width:638px;height:auto" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-4-1024x639.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-4-300x187.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-4-768x479.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-4-670x418.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-4.png 1411w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>2. EDR使用较大步长效果较好，但ADR则需要使用OS<sup>3</sup>。</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="629" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-5-1024x629.png" alt="" class="wp-image-228" style="width:612px;height:auto" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-5-1024x629.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-5-300x184.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-5-768x472.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-5-670x411.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-5.png 1334w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="587" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-6-1024x587.png" alt="" class="wp-image-229" style="width:603px;height:auto" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-6-1024x587.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-6-300x172.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-6-768x440.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-6-670x384.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-6.png 1490w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>3. EDR相较ADR和SR表现较好，在1.70x~1.85x.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="239" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-7-1024x239.png" alt="" class="wp-image-230" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-1024x239.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-300x70.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-768x179.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-1536x358.png 1536w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-2048x478.png 2048w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-670x156.png 670w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure><p>The post <a href="https://blog.nanjihuaji.top/2024/08/02/ralmspec%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb%ef%bc%9a%e4%bd%bf%e7%94%a8speculative%e6%96%b9%e6%b3%95%e5%8a%a0%e9%80%9frag/">RaLMSpec论文导读：使用推测方法加速RAG</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.nanjihuaji.top/2024/08/02/ralmspec%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb%ef%bc%9a%e4%bd%bf%e7%94%a8speculative%e6%96%b9%e6%b3%95%e5%8a%a0%e9%80%9frag/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
