向量召回的先决条件
- 你的query 比较明确,越具体越好。 如果是比较泛的问题,比如 xxx公司怎么样? 无论如何都不好召回。
- 这个时候需要好的改写,将问题具体话,比如 从主营产品,估值,细化维度。
- 这个时候需要一个自上而下的 cot 框架,并且框架最好能够细化到具体节点。
- 比如 公司-》主营产品-》产品ABCD。 然后再叶子节点上去召回。
- 只有叶子节点是具体的,对于具体的query,向量召回会有好的结果。
- 海量文本,没有经过清洗的文本,没有标签化,范围不确定,可以使用向量。
如果没有这些先决条件
- 还不如用传统的方法做摘要。
- 同样的问题,xxx公司怎么样。
- 我把公司基本面信息,新闻呢,研报,公告,全部收集起来,做一个摘要。
- 然后喂给大模型,这个方法目前看可能 确定性 更高一些。因为信息是预先处理好的,属于传统标签信息检索+ 大模型。
- 这样可以充分发挥文本预处理过的优势。
- 如果这个时候还使用向量检索就是抛弃了自己的优势。
决策
如果信息是与处理好的高质量数据,标签化的数据,范围是确定性的,在大模型长文本的支持下,优先使用摘要或者标签筛选。
如果海量的未处理的文本,没有标签,或者大模型无法处理超长的文本,则使用向量,或者是海量历史中找部分信息。
具体的例子
如果我想要查询北京的算力政策?
- 拆分各类子问题,召回的效果都不好。或者召回的语义匹配效果不好,有很多其他地区的算力。语义上很难区分我们的 北京这样的限定词,我们需要做后置处理。
- 后面直接使用北京+算力 短词匹配新闻标题,用精确度 trade-off 召回率。
- 或者就是做后处理,召回之后在判断限定词。
混合使用
- 混合使用语义相似+ 强关键词匹配的BM25方法。
- BM25是tf-idf的一个改进版本,tf中,词频无限增长的时候,分数业务无限增加,bm25引入饱和度,比如100个tf之后,增加词频分数不增加。 同时考虑段文本的权重,1/10的段文本得分,可能超过10/100的长文本词频得分。
- 所以召回的时候,可以考虑不同的策略。