不调模型也能先测检索:怎样给中文小语料做一个字符 TF-IDF 基线
不用接向量服务,也可以先对中文小语料建立字符二元、三元片段的TF-IDF基线,再按余弦得分返回有字面交集的文档。它适合检查编号与原词检索,但不会凭空理解完全没有共同片段的同义改写。
先准备少而明确的语料
附件只有三篇合成记录,分别讲订单ZX204交付、退货编号和账户验证码。查询“ZX204 交付”应优先找到第一篇,人工预期在接入检索器之前就已经写好。不要从模型返回的答案反过来决定哪篇文档算相关。保留固定doc_id,使后续增加语料、切分方式或模型时,还能比较同一个查询找到了什么。
用字符片段避开分词依赖
脚本使用char分析器与二至三字符片段,对文档建立TF-IDF矩阵,再把查询变换到同一词表。余弦比较的是加权向量方向,语料中越普遍的片段通常区分度越低。这个基线没有额外中文词典,适合小数据检查,仍会受空格、大小写归一与标点影响。查询端必须复用文档端已经拟合的词表,不能各自拟合后直接比较列。
把命中理由也交出来
results.json除前三条正分结果外,保存最高命中文档与查询共同片段的贡献,例如ZX204中的字符组合与“交付”。results.html可以直接打开查看,不需要API Key。示例第一问只返回真正有正得分的文档,第二问“注销身份”没有共同片段,明确显示no_literal_overlap。不要为了凑齐前三条,把零分文档也显示成“高相关候选”。
失败结果帮助决定下一步
空查询由边界命令演示,也应该返回没有可用字面信号。相反,“取消账号”可能与登录记录在业务上相关,却未必有足够共同片段;这是基线的能力边界,不是把阈值降到零就能修复。先记录这些遗漏类型,再考虑同义词、规范化或语义向量方案,并继续保留原基线作对照。该包只检索本地合成语料,没有调用嵌入模型;一个编号成功命中不能外推为知识库整体检索率。
扩展语料前先保存这两条查询作为回归样本,再加入带同音字、产品短号或繁简差异的例子。基线得分会随词表与文档频率变化,不能把旧语料里的某个分数阈值原封不动搬到更大的语料;优先检查排序和未命中原因。
下载与复现
下载完整样例包,解压到一个新文件夹;也可查看全部文件清单和主脚本。使用Python 3.10或更新版本,在解压目录运行。依赖写在安装清单,建议在自己创建的虚拟环境安装。
python -m pip install -r requirements.txt
python -B run.py
python -B run.py --negative
先查看主要结果,再修改输入重跑;已有输入会保留,结果写回同目录。边界命令可能故意非零退出,也可能输出明确的不适用状态,按正文说明判断,不把所有非零退出都当成安装故障。
依据与延伸阅读
资料核对日期为2026年10月24日。一手资料1:文本特征提取支持字符ngram与TF-IDF词表变换。
相关参考2:cosine_similarity按归一化点积比较向量方向。
继续阅读:混合检索怎么配:向量加关键词不是简单相加;检索前五条都在重复同一段,怎样用 MMR 留出互补材料的位置;给 AI 本地搜索工具一段含引号的原话,怎样按字面短语搜索而不触发查询语法。
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。