向量嵌入与混合检索:超越关键词搜索的语义搜索
传统搜索的致命缺陷
传统电子书阅读器的搜索是纯关键词匹配:你输入"并发修改",它只会找到包含"并发修改"这四个字的段落。但如果你记得作者讲的是"处理同时发生的数据变更",你就搜不到了——这就是词汇错配(vocabulary mismatch)问题。
ReadAny 的语义搜索从根本上解决了这个问题:你搜的是意思,不是字。
向量嵌入是什么
向量嵌入(Vector Embedding)是把文字转换成数字向量的技术。一句话说:
意思相近的文字,转换成向量后在数学空间里也离得近。
例如:
- "处理并发数据变更" 和 "同时发生的数据修改" 会被映射到相近的向量
- "处理并发数据变更" 和 "做饭时同时开两个锅" 会被映射到距离较远的向量
嵌入模型(Embedding Model)就是做这个转换的 AI 模型。ReadAny 支持云端和本地的嵌入模型配置。
混合检索策略
纯向量搜索也有弱点——它可能漏掉精确匹配的专有名词和代码标识符。ReadAny 采用混合检索来平衡:
第一路:BM25 关键词匹配
传统搜索引擎的标准算法,精确匹配你的搜索词。适合找:
- 代码中的变量名、函数名
- 专有名词、产品名
- 精确的引文
第二路:向量相似度匹配
把你的搜索词也转成向量,在向量空间里找最接近的分块。适合找:
- 意思相近但用词不同的段落
- 同义词、近义词覆盖
- 模糊记忆的概念
合并与排序
两路结果用 RRF(Reciprocal Rank Fusion)算法合并,综合排序列出最终结果。这样既不会漏掉精确的代码匹配,也能找到意思接近但用词不同的段落。
嵌入模型的选择
嵌入模型直接决定语义搜索的效果。ReadAny 推荐:
| 模型 | 类型 | 维度 | 特点 |
|---|---|---|---|
| text-embedding-3-small | 云端 | 1536 | OpenAI 官方,质量稳定 |
| nomic-embed-text | 本地(Ollama) | 768 | 开源,中文支持不错 |
| bge-m3 | 本地/云端 | 1024 | 多语言,中文强项 |
| DeepSeek embedding | 云端 | 1024 | 国内访问友好 |
模型维度越高,区分能力越强,但存储和计算成本也越高。对大部分用户来说,384-1024 维就够用了。
向量化过程
向量化发生在两个时机:
- 导入书籍时——如果已配置嵌入模型,导入过程中自动向量化
- 导入后手动触发——如果导入时没配置 AI,后来配好了,可以在书籍设置里点"开始向量化"
向量化过程:
- 一本 300 页的书大约需要几十秒(取决于模型速度)
- 向量化完成后,语义搜索立即生效
- 向量索引存在本地 SQLite 中,不占用额外磁盘空间
搜索结果展示
搜索结果按相关性排序,每条结果显示:
- 匹配到的书籍和章节
- 匹配分块的原文片段(高亮匹配部分)
- 匹配类型标注("关键词匹配" 或 "语义匹配")
点击结果直接跳转到书中对应位置。