跳转至

【RAG】如何炼成强大的向量召回模型

Ch01.1288 【RAG】如何炼成强大的向量召回模型

📊 Level ⭐⭐ | 4.1KB | entities/rag如何炼成强大的向量召回模型.md

【RAG】如何炼成强大的向量召回模型

来源: 炼钢AI

发布日期: 2024-10-08

原文链接: https://mp.weixin.qq.com/s/pUE6XRTmbp-xjuBwdnh7OA


和朋友一起写的新书《大模型RAG实战》最近出版啦,这是市面上第一本专门讲解RAG的书籍。关注公众号“炼钢AI”,回复“RAG”获得抽奖链接,抽取1~3位幸运读者送书,ddl:10.13 23:00。

本文在2023年10月首发于我的zhihu帐号:战士金。内容略有修改。

1

前言

对用户提的问题,向量化之后,从向量数据库里召回和用户问题相似的文档片段,是提高大模型回答质量的有效手段(也叫检索增强生成,RAG)。优化向量化模型的效果可进一步提高大模型的回答效果。在通用向量化模型中,baai的bge模型不管是在中文还是英文榜单上,效果都处于遥遥领先的地位。bge1用到的特殊预训练方式、难例挖掘等手段还算是比较常规,bge2文章里的LLM辅助生成软标签、稳定蒸馏等手段就算做的比较深入了。本篇文章里的内容大部分出自于bge的这两篇文章,也会贴上一些自己看过的相关论文以及个人观点。本文主要关注向量化召回模型效果优化的手段,bge原论文里关于他们新提出的训练集、评估基准等内容就不介绍了。

bge1:项目地址:https://github.com/FlagOpen/FlagEmbedding/tree/master技术报告地址:https://arxiv.org/pdf/2309.07597.pdfbge2:项目地址:https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_embedder技术报告地址:Retrieve Anything To Augment Large Language Models

2

带有prompt的向量化召回

在大模型微调这块,有个hard prompt tuning的方式,在进行多任务微调的时候,给不同的任务的input前边都加入固定模式的文字,让模型学会,看到某一段文字之后,就知道要做什么任务了,有助于提高下游不同任务的效果。举一反三,都是语言模型,当然也可以在向量化模型上用这个trick了。即做不同的任务时,分别给不同任务的query和key加上不同的prompt之后在做向量化。我发现的最早的两篇相关文章如下,都是22年的,不知道是偶然撞idea了,还是借鉴了。。

《One Embedder, Any Task: Instruction-Finetuned Text Embeddings 》《Task-aware Retrieval with Instructions》

bge1做向量化召回时候只将召回任务分成两类:对称检索(相似句匹配)和非对称检索(QA匹配)(不明白对称/非对称检索的可以参考我的这篇文章)。如果做是QA匹配,需要在Q进行向量化时候,加入前缀:“为这个句子生成表示以用于检索相关文章:”。

bge2更是将带有prompt的向量化召回进一步发扬光大,细化成了6大类任务(这块还挺有意思的,有些应用场景之前并没有想到):

1.知识增强场景(qa):最直观能想到的场景,我们使用外挂知识库或者说检索增强生成(RAG)给大模型提供额外的知识。query为用户问题,key为包含知识点的文档片段。

2.In-context Learning场景(icl):few shot场

原文存档


关联