今天是2024年12月24日,星期二,北京,天气晴。
我们今天来看看近期的RAG进展,有个工作标题取得很有趣,《Don't Do RAG: When Cache-Augmented Generation is All You Need for Knowledge Tasks》,本质上就是kv-cache做缓存;另一个,我们来回归到业务应用,看看大模型用于推荐的一些技术总结。
关注技术,并关注应用落地,把技术学扎实,总会有更多的收获。
供各位参考,多思考,多总结,多实践;
一、大模型用于推荐LLMERS技术总结
关于大模型用于推荐这个话题很有趣。传统推荐系统主要依赖协同信号,而LLM则具备强大的语义理解和推理能力,但其推理延迟较高,难以满足实时应用的需求,如当前推荐系统这块的探索趋势:
所以,这个事情要做好,其实有很多难点需要考虑。例如,如何在避免LLM推理延迟的情况下,利用其语义理解和推理能力来增强推荐系统的性能;如何在数据稀疏性问题上取得突破;如何在模型层面有效整合LLM的能力。
其实陆陆续续已经有两个多个总结工作了,相应的技术可以看如下的方案总结:
当然,也有一些对应的数据集:
但也可以进行进一步的总结,来看看最近的工作,《Large Language Model Enhanced Recommender Systems: Taxonomy, Trend, Application and Future》,(https://arxiv.org/pdf/2412.13432),总结了三种主要的增强方案。
1、知识增强
利用LLM的推理能力和世界知识生成用户或项目的文本描述,作为额外的特征来补充推荐系统的知识和理解能力。该方法进一步分为无结构摘要文本、结构化知识图谱以及两者的结合。
例如,可以使用无结构摘要文本,使用LLM对项目特征或用户偏好进行总结,并将这些总结文本编码为特征(例如,通过提示LLM“给看过<浏览历史>的用户解释他或她感兴趣的内容”);
也可以使用结构化知识图谱,利用LLM生成或增强现有的知识图谱,并将其作为补充特征(例如,LLMRG通过提示LLM生成可能的交互序列,并过滤掉不合逻辑的序列来生成交互图)。
也可以将知识图谱与LLM生成的摘要文本结合,以提供更丰富的特征(例如,KELLMRec通过结合知识图谱和摘要文本来避免从LLM获取摘要文本时的幻觉问题)。
2、交互增强
通过数据增强生成新的用户-项目交互,以解决数据稀疏性问题。该方法分为基于文本的和基于评分的两种类型。
其中,基于文本的方案,让LLM生成伪交互项目的名称,并将其添加到训练数据中(例如,ONCE通过提示LLM根据用户的历史记录推荐新闻,并将生成的新闻作为增强交互添加到数据集中)。
基于评分的方案让LLM计算用户和项目之间的相似度,生成新的交互项目(例如,LLM-InS通过计算用户和项目嵌入之间的相似度来生成增强项目)。
3、模型增强
将LLM的强大语义能力注入传统的推荐模型中,主要通过模型初始化、模型蒸馏、嵌入利用和嵌入指导等方法实现。
其中,模型初始化利用LLM预训练的权重初始化推荐模型的嵌入层或整个模型(例如,CTRL通过对比任务对齐LLM和传统推荐模型的表示,并用对齐过程中更新的参数初始化整个传统推荐模型);
模型蒸馏通过知识蒸馏技术将LLM的知识转移到小型推荐模型中(例如,LEADER通过将LLM的最终层隐藏状态与可训练的适配器进行蒸馏来转移知识);
嵌入利用使用LLM生成的嵌入来增强推荐模型的嵌入层(例如,LLM-CF通过设计数据混合方法微调LLM以提高推荐能力,然后利用LLM生成的Chain-of-Thought推理来增强用户偏好);
嵌入指导利用LLM嵌入作为训练或参数合成的指导(例如,LLM4SBR通过识别代表性项目来增强基于会话的推荐模型的短期和长期偏好)。
不过,上面所讲述的,更多的是方法论,尽管LLMERS在多个方面表现出色,但在处理用户历史交互的长文本提示时仍面临长度限制和理解困难的问题。也依旧有很多工作需要做,例如更多推荐任务、多模态推荐系统、用户侧增强、可解释性和开发综合性的基准测试。
二、缓存增强生成(CAG)实现思路
RAG进展,这个工作有点意思,一种新的缓存增强生成(CAG)方法,以替代传统的检索增强生成(RAG)方法。RAG方法虽然能够动态集成外部知识源,但存在检索延迟、文档选择错误和系统复杂性增加等问题。
《Don't Do RAG: When Cache-Augmented Generation is All You Need for Knowledge Tasks》(https://arxiv.org/pdf/2412.15605),但依旧是走kVcache路线。
其实现步骤如下:
首先,外部知识预加载,将与目标应用相关的文档集合预处理并格式化,以适应模型的扩展上下文窗口。然后,使用LLM处理这些文档,将其转换为预计算的键值(KV)缓存:
其中,D 是文档集合,KV−Encode是将文档转换为键值缓存的过程。
其次,进行推理过程。在推理过程中,预计算的KV缓存CKV与用户查询Q一起加载。LLM利用这个缓存的上下文来生成恢复:
其中,M是LLM模型,Q是用户查询,R是生成的响应。
最后,缓存重。为了在多个推理会话中保持系统性能,内存中的KV缓存可以有效地重置。随着新token依次追加,缓存以追加的方式增长,重置涉及截断这些新token:
最后看下提升效果:
看过memorag的朋友都知道,这个就是一个思路,但如果涉及到的文档很大时,事先构造的kv-cache其实很大。
总结
本文主要跟进了下最近关于大模型用于推荐以及RAG的进展,前者提到的思路大家可以多看看,作为指引。后者呢,不是很新的工作,但代表了一种趋势。
参考文献
1、https://arxiv.org/pdf/2412.13432
2、https://arxiv.org/pdf/2412.15605
关于我们
老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。
加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入