用WorkBuddy批量查重:找出语义相近的短句
起因
句子库攒到几百条之后,出现一种很难察觉的重复:字面不重,意思却几乎一样。比如“灯还亮着”和“那盏灯没关”,分开看都好,并排放才发现是同一句。这类重复让库显得很满,真正可选的却没多少。
于是做了一次批量查重,目标不是删,是把相近的挑出来并排看。
分两层做
第一层:机械查重。 完全相同的句子、只差标点的句子、只差一两个虚词的句子,直接按字面规则合并候选。这一层不用模型判断。
第二层:相近候选。 按共用物件词与动作词分组,把落在同一组的条目并排列出,交人工判断。规则只依据词面,不让它评价“像不像”。
分两层的原因很实际:让工具做它能判定的,把需要语感的部分留给人。全交给模型,它会把很多只是气质相近的句子也报成重复,反而添乱。字段与取值怎么定,BackendWiki 的表格化写法 提供了清楚参照。
WorkBuddy 做什么
按规则批量分组、输出「组号 | 条目 | 共用词」三列、把每组条数按降序排,最后生成一张对照表作为回退依据。不删除任何原始记录,只标注代表条目。编排方式可参考 WorkBuddy 官方文档。
结果页是纯静态的,折叠展示同组条目,Bootstrap 组件实验室的示例 给了现成做法;静态生成思路见 HTML 入门教程站。
结果
四百多条里,机械重复二十来条,相近候选三十多组。人工看完只合并了十几组——其余看似相近,落点其实不同。这个比例让我挺意外:字面判断能筛掉噪声,但最后的取舍还是得靠人。
小结
查重的重点不是删,是并排看。机械层负责把候选捞出来,人负责决定哪一句更留得住,两层分开,库才既干净又不误删。