第14章 复现本地 BGE 量化模型实验
上一章证明的是检索与权限状态机可运行。本章单独加入一个真实本地表示模型,观察它能否补回词面基线遗漏的同义查询。模型是可选路径,下载和推理都不参与核心实验,也没有调用大语言模型生成答案。
固定分发物
原模型为 BAAI/bge-small-zh-v1.5,模型卡提交为 7999e1d3359715c523056ef9478215996d62a620;本书下载社区 ONNX 导出 Xenova/bge-small-zh-v1.5,提交为 75c43b069aac4d136ba6bc1122f995fedcfd2781。下载脚本使用后一个固定提交,避免默认分支更新后得到不同文件。
python -m pip install -r lab/requirements-embedding.txt
python -m lab.fetch_embedding脚本依赖 curl,下载后校验模型和 tokenizer 的完整 SHA-256,临时文件通过校验才替换目标。模型文件约二千四百万字节,保存在忽略提交的 .tools/models/bge-small-zh-v1.5/。仓库与实验 ZIP 不分发权重,使用者应同时查看原模型卡的 MIT 声明与社区导出说明。
文件校验不等于证明来源无误,但能固定本书实际使用的分发物。已下载且摘要符合的文件直接复用;不符合的文件不会被默默当成同一个模型。两份完整摘要见来源与实验附录,运行时也会写进报告。
执行推理与评估
BGE_MODEL_DIR=.tools/models/bge-small-zh-v1.5 \
python -m unittest discover -s tests -v
python -m lab.evaluate \
--onnx-model .tools/models/bge-small-zh-v1.5 \
--output /tmp/knowledge-bge-evaluation.json本次实际运行使用 Python 3.12.15、ONNX Runtime 1.31.0、NumPy 2.5.4、tokenizers 0.23.3。推理固定 CPU 执行提供方和单线程设置,采用 CLS 池化与 L2 归一化。二十四条测试全部通过,其中两条确实加载了 ONNX 文件,不是以跳过替代验证。
第一条可选测试检查向量维度五百一十二、数值有限且范数接近一;第二条实际用模型查询同义表达,并验证私有文档与其他租户仍被过滤。模型改善相关性不能成为放松权限顺序的理由。
阅读结果而不是只看满分
观察 q07“旅馆住一夜能花多少钱”:词面结果为空,BGE 向量返回 travel。其余正例在前三篇去重文档中也都找到标注来源,因此当前十条正例的 Recall@3 与 MRR@3 均为一点零。混合模式同样为一点零,没有比向量模式更高。
模型也给部分查询返回更多非首位候选。排名指标达标不代表每个候选都相关,更不代表所有片段都能直接作为答案。演示阈值零点四控制候选进入,不能被解释成百分之四十的正确概率。
本机耗时只描述这次小语料线性扫描与 CPU 推理。报告没有并发压测、吞吐量、模型热启动分布或生产延迟保证。若在其他架构遇到依赖轮子缺失,可以使用兼容环境复现;不要改成词项向量后仍把报告标作真实 BGE 实验。
这一章的价值,是让“使用了嵌入模型”有可追查的权重、推理代码、输入契约和运行证据。接下来把单条成功放回整体评估边界,避免从小样例推出过大的承诺。