<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>BM25 - tag - 沐木</title><link>https://oldletter.cn/tags/bm25/</link><description>BM25 - tag - 沐木</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sat, 11 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://oldletter.cn/tags/bm25/" rel="self" type="application/rss+xml"/><item><title>知识库工程（一）：从信息检索到 RAG</title><link>https://oldletter.cn/posts/rag-engineering-01-adapter-boundary/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><author>mumu</author><guid>https://oldletter.cn/posts/rag-engineering-01-adapter-boundary/</guid><description><![CDATA[<blockquote>
<p>系列导航：<a href="/posts/rag-engineering-01-adapter-boundary/" rel="">1</a> | <a href="/posts/rag-engineering-02-ingestion-pipeline/" rel="">2</a> | <a href="/posts/rag-engineering-03-retrieval-quality/" rel="">3</a> | <a href="/posts/rag-engineering-04-contract-sse/" rel="">4</a></p></blockquote>
<p>今天谈知识库，常把向量数据库、Embedding 和大模型放在一起。知识库的历史远早于大模型，并且有两条长期并行的技术路线。一条来自专家系统，把事实、规则和推理程序分开；另一条来自信息检索，研究如何从大量文本中找出与查询相关的内容。RAG 延续了第二条路线，同时吸收了第一条路线对“外部知识”的处理方式。</p>
<p>厘清这段历史很重要。向量检索没有废除关键词检索，长上下文也没有消除索引。当前知识库产品中的切片、倒排索引、向量召回、重排和引用，分别来自不同阶段积累的方法。</p>
<h2 id="两条知识库路线在生成模型前已经形成">两条知识库路线在生成模型前已经形成</h2>
<p>早期专家系统把领域知识保存为事实和规则，再由推理引擎执行匹配与演绎。修改知识时可以调整规则库，无需重写推理器。它适合边界清楚、规则稳定的任务，却难以直接容纳大量自然语言文档。规则数量增长后，冲突处理和维护成本也会迅速上升。</p>
<p>信息检索处理的是另一类问题：文档已经存在，系统需要计算查询与文档的相关程度。图书目录依靠人工主题词，数字化文档推动了自动索引。倒排索引、词项权重和相关性排序由此成为搜索系统的基础。企业文档问答沿用的正是这套链路，只在候选文档后增加了生成模型。</p>
<div class="mermaid" id="id-2" data-mermaid-definition="Zmxvd2NoYXJ0IFRECiAgICBBW&#43;S6uuW3peebruW9leS4juinhOWImeW6k10gLS0&#43;IEJb5YCS5o6S57Si5byVXQogICAgQiAtLT4gQ1tURi1JREYg6K&#43;N6aG55p2D6YeNXQogICAgQyAtLT4gRFtCTTI1IOamgueOh&#43;aOkuW6j10KICAgIEQgLS0&#43;IEVb56We57uP6K&#43;t5LmJ5qOA57SiXQogICAgRSAtLT4gRltSQUcg5aKe5by655Sf5oiQXQogICAgRiAtLT4gR1vmt7flkIjmo4DntKLkuI4gQWdlbnRd">flowchart TD
    A[人工目录与规则库] --&gt; B[倒排索引]
    B --&gt; C[TF-IDF 词项权重]
    C --&gt; D[BM25 概率排序]
    D --&gt; E[神经语义检索]
    E --&gt; F[RAG 增强生成]
    F --&gt; G[混合检索与 Agent]</div><h2 id="倒排索引解决候选集规模">倒排索引解决候选集规模</h2>
<p>顺序扫描每篇文档的代价随文档总量增长。倒排索引反过来记录“词出现在哪些文档中”。查询包含“迁移 校验”时，检索器先取得两个词对应的文档列表，再求交集、并集或带权组合。文档频率、词频和位置信息都可以保存在 posting list 中。</p>
<p>倒排索引擅长精确标识符、人名、错误码和专有术语。它也有明显限制：用户搜索“服务无法启动”，文档只写“进程初始化失败”，词面重合可能很少。分词、同义词和查询扩展可以缓解问题，仍无法完整表达句子语义。</p>
<h2 id="tf-idf-给词项分配区分度">TF-IDF 给词项分配区分度</h2>
<p>词频 <code>TF</code> 描述词项 $t$ 在文档 $d$ 中出现的程度，逆文档频率 <code>IDF</code> 降低常见词的权重。一种常见写法是：</p>
<p>$$
\operatorname{tfidf}(t,d)=\operatorname{tf}(t,d)\cdot \log\frac{N}{\operatorname{df}(t)+1}
$$</p>
<p>$N$ 是文档总数，$\operatorname{df}(t)$ 是包含词项 $t$ 的文档数。工程实现会采用对数词频、平滑项和向量归一化等变体，因此不同搜索库给出的分数不能脱离实现直接比较。</p>
<p>将文档与查询表示成词项权重向量后，可以计算余弦相似度：</p>
<p>$$
\cos(q,d)=\frac{q\cdot d}{\lVert q\rVert\lVert d\rVert}
$$</p>
<p>TF-IDF 建立了可计算的相关性模型，但长文档容易因为词出现次数更多而占优。词频的收益也并非线性增长，一个词出现二十次通常不会比出现十次多一倍信息。</p>]]></description></item></channel></rss>