资产检索 & 向量原理 大白话笔记

> 一份给非算法同学看的速查笔记。把"检索怎么工作、向量是什么、模型怎么学会的、图文怎么对齐"用大白话串起来,方便以后回看。


0. 一句话总览

系统先把所有**文字和图片都变成"坐标点"**存好;你一搜,就同时用"按意思找"(语义/向量)和"按字面找"(关键词/BM25)两条腿捞出候选,合并、过滤后,再请一个更较真的模型把前几十条**精排**一遍,最后给你排好序。


1. 一次检索发生了什么

**先做一次性的"建索引"(离线)**:把每个资产的文字喂给文本模型,算出向量存进数据库;有图的再用图像模型算出图像向量存好。这样查询时不用现算。

**你点"开始匹配"后,4 步:**

  1. **两路并行召回** ------ 同一个搜索词,分两条腿找:
  • **语义路(向量)**:搜索词转成向量,和库里资产向量比"远近",按意思找。

  • **关键词路(BM25)**:搜索词分词后,按字面命中+词频找("女王""中世纪"这种确切词)。

  1. **RRF 融合**:两条腿各给一个排名,用 RRF 把两个排名合成一个总排名(只看名次、不管两边分数单位,避免谁压谁)。

  2. **阈值过滤**:把相似度校准到 0--99,低于"最低相似度"滑块的丢掉(默认 25)。

  3. **重排(精排)**:对前 50 条,用交叉编码器把搜索词和每条资产**放一起逐条较真**,重新排序 ------ 就是卡片上的「重排相关度」。

最后卡片上的「匹配度」= 整套跑完的**综合最终分**;「语义 / 命中词 / 重排」是告诉你这条**为什么**能排上来。

> 以图搜图、"找相似"走的是图像向量那套(CLIP)。


2. 向量到底是什么

**向量就是一个定长的小数数组,代表一个"坐标"。** 把一段文字/一张图在一个高维空间里标成一个点。

本系统文本模型输出 **512 个数字**的数组(换 bge-m3 是 1024 个)。长这样:

```

「国王」→ 0.013, -0.082, 0.105, 0.041, ... , 0.022 (一共 512 个)

```

要点:

  • **每个数字单独看没意义**,有意义的是整串数字合起来的"位置"。

  • 数字通常很小、在 -1~1 之间(模型把整条向量缩放成"长度 1",方便比较)。

  • 存数据库时就是这 512 个 float 打包成的一段二进制。

**核心性质:意思越像,点越近。** 判断两段文字像不像 = 把两条向量对应位置相乘再相加(叫**余弦相似度**),得到 0~1 的数,越接近 1 越像。卡片上「语义相似度 54%」就是这么来的。

**玩具示例**(真实是 512 个数,道理一样):

```

国王 = 0.90, 0.80, 0.10, 0.00

女王 = 0.85, 0.82, 0.05, 0.10 → 和国王相似度 0.995(几乎一样)

猫 = 0.00, 0.10, 0.90, 0.80 → 和国王相似度 0.116(差很远)

```

国王和女王"前两个数大、后两个小",排布一致 → 判为像;猫反过来 → 判为不像。


3. 语义 vs 字面

  • **字面匹配**:一个字一个字对得上。文本里出现"霓虹"才算命中。搜"未来都市夜景"就抓不到。

  • **语义匹配**:**意思**对得上就行,哪怕用词完全不同。搜"未来都市夜景",能找到标着"赛博朋克 霓虹 雨夜"的资产。

语义靠的就是向量------模型把"意思"编码进了坐标。**语义 = 基于意思、而非字面的匹配。**


4. 两种向量,别混

| | 文本向量 | 图像向量 |

|---|---|---|

| 模型 | bge(可换 bge-m3) | CLIP |

| 给谁用 | 文字 | 图片 |

| 怎么训练 | 纯文字"填空",没图片 | 图+文配对 |

| 用在哪 | 文字检索 | 以图搜图 / 找相似 |

文字检索走 bge(文字地图),以图搜图走 CLIP(图文同一张地图),两套各管一摊。


5. 模型怎么"学会"意思

核心一句话:**一个词什么意思,看它平时跟哪些词一起出现就知道了。**

「国王」总和王位、加冕、统治一起出现;「猫」总和喵、抓老鼠一起出现。**出现的场合像,意思就像。**

**怎么练出来的 ------ 做海量填空题:** 把句子挖空一个词让它猜(「____ 坐在王位上」),猜错就被纠正,做**几十亿遍**。为了猜得准,它必须给每个词安排一个"座位"(坐标),还得让**意思相近的词坐得近**(因为它们能填进同一个空)。练得越多,这张"座位表"(语义地图)就越准。

像小孩学说话:没人给他背字典,但听多了自然知道"开心≈高兴"、"开心≠桌子"------靠的全是词出现的场合。


6. 一段文字怎么变成向量

  1. **切词**:「国王坐在王位上」→ `国王 / 坐 / 在 / 王位 / 上`。

  2. **查初始表**:每个词先查一张固定表,拿到起始数字(出厂坐标,还没看上下文)。

  3. **层层加工 + 看上下文(核心)**:进入模型主体,一层层往上走。每一层每个词都会**扫一眼整句其他词**,按相关程度把别人的信息揉进自己的数字里(这叫"注意力")。所以"王"在"国王"和"王八"里出来的数字完全不同。

  4. **汇总 + 归一化**:把整句数字合并成一条(512 个),缩放成长度 1 → 最终向量。

每一步的"加工"本质就是:**输入数字 × 一大堆权重,再相加,再压一下**。这些权重就是填空训练**拧好的几亿个旋钮**。没有任何人写过"如果是国王就输出 0.9"这种规则,全是数字乘加。


