关于垂类场景下RAG 的思考
写在前面
今天这篇文章不是分享某个技术点也不是分享论文,而是笔者抛砖引玉的提出一些垂类下关于RAG 的瓶颈和一些思考,然后广发英雄帖,感兴趣的读者都可以加入进来一起研究(仅限于技术)。
问题描述
先举个例子简单的说明一下我的问题。有三个学生A、B、C同时参加开卷考试
A:在考试前对教材进行了学习和理解,并在考试过程中进行翻书回答
B:考前抖脚,考试时才找来教材,进行翻书回答
C:虽说开卷,但C 感觉凭借自己的知识积累,于是挑战了闭卷
有一个前提条件,ABC三位学生都同时参与了基础课程,也就是说具备了一定的知识积累。在这里, 我们先不对这三者的选择进行评价,而是把当前QA 的实现方案带入进去,会发现一些挺有趣的地方。
C:就是通用大模型回答所有问题。
B:就是当前RAG 的方式
A:finetuing + RAG ?
笔者比较倾向于A 的方式,那么能不能实现,是所有场景都能做到,还是指定场景,那么又该怎么实现?带着这些问题,我们思考一下。
首先,我们先从一个场景入手来探索这个问题,比如:法律。
数据准备:在法律场景下,我们可以拿到所有的法律条款,和一些过往的判例。
产品功能:1. 支持法条的提问;2. 支持过往案例(包括相似案例)的提问;3. 支持新案例的推理提问?
第一个和第二个问题现在都有解决方案,比如:混合索引。那第三个问题该如何解呢,thought ? Cot ? finetuning ? 训练一个专有模型?笔者提醒一下当下业界选择RAG 的最大原因是什么,很大一部分原因是能更好的约束模型,对幻觉进行很大程度的缓解。而脱离了RAG ,当前的技术方案在幻觉缓解上又能做到什么程度呢?大家可以参考过往的论文和一些实际的工程经验。我想当前的技术方案无论哪一种在模型约束这一块都不及RAG。
而RAG 当前最大的问题是什么?笔者觉得是R 和 G 的割离,参考前面的学生例子A,如果我们能在检索之前对知识点进行学习理解,去指导检索器应该从哪方面去查找,是不是能解决当下的很多问题?比如:花里胡哨的各路检索策略?、花里胡哨的各路query扩展和排序策略?、 l o st middle(因为查询到的都是相关的)?当然这是最理想的情况,实际中这个过程可能会持续迭代,比如在实现初期,作为多路召回的一路。总之办法总比问题多。
笔者先举几个实际工程中的例子吧。比如:法律场景笔者瞎编一个案例,张三走在路上,突然大叫一声,把旁边的老大爷吓的晕倒在地,请问这种情况张三犯法嘛,犯了什么法?当前的检索逻辑能召回什么法条?那如果要改进,该怎么办?笔者思考的是,在检索前让模型先分析案例,提出可能的法条方向,然后告诉检索器进行检索,是不是比瞎蒙的情况要更好?
进一步思考,那么这个检索前的模型(暂且称之为检索指导模型)应该做到哪些点?笔者思考的是,应该对知识点有充分的理解能力,试想我们人是怎么理解知识和应用知识的。首先,凭借理解能力对知识点进行理解,再借助一些练习融会贯通,最后用到实际中。那么模型该如何实现?最直观的想法是对模型进行知识注入,笔者搜了这方面过往的论文,正在进行初步尝试中….
写在后面
以上就是笔者最近在折腾的问题和思考的方向,现广发英雄帖建立讨论群,如果读者也感兴趣,可以后台联系笔者(仅限技术,其他人员勿扰)。
最后,请大家动动小手,码字不易,点个赞。