sybn sybn-util 项目说明文档 - 基于java的跨数据库联合查询

[笔记]rag知识库笔记

2026-04-14
sybn

简述

本文主要记录对于提高rag相似度的经验. 主要涉及 向量召回(稠密检索), BM25 / 关键词召回(稀疏检索),规则 / 知识图谱召回 三种手段.

前置过滤

我们需要从客户 query 中提取关键词, 在 rag 向量相似度匹配以前, 先在数据库做前置过滤.

比如:

省份, 城市, 区县, 品牌, 地铁线路, 地铁站名称等

使用关键词去数据库 like 可以而框住 rag 的返回值数据范围, 提高知识召回的速度和准确性.

比如:

query: 我想在广东11号线看电影
关键词:  省份:广东 and 地铁:11号线

注意, 某些关键词会同时命中个字段, 此时需要取需要同时取值, 比如:

query: 我想在万达看电影
关键词:  影院:万达 or 地铁站:万达

注意: 部分词有严重歧义, 比如吉林, 有吉林省和吉林市

embedding 向量召回 基础概念

embedding 向量 和 embeddingModel

词(苹果) -> token(15963) -> 词向量(0.1,0.5,0.8...) 
词向量([苹果] 0.1,0.5,0.8...) + 词向量([14] 0.9,0.3,0.6...) ---(多头注意力)---> 句子向量([苹果14] 0.8,0.2.0,7...)

词嵌入模型执行如下步骤

  1. 先将一个句子分词(Tokenize),映射为模型词表对应的 TokenID,例如 苹果 = 15963
  2. 根据模型嵌入权重,将每个 TokenID 查表转换为原始静态词向量
  3. 将整句多个原始词向量,送入多层 Transformer + 多头自注意力做上下文交互迭代,生成带上下文的 Token 向量;再通过均值池化压缩聚合,得到唯一句向量
  4. 任意两段文本的最终向量,通过余弦相似度计算,数值越高语义越相近
  5. 同一款模型(如 all-minilm-l6-v2),不同框架 / 工具会因是否归一化、池化策略、预处理差异,导致相似度绝对值不同;但语义相似度排序结果基本一致
  6. 不同模型 (如 all-minilm-l6-v2, bge-small-zh-v1.5), 相似度值域和排序会有很大差异.

简单的提高BI知识库相似度准确性的手段

  • 知识文本优化

    1. 只有部分字段参数RAG 召回相似度匹配. (比如: 查询案例中 query 参与相似度, sql 不参与计算只参与返回)
    2. 过长的知识会稀释注意力和相似度, 超过 500 个 token 之后的内容不参与向量相似的计算
    3. 统一指标名词、业务术语、同义描述; 避免同一指标多种写法造成向量语义分裂,降低跨问句召回失败率。
    4. 早期测试通过的知识, 后期可能和新知识冲突, 或被新知识淘汰出 topN 召回列表, 需要定期回顾检查
  • 文本向量程化以前程序自动降噪

    目标: 压缩短句, 只提取文本中的核心语义去计算相似度. (只影响相速度评分, 对外不可见)

    原始问题: 帮我查询2026年4月14日的订单总量如何?

    降噪以后: 某日的「订单总量」

    1. 删除无意义的前缀后缀
    2. 删除所有的日期时间及数字值
    3. 给关键字打上引号标记

Similar Posts

Comments

暂不开放评论! 可微信联系