不调模型也能先测检索:怎样给中文小语料做一个字符 TF-IDF 基线

2026-10-24

不用接向量服务,也可以先对中文小语料建立字符二元、三元片段的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 本地搜索工具一段含引号的原话,怎样按字面短语搜索而不触发查询语法。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。

加微信,把这一页存到手机上

扫码加站长企业微信,会自动把这一页的链接发给你,方便在手机上接着看。AI 落地卡住了,也可以直接问。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。