7. 以图搜图:CLIP 怎么把图和文对齐

7.1 两套编码器,为什么"分开"

图片原料是**像素**、文字原料是**字符**,完全不同。读像素的机器喂不进文字,反之亦然。所以必须有**两台专门的机器**:一台把像素变向量、一台把文字变向量。

"分开"不是不关联,而是**处理时各走一台机器**。它们瞄准**同一个目标**:让"配对的图和文"各自吐出的向量**落到同一个点**。

为什么用的时候也要分开?因为搜索时你手里通常只有一样------上传一张图(没文字)或打一句话(没图)。两台机器各自能独立出向量,你才能只用图、或只用文去搜。

7.2 对比学习:配对矩阵

训练数据是海量"图+配文"**配好对**的(网上图片+它的说明文字,几亿对)。把一批图当行、一批文当列,交叉成表格,每格 = 拿这行的图配这列的文算相似度:

```

文A「城堡」 文B「夜街」 文C「雪山」

图1(城堡) ✓ 拉近 推远 推远

图2(夜街) 推远 ✓ 拉近 推远

图3(雪山) 推远 推远 ✓ 拉近

```

**对角线(图配对自己的文)→ 要像;其余 → 要不像。** 这种练法叫**对比学习**。

7.3 怎么"拉到同一个点"

不是一次拉到位,而是**每次只拧一丢丢、反复亿万次,两台机器一起往中间靠**:

  1. 两台机器旋钮一开始乱设,配对的图文离得老远。

  2. 算一下差多远(**误差**)。

  3. 用微积分(求导)反推**每个旋钮该往哪拧**能让误差变小(这叫**反向传播**)。

  4. 两台机器各拧一小步(**梯度下降**)。

  5. 换下一对,重复几亿次。

像**蒙眼下山**:感觉哪边最往下就挪一小步,反复挪到谷底(误差最小)。

7.4 没有"裁判模型"

容易以为有个聪明裁判在评判,其实那个"裁判"就是**一道算术题**:

  • **答案是现成的**------图文本来就配好对(数据自带),不用谁判断对错。

  • **"判卷"只是一个固定公式**(损失函数),算一个误差数。

  • **"纠偏"是微积分自动算的**(反向传播),不是另一个模型。

> 你见过的会"较真"的**重排模型**是**搜索时**用的,跟训练里的"判卷"是两回事,别混。

7.5 为什么新图不用重新训练也能搜到

训练用几亿对各不相同的图文,靠死记记不下,逼出的是**通用规律**。所以来一张**没见过**的新猫图,图机器也能把它放到"猫"附近------你库里新导入的图,不重训也能被搜到。


8. 术语三层:结构 / 方法 / 任务

这三层独立、可自由组合,别串:

| 层 | 管什么 | 这套用的 | 其他例子 |

|---|---|---|---|

| **结构** | 机器怎么搭 | **Transformer** | CNN;RNN(老式,**不是这套**) |

| **方法** | 机器怎么学 | **反向传播 + 梯度下降**(=你说的"反馈纠偏") | 几乎所有网络都用这套 |

| **任务** | 拿数据学什么 | **对比学习**(图文配对,CLIP)/ 填空(bge 文本) | 分类、翻译... |

记忆口诀:**结构=怎么搭、方法=怎么学、任务=学什么。** 比如 "Transformer + 反向传播 + 对比学习" 拼起来就是 CLIP。

常见误区:把"反向传播/配对数据"误叫成 RNN。RNN 只是**结构**层的一种(而且不是这套用的),跟"反馈纠偏(方法)"和"配对数据(任务)"是不同层面的事。


9. 名词速查表

| 名词 | 大白话 |

|---|---|

| 向量 / Embedding | 把文字或图片变成的一串坐标数字 |

| 余弦相似度 | 量两条向量像不像,0~1,越大越像 |

| 语义检索 | 按"意思"找(用向量) |

| BM25 / 关键词检索 | 按"字面词"找,带词频权重 |

| 分词(jieba) | 把中文句子切成词 |

| RRF | 把两路排名公平合成一个总排名 |

| 重排 / Reranker | 搜索时对前几十条逐条较真、重新排序 |

| Transformer | 现在主流的网络结构(机器怎么搭) |

| 反向传播 + 梯度下降 | 训练方法(机器怎么学、自动纠偏) |

| 对比学习 | 用"配对的拉近、不配对的推远"来训练 |

| bge / CLIP | 本系统的文本模型 / 图像模型 |


10. 本系统的具体配置 & 卡片上的百分比

**检索链路**:bge-small-zh 文本向量(query 加检索指令前缀)+ jieba+BM25 关键词 → RRF 融合 → 校准分阈值过滤 → bge-reranker 交叉编码器重排。以图搜图=CLIP 图像向量(+必要时 Kimi 把图转文字补一刀)。

**卡片上的几个百分比**:

  • **匹配度**:整套流程跑完的综合最终分(卡片底部那条)。

  • **语义 X%**:只是其中一路------文本向量的余弦相似度。

  • **命中词**:BM25 关键词路命中了哪些词。

  • **重排 X%**:交叉编码器逐条较真后的相关度(最能反映贴不贴题)。

  • **完整 X%**:资料完整度,和"匹配度"是两回事,别混。


11. 一图流(心智模型)

```

你的搜索词

├─ 语义路(bge向量·按意思) ─┐

│ ├─ RRF合并排名 ─ 阈值过滤 ─ 重排精排 ─ 结果

└─ 关键词路(BM25·按字面) ──┘

```

整条线闭环:填空/对比训练拧好权重 → 权重决定文字/图片怎么变成向量 → 向量远近代表意思像不像 → 检索就是在向量里找离你最近的点 → 再用重排把头部排得更准。