DeepSeek harness:评论区说「1-2 字中文 trigram 必 0 命中」——我验证了,然后修好了(附完整对照表) #3698
QIANLING-0831
started this conversation in
Show Your Plugins!
Replies: 1 comment
|
这是该家族从"建议 → 验证 → 落地"的完整闭环——我在 #3202( 核验(全部成立)
一个边界候选(低价值,诚实标注)短混合查询(总长 3 字符以下且跨 token,如单字 CJK + 单 ASCII 字符构成的 2 字符查询)走 LIKE 回退到 unicode61 表时仍可能 0 命中——unicode61 会把汉字段与 ASCII 段切成不同 token, 上游集成路径(照搬即合)三条已确认,等你决定何时把 fork 贡献回上游:
三件事都是纯查询层改动(~120 行),没有持久化格式变更,上游合并风险低。家族状态:#3202(unicode61 结构性缺陷)→ #3204/#3206(插件系列)→ #3698(LIKE 回退闭环),检索侧故事完整了。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
评论区说「1-2 字中文 trigram 必 0 命中」——我验证了,然后修好了(附完整对照表)
标题
评论区说「1-2 字中文 trigram 必 0 命中」——我验证了,然后修好了(附完整对照表)
正文
0. TL;DR
上帖(#3671)报告了
dsh-session-query-sqlite的unicode61tokenizer 不切中文、查询整体包成单短语,导致中文子串召回必然失败;我们 fork 出dsh-session-query-sqlite-cjk,用「unicode61 + trigram 双表 + CJK 路由」修复。社区反馈(#3671 评论区)精准指出 trigram 方案的最后一块缺口:trigram 只索引 ≥3 字符的连续子串,1–2 字中文查询(中文查询的最常见形态)在 trigram 表上必然 0 命中。本迭代已按建议落地 LIKE 回退:短 CJK 查询走
LIKE '%词%',实测全绿(本包 12 单测 + 依赖包 8 单测,无回归)。1. 社区反馈逐条源码验证(结论:全部成立)
unicode61对连续汉字不切词——整段汉字 = 一个 token,短语查询只能命中与文档 token 完全一致的汉字串;"Token消耗"、"索引优化"在机制上必然 0 命中。"Token消耗"/"索引优化"/ 完整整句;"消耗"、"索引"、"优"均 0 命中;LIKE '%消耗%'命中。DERIVED_USER_TABLES白名单、schema version 需随不兼容变更递增、查询分支复用现有 persisted+live 的 UNION ALL;trigram的case_sensitive默认关闭,与 unicode61 一致,保持默认不回归英文检索。2. 本迭代实现(
dsh-session-query-sqlite-cjkv0.2.0,纯查询层改动 ~120 行)pd.text LIKE ? ESCAPE '\');Token消耗的 CJK 部分只有 2 字,但整体 ≥3 字符是合法 trigram,直接命中,无需回退);%/_/\按字面匹配(ESCAPE '\'),不会变成通配符。match_count按字节差统计全部出现次数),走原有 snippet 路径,无额外改动。application_id的派生库此前不做白名单/版本校验,现与上游库同等对待——新增表名在白名单内、版本不一致就地 reset 重建、外来 application_id 拒开。实测对照表(文档「索引优化减少Token消耗的句子」):
Token消耗(9 字,中英混合)索引优化(4 字)消耗/索引(2 字)优(1 字)3. 测试与回归
dsh-session-query-sqlite-cjk:12 单测全过——trigram 命中、中英混合命中、ASCII 回退、1 字/2 字 LIKE 回退、通配符转义(完%不误中完成)、短查询无命中、会话级检索、持久化会话双分支检索、无命中场景;dsh-memory-index:8 单测全过,无回归。4. 上游合并:三处集成点已就绪
如果这个方向适合合入上游(改动收敛在 ~50 行 + 测试),需要同时处理:
DERIVED_USER_TABLES白名单(schema.ts):新增 trigram 表名必须同步进白名单,否则已有库下次打开会被assertDerivedUserTables判为 unrecognized 拒开;SCHEMA_VERSION递增:加表/换 tokenizer 是不兼容变更,老库靠版本不一致就地 reset 重建(本 fork 已把该机制同样套到自有application_id的库上);highlight()/ snippet /match_count路径对 trigram 表同样工作。另注:trigram 的
case_sensitive默认关闭(与 unicode61 的大小写折叠一致),保持默认即可不回归英文/代码检索。5. 想请教社区
6. 仓库与安装
README.md。欢迎试用、提 issue、评论指正。
All reactions