兄弟们,最近社区里聊RAG的帖子很多,但很多人还停留在“丢文档-分块-检索”的初级流程。周末我折腾了一轮,发现两个容易被忽略但效果爆炸的点,分享下实测数据。
第一,Chunk Overlap别设成0。我测试了一份200页的PDF,按512 token分块、重叠128 token,vs 无重叠,召回率(Recall@5)从72%跳到87%。原因是上下文割裂导致实体丢失,比如“Transformer模型”被拆成“Transformer”和“模型”,重叠后实体完整度暴涨。建议重叠比例控制在20-30%,别超过256 token,否则检索延迟会翻倍。
第二,别只靠向量搜索。纯Embedding检索对高频词、专有名词(如“Llama 3.1”)有时不如BM25。我搭了个Hybrid Search(权重0.6向量+0.4关键词),用RRF(Reciprocal Rank Fusion)排序,在medical QA数据集上top-1精确度从68%提到83%。具体实现可以用LangChain的EnsembleRetriever,几行代码搞定。
踩坑:别信“大模型能自动修正检索错误”的鬼话。我用GPT-4试过一次,检索结果差时,答非所问率高达40%。所以,优先把检索精度做上去,生成模型只是锦上添花。
实战建议:先跑一次评估,推荐用RAGAS框架算Faithfulness和Context Relevancy,再针对性调参。有兴趣的兄弟,可以贴自己的分块策略聊聊。 |