AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


RAG、ROG、RCG傻傻分不清?概念辨识及RCG在SimplyRetrieve中的naive实现
发布日期:2024-06-28 21:25:11 浏览次数: 2007 来源:老刘说NLP


今天是2024年6月28日,6月最后一个工作日,星期五,北京,天气晴。

最近出现了很多新词,与RAG相关。

今天,我们来看2个问题,一个关于RAG,ROG,RCG到底是什么?目前流行造词,很多词语的概念,我们都并不清楚,可以来看看;另一个就是,既然RCG被宣称的那么清晰好用,那么对应的具体实现是什么?

造词不断,但我们更需要思考这背后的意义是什么?真的有助于技术发展?还是只是为了差异化?或者只是为了宣传?还是其他?

供大家一起参考并思考。

问题1:RAG,ROG,RCG到底是什么?

最近看到一个工作,里面提到RAG,ROG,RCG不同的概念,其实并不怎么理解。

文章 《Knowledge Retrieval Takes Center Stage,GenAI Architecture Shifting from RAG Toward Interpretive Retrieval-Centric Generation (RCG) Models》 ( https://medium.com/towards-data-science/knowledge-retrieval-takes-center-stage-183be733c6e8),提到了RCG的概念。

而进一步回溯,又找到了 《SimplyRetrieve: A Private and Lightweight Retrieval-Centric Generative AI Tool》 (https://arxiv.org/pdf/2308.03983v1,https://github.com/RCGAI/SimplyRetrieve),读了一下,其还提出了一个SimplyRetrieve的框架,跟一般的RAG没多大差别:

其对RAG、ROG、RCG三者区分如下:

RAG (Retrieval-Augmented Generation):检索增强型生成。这是一种方法,通过将外部数据源整合到大型语言模型(LLMs)中,来增强模型的能力。它使用稀疏或密集的检索器来实现,允许使用私有数据而不需要重新训练或微调语言模型;

ROG (Retrieval-OFF Generation):检索关闭型生成。在这种方法中,检索器被完全禁用,语言模型仅依赖其自身的知识库来生成响应;

RCG (Retrieval-Centric Generation):检索中心型生成。区分了大型语言模型(LLMs)和检索器在上下文解释和知识记忆方面的角色。通过将上下文解释与知识记忆分开,这种方法可能提高生成AI系统的性能和可解释性。RCG方法强调了检索器在知识记忆方面的重要性,并将上下文解释的任务更多地交给了语言模型。【这种解释其实也含糊不清】

而进一步的,对RAG与RCG两者进行对比,如下【实际上是一堆概念】:

1、角色分离

RAG:在RAG方法中,语言模型和检索器之间的角色分离不如RCG明确。RAG允许语言模型更自由地结合其内在知识和检索到的知识来生成文本。

RCG:RCG方法强调在语言模型和检索器之间进行明确的角色分离。语言模型主要负责上下文解释,而检索器负责知识记忆和提供相关信息。

2、知识整合方式

RAG:RAG可能会将检索到的知识与语言模型的内在知识更紧密地结合,这可能导致生成的文本中包含混合的信息源。

RCG:RCG则更倾向于使用检索到的知识作为生成文本的主要信息源,语言模型使用这些信息来生成回答,从而保持了知识的清晰来源。

3、生成文本的准确性和可靠性

RAG:由于RAG在生成文本时可能会混合使用检索到的知识与模型的内在知识,这可能导致在某些情况下生成的信息不够准确或出现“幻觉”(hallucinations)。

RCG:RCG通过明确区分上下文解释和知识记忆,有助于减少这种风险,因为它限制了语言模型生成的范围,更多地依赖于检索到的确切信息。

其实,更直白的就是:RAG中会混用外部检索到的上下文以及大模型内部的知识,而RCG完全使用外部检索的上下文。

问题2:RCG在SimplyRetrieve中又是如何实现的?

但实际上,我们在进行RAG落地时,其实就是想让大模型完全按照给定的上下文进行回答,也就是将大模型完全当成一个MRC阅读理解模型(machine reading comprehension),但这一点很难做到,因为大模型总会跳出其中的指令,除非指令微调方面做的十分好。其实更多时候,更现实的方法是,就是后接一个T5生成模型【小模型】进行文档生成。

也就是说,基于大模型来做RCG,其实很难实现,很难从技术上将RCG方法中所提到的在语言模型和检索器之间进行明确的角色分离进行实现,模型内部的参数化知识本身就很难与外部知识进行解耦,例如,https://github.com/RCGAI/SimplyRetrieve/blob/main/chat/retrieval/retrieve.py中,以一种十分滑稽的方法来实现文档权重的分配:

那么,这个又是如何具体实现的呢?该工作仅仅使用prompt进行简单区分(实际上是很天真做法):

for RCG, we employ a retrieval suffix prompt that reads “answer the following question with the provided knowledge.” ,除此之外,还包括一些其他的prompt模板,例如:

对于RAG,则使用:

For RAG, we use a less constraining prompt that reads “answer the follow- ing question. You may use the provided knowledge.”

对于ROG,则不采用检索,直接让大模型进行回答。

但,这些prompt,可行性和泛化性,在真实落地中,实际上是很难奏效的

总结

今天我们主要看了一个问题,一个关于RAG,ROG,RCG到底是什么?目前流行造词,很多词语的概念,我们都并不清楚,可以来看看;另一个就是,既然RCG被宣称的那么好用,那么对应的具体实现是什么?

这两个问题都很实际,大家可以多关注。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询