三千条客服投诉记录导出来,准备按诉求分类。读了几百条就发现,同一个问题被不同的人用不同的话说了几十遍,快递三天没动静,物流一直不更新,下单一周了还没发货。要统计有多少种诉求、每种诉求有多少人提,得先把说的是同一件事的记录归到一起,每组留一条代表,再记下这一组有多少条。
TATOOLS 的【重复内容合并】专门做这件事。【上传文档】以后,TATOOLS 按意思两两比较每一条内容,把高度接近的归成一组,每组挑出和其余各条都最接近的一条作为保留项,其余标记为并入它,产出一份逐条的合并方案,写明哪条留下,哪些并进去,每组多少条,组内相似度多高,以及照此合并后总条数会减少多少。
合并只给出方案,原文一个字都不改,也不删除。这篇教程讲判定重复的阈值和严格度,相似的内容怎样连成组,保留哪一条、为什么是它,合并方案怎样读、怎样用,最后讲论文里的写法。
01
合并要解决什么问题
在数据管理领域,把指向同一对象的多条记录找出来合并,叫重复记录检测或记录链接。Fellegi 和 Sunter 1969 年为它建立了统计框架,给每一对记录打一个相似度分数,高于上限的判为匹配,低于下限的判为不匹配,中间的交给人工复核。Elmagarmid、Ipeirotis 和 Verykios 2007 年的综述把此后几十年的方法归纳为两步,先判断两条记录是否重复,再把重复关系汇总成组。
文本材料里的重复比数据库记录更难认,同一个意思可以有很多种说法。TATOOLS 的【重复内容合并】用语义向量的余弦相似度判断两条内容是否重复,再把重复关系汇总成组,每组指定一条保留项。它和【文本相似度去重雷达】用的是同一套语义比对,区别在于这里的产出是一份可以直接执行的合并方案。
合并还有一层用处。每组的条数本身就是一个重要的数,问卷里一条诉求有 30 个人用不同的话说了一遍,合并以后留下一条代表,同时记下 30 这个数,分析时这条诉求的分量就不会被低估,也不会因为重复计数被高估。
02
两条内容算不算重复
TATOOLS 把每一条内容变成一个语义向量,两两计算余弦相似度,达到阈值的两条算作重复。余弦相似度越接近 1,两条内容的意思越接近。
工具页的【合并严格度】有三档,档位越高,阈值越高。
| 严格度 | 阈值大致在 | 适合 |
|---|---|---|
| 宽松 | 0.7 出头 | 先粗略整理大量反馈,宁可多并 |
| 标准 | 0.8 多 | 一般的去重合并 |
| 严格 | 0.9 以上 | 只合并几乎一样的内容 |
【文本来源】会在这个基础上再微调一两个百分点,问卷和社媒的短句口语多,阈值略放宽;文档段落措辞规整,阈值略收紧。最后实际使用的阈值写在报告的【有效判定阈值】里。
阈值高低是一对取舍。设一批材料里真正重复的有 100 对。
| 严格度 | 判为重复 | 其中真重复 | 精确率 | 召回率 |
|---|---|---|---|---|
| 宽松 | 130 对 | 95 对 | 95 ÷ 130 ≈ 73% | 95 ÷ 100 = 95% |
| 严格 | 60 对 | 58 对 | 58 ÷ 60 ≈ 97% | 58 ÷ 100 = 58% |
宽松档找得全,但会把只是话题相近的内容也并进来;严格档并进来的几乎都对,但漏掉不少换了说法的重复。先用标准档跑一遍,看合并方案里有没有并错的组,再决定往哪边调。
03
从一对对到一组组
两两比较得到的是一对一对的重复。合并需要的是组,把有重复关系的内容连在一起,连得上的都归为同一组。数学上这叫求传递闭包,A 和 B 重复、B 和 C 重复,那么 A、B、C 就是一组。统计上它等价于单连接聚类,Gower 和 Ross 1969 年讨论过它和最小生成树的关系;计算上用并查集逐步合并,Tarjan 1975 年分析过它的效率。
标准档,有效阈值 0.82
A–B 0.86 B–C 0.85 A–C 0.70
A 和 C 没到阈值,但都和 B 相连
结果:{A, B, C} 一组
传递会把改动一点点累积起来的内容串在一起,这正是合并想要的,同一句话被转述了好几手,也能归到一起。它的代价是链条可能拉得太长,首尾两条已经不太像了。
同样三条,改用严格档,有效阈值 0.93
A–B 0.86 没到阈值
B–C 0.85 没到阈值
结果:三条各自独立,不成组
某一组看起来混进了不该在一起的内容,把严格度调高一档,长链条就会断开。
【最小成组数量】决定几条相似内容才算一组,默认 2,最多 8。设成 3 以后,只有两条互相重复的内容不单独成组,但这一对仍会出现在报告的【合并依据文本对】里。
04
保留哪一条
一组里要留下一条代表。一种办法是算出组内所有向量的平均值,叫质心,但质心不对应任何一条真实的内容。另一种办法是在组内挑一条真实存在的内容,让它到其余各条的总距离最小,这叫中心点(Medoid),Kaufman 和 Rousseeuw 在他们的聚类教材里用它作为围绕中心点划分(PAM)方法的核心。
TATOOLS 采用中心点的思路,挑和组内其余各条平均相似度最高的那一条作为保留项,留下的永远是一条原文。
一组四条,两两相似度
A–B 0.92 A–C 0.88 A–D 0.86
B–C 0.90 B–D 0.87 C–D 0.85
A (0.92 + 0.88 + 0.86) ÷ 4 = 0.665
B (0.92 + 0.90 + 0.87) ÷ 4 ≈ 0.673
C (0.88 + 0.90 + 0.85) ÷ 4 ≈ 0.658
D (0.86 + 0.87 + 0.85) ÷ 4 = 0.645
保留 B,A、C、D 并入 B
除以 4 是因为自己和自己的相似度记作 0 也算在内,只影响数值大小,不影响谁排第一。B 和其余三条都很接近,最能代表这一组的共同意思。这一组的平均相似度是六对相似度的平均,(0.92 + 0.88 + 0.86 + 0.90 + 0.87 + 0.85) ÷ 6 = 0.88,最高相似度是 0.92。
05
合并方案
每一组都得到一条明确的处理意见。
| 记录 | 处理 | 并入 |
|---|---|---|
| B | 保留 | 本组代表文本 |
| A | 并入 | B |
| C | 并入 | B |
| D | 并入 | B |
合并以后减少多少条,是每组的条数减一再加起来。
有效内容 200 条,形成 4 组,每组 5、3、2、2 条
建议归并 = 4 + 2 + 1 + 1 = 8 条
合并后剩余 = 200 − 8 = 192 条
压缩比例 = 8 ÷ 200 = 4%
报告顶部的概览写明【合并组数量】【建议归并】【合并后剩余】和【可合并记录占比】。【合并方案】为每组写明保留哪一条,给出它的编号和出处,列出并入的条数和平均相似度,附上代表文本,以及并入成员的编号和出处。每条内容都有一个 R 开头的编号,按上传顺序排列,方便回到原文核对。
下载的合并方案表格里,每条内容一行,处理一栏写着保留或并入,同一行还有保留记录的编号和原文、这条内容自己的原文。按处理一栏筛出保留的行,就是合并后的结果;按组编号汇总,就得到每条代表内容背后有多少条原始记录。
06
合并单位和文本来源
【合并单位】决定什么算一条内容。按行合并,一行就是一条,适合问卷答案和客服记录这类一行一条的材料;按段落合并,用空行隔开的一段是一条,适合长文和报告里的重复段落。空行跳过,网址和纯数字串先被过滤掉,太短的内容也是。上传多个文件时,所有文件的内容放在一起比较,每条都记着来自哪个文件的第几行。
整份材料不足两条有效内容时,比如整篇文章写在一行里,TATOOLS 会按【自动分段窗口】设定的字数,优先在句末标点处把它切成句段再合并,行号记作第几行的第几段。
【文本来源】有问卷/反馈、文档/段落、客服/投诉、社媒/帖子四类,除了微调阈值,还决定太短的内容怎样过滤、太长的内容截到多长。
07
工具页上的设置一览
| 设置 | 选项或范围 | 默认 | 影响什么 |
|---|---|---|---|
| 合并单位 | 按行合并,按段落合并 | 按行合并 | 什么算一条内容 |
| 自动分段窗口 | 50 到 400 字 | 180 | 缺少分行时切句段的长度 |
| 合并严格度 | 宽松,标准,严格 | 标准 | 多相似才算重复 |
| 最小成组数量 | 2 到 8 条 | 2 | 几条才算一组 |
| 文本来源 | 问卷/反馈,文档/段落,客服/投诉,社媒/帖子 | 问卷/反馈 | 过滤长度和阈值微调 |
08
报告怎么读
| 区块 | 先看什么 |
|---|---|
| 这份结果说明了什么 | 合并组数、建议归并和剩余条数 |
| 重复内容合并概览 | 有效内容、有效判定阈值、压缩比例 |
| 合并方案 | 每组保留哪条、并入哪些 |
| 重复模式雷达图 | 哪几组重复强、范围大、跨文件 |
| 相似聚类详情 | 每组的代表原文和高频词 |
| 合并依据文本对 | 成对的原文和相似度 |
读的顺序是先看概览里合并以后剩多少条,再逐组看合并方案,重点检查条数多、平均相似度偏低的组有没有并错,最后在合并依据文本对里核对拿不准的几对。结果可以下载,包括合并方案和每组的全部成员,以及达到阈值的文本对。
09
把结果写进论文
合并通常放在方法部分的数据清洗里。下面是一段写法示例,方括号里换成自己的数字。
为合并语义重复的表达,本研究使用 TATOOLS 的重复内容合并,以语义向量的余弦相似度两两比较 [条数] 条有效记录,相似度不低于 [阈值] 的记录视为重复,按传递关系归组,每组保留与组内其余记录平均相似度最高的一条作为代表。共形成 [组数] 个合并组,归并 [条数] 条记录,合并后保留 [条数] 条进入后续分析,各代表记录以所在组的条数作为权重。
写明严格度和有效阈值,附上一两组合并前后的原文,读者就能判断合并的尺度是否合适。
10
小结
重复内容合并先判断两条内容是否重复,再把重复关系汇总成组,这是记录链接的经典两步。
合并严格度越高,阈值越高,并进来的越准,漏掉的也越多,实际阈值写在报告里。
重复关系按传递闭包连成组,严格度调高可以打断过长的链条,最小成组数量决定几条才算一组。
每组保留和其余各条平均相似度最高的那条原文,这是中心点的思路。
合并方案逐条写明保留或并入,合并后剩余条数等于有效条数减去每组条数减一之和,原文不做任何改动。
合并以前想先看重复集中在哪里,可以用 TATOOLS 的【文本相似度去重雷达】;想先把空洞、刷屏的内容筛掉,用【信息价值评估】;合并以后想按意思把代表内容分成几类,用【高级文本聚类】。
11
资料来源
Kaufman 与 Rousseeuw:Finding Groups in Data: An Introduction to Cluster Analysis,Wiley,1990
Tarjan:Efficiency of a Good But Not Linear Set Union Algorithm,Journal of the ACM,第 22 卷第 2 期,1975
END
