两千条问卷开放题回答收上来,统计时发现有几十条几乎一字不差,是同一个班的学生互相抄的;还有一批意思一样、措辞略有不同,像是照着同一个模板改的。不去掉它们,某些观点会被重复计数,频次和比例都会失真。换一个场景,两篇政策解读文章大意相同、用词却处处不同,编辑想知道后一篇是不是在前一篇的基础上改写出来的。
这两件事都要回答同一个问题,两段文字在意思上有多接近。TATOOLS 的【文本相似度去重雷达】用语义向量两两比较每一条文本,找出意思相近的文本对,把相互相似的文本归成一组,给出重复率,列出每组的代表原文和高频词,用雷达图画出每组重复的强度和扩散范围。切换到同义改写模式,它专门找语义接近但用词差别明显的文本对,按改写嫌疑分排序,并逐词标出改动在哪里。
这篇教程先讲重复有几种,字面相似和语义相似怎样计算,再讲阈值怎样定,文本怎样成组,重复率和雷达图怎样读,接着讲同义改写嫌疑分,最后讲报告的读法和论文里的写法。
01
重复有几种
| 类型 | 例子 | 靠什么发现 |
|---|---|---|
| 原样复制 | 两条回答一字不差 | 字面比对 |
| 近似复制 | 改了几个字、换了标点 | 字面相似度或语义相似度 |
| 同义改写 | 意思相同,词几乎全换了 | 语义相似度 |
字面比对的办法由来已久。Broder 1997 年为网页去重提出把文本切成一小段一小段的片段,用两份文本共有片段的比例衡量它们有多像,这就是 Jaccard 相似度在去重里的经典用法。字面方法又快又准,但它只认字,同义改写在它眼里是两段完全不同的文字。
语义方法把每段文字表示成一个向量,意思相近的文字向量方向相近。Reimers 和 Gurevych 2019 年提出的句向量方法让这一思路在大规模文本上变得实用,两段文字即使一个共同的词都没有,只要意思相近,也能被找出来。TATOOLS 的【文本相似度去重雷达】以语义相似度为主,字面差异度用来区分近似复制和同义改写。
02
字面相似:Jaccard 系数
把两段文字各自分词,去掉单字和数字,得到两个词的集合,Jaccard 系数是交集大小除以并集大小。
甲:政府加大了对乡村教育的投入
{政府, 加大, 乡村, 教育, 投入}
乙:当局增加了农村学校的经费
{当局, 增加, 农村, 学校, 经费}
交集 0 个,Jaccard = 0
甲和乙说的是同一件事,字面相似度却是 0。字面方法擅长抓抄袭和粘贴,换了说法的改写要靠语义方法来找。
03
语义向量和余弦相似度
TATOOLS 把每一条文本交给【语义向量模型】,得到一个几百维的向量,再缩放到长度为 1。两个单位向量的余弦相似度就是它们对应分量乘积之和,在 −1 到 1 之间,越接近 1 意思越接近。
cos(a, b) = Σ aᵢ × bᵢ (a、b 长度都是 1)
用三维的小例子手算。
A = (0.6, 0.8, 0) B = (0.8, 0.6, 0) C = (0, 0.6, 0.8)
cos(A, B) = 0.48 + 0.48 + 0 = 0.96
cos(A, C) = 0 + 0.48 + 0 = 0.48
cos(B, C) = 0 + 0.36 + 0 = 0.36
A 和 B 方向几乎一致,是一对重复;C 和它们只沾一点边。TATOOLS 对全部文本两两计算余弦相似度,n 条文本一共要比 n × (n − 1) ÷ 2 对,两千条就是将近两百万对,每一对都算到。
04
阈值怎样定
余弦相似度达到阈值的两条文本,算作一对重复。工具页的【相似度阈值】在近似复制模式下可以设在 0.60 到 0.95 之间,默认 0.82。阈值越高,只有几乎一样的文本才会被抓出来;阈值越低,意思相近但表述不同的也会被算进来。
【去重策略】在这个基础上再调一次。
| 去重策略 | 做法 | 阈值 0.82 时 |
|---|---|---|
| 保守去重 | 阈值加 0.05 | 0.87 |
| 均衡去重 | 不调整 | 0.82 |
| 召回优先 | 阈值减 0.05 | 0.77 |
【分析场景】还会按文本来源再微调一两个百分点,问卷和社媒这类短句口语多,客服记录也是,阈值略放宽;政策公文措辞规整,阈值略收紧。最后实际使用的阈值写在报告的【有效判定阈值】里。
要把结论写得很稳,用保守去重;要尽量找全诉求一致的反馈,用召回优先。拿不准的时候先用均衡去重,看报告里的高相似度文本对,再决定往哪边调。
05
从文本对到重复组
两两比较得到的是一对一对的文本。把每条文本看成一个点,每一对重复连一条线,连在一起的点就是一组。这在统计上叫单连接聚类(Single Linkage),Gower 和 Ross 1969 年讨论过它和最小生成树的关系;计算上用并查集(Union-Find)把点逐步合并,Tarjan 1975 年分析过它的效率。
阈值 0.82,五条文本里达到阈值的对
1–2 0.90
2–3 0.85
4–5 0.88
1–3 0.78,没到阈值
结果:{1, 2, 3} 一组,{4, 5} 一组
1 和 3 本身没到阈值,因为都和 2 相连,也被归到一组,这是单连接的特点,重复的链条能把改动一点点累积起来的文本串在一起。
【重复聚类最小样本数】决定多少条才算一组,默认 3。上例里 {4, 5} 只有两条,不单独成组,但这一对仍会出现在高相似度文本对的列表里。
每组选出一条代表原文,是和组内其他文本平均相似度最高的那条。
文本 1:(0.90 + 0.78) ÷ 3 ≈ 0.56
文本 2:(0.90 + 0.85) ÷ 3 ≈ 0.58
文本 3:(0.78 + 0.85) ÷ 3 ≈ 0.54
代表原文是文本 2
组内平均相似度 = (0.90 + 0.85 + 0.78) ÷ 3 ≈ 0.84
除以 3 是因为自己和自己的相似度记作 0 也算在里面,只影响数值大小,不影响谁排第一。TATOOLS 的【相似聚类详情】为每组列出条数和平均相似度、最高相似度,写明涉及几个文件,并附上代表原文和组内的高频词,组名由高频词拼成。
06
重复率和雷达图
报告顶部的【检测到的重复率】是至少出现在一对重复里的文本占全部有效文本的比例。
有效文本 20 条,出现在重复对里的有 5 条
重复率 = 5 ÷ 20 = 25%
【重复模式雷达图】为每个重复组画一个五边形,五条轴是这样算的。
| 轴 | 怎样算 |
|---|---|
| 重复强度 | 组内平均相似度 × 100 |
| 覆盖范围 | 本组条数 ÷ 最大一组的条数 × 100 |
| 跨文件扩散 | 本组涉及的文件数 ÷ 本组条数 × 100 |
| 敏感风险 | 组内含个人敏感信息的文本占比 |
| 关键词关注 | 组内命中关注主题的次数 ÷ 本组条数 × 100 |
一组 6 条,来自 3 个文件,平均相似度 0.88,最大的一组有 12 条,它的前三条轴分别是 88、50 和 50。重复强度高、覆盖范围大的组,是最值得先处理的;跨文件扩散高,说明同一段内容在不同来源里都出现了,常见于转载和模板化填写。
工具页的【希望重点跟踪的主题】填了关键词以后,命中关键词的组会以关键词命名,关键词关注这条轴也会跟着变化。【相似度热力矩阵】把前 40 条文本两两之间的相似度画成色块,颜色越深越相似,适合一眼看出重复集中在哪一片。
07
同义改写嫌疑
Dolan 和 Brockett 2005 年建立了英文句子改写语料库,改写识别从此成为自然语言处理里的一个标准任务。【分析模式】选【同义改写嫌疑】时,TATOOLS 找的就是这一类文本对,意思仍然接近,用词却换了不少。
字面差异度 = 1 − Jaccard 相似度
改写嫌疑分 = 语义相似度 × 字面差异度
接着前面的例子算三对。
甲与乙 语义 0.80,Jaccard 0,差异度 1
嫌疑分 = 0.80 × 1 = 0.80
甲与丙 丙:政府增加了乡村学校的投入
交集 {政府, 乡村, 投入},并集 7 个词
Jaccard = 3 ÷ 7 ≈ 0.43,差异度 ≈ 0.57
语义 0.86,嫌疑分 ≈ 0.86 × 0.57 ≈ 0.49
甲与丁 丁:政府加大了对乡村教育的投入力度
语义 0.95,高到近似复制的程度,不列入
语义越接近、用词换得越多,嫌疑分越高。语义高到几乎就是原句的文本对属于近似复制,交给另一种模式处理;用词几乎没变的也不算改写。这个模式下【相似度阈值】是语义相似度的下限,可以设在 0.55 到 0.82 之间,工具页建议 0.60 到 0.78,太低会引入话题碰巧相近的句子,太高会漏掉轻度改写。
报告的【改写嫌疑对 — 左右词级对照】把排在前面的文本对左右并排,逐词对齐,哪些词没动,哪些词被替换,哪些词是新加或删掉的,都分别标出来,一眼能看出改动集中在哪里。改写嫌疑分是给人工抽查排序用的线索,是否构成不当改写,要由研究者对照原文和出处来判断。
08
分析单位和预处理
TATOOLS 把每一行当作一条文本,空行跳过。网址、纯数字串和太短的文本先被过滤掉,太长的文本按分析场景截到合适的长度。上传多个文件时,所有文件的文本放在一起两两比较,每条文本都记着来自哪个文件的第几行。
整份材料不足两条有效文本时,比如整篇文章写在一行里,TATOOLS 会按【自动分段窗口】设定的字数,优先在句末标点处把它切成句段再比较,行号记作第几行的第几段。
工具页的【自定义词典】影响分词,进而影响组内高频词和同义改写模式里的字面差异度;【自定义停用词】让泛泛的词不进组内高频词。语义相似度本身不受这两项影响。
09
工具页上的设置一览
| 设置 | 选项或范围 | 默认 | 影响什么 |
|---|---|---|---|
| 分析模式 | 近似复制与合并,同义改写嫌疑 | 近似复制与合并 | 找哪一类文本对 |
| 自动分段窗口 | 50 到 400 字 | 180 | 缺少分行时切句段的长度 |
| 分析场景 | 调研/问卷反馈,政策/公文段落,客服/投诉日志,社媒/论坛帖子 | 调研/问卷反馈 | 过滤长度和阈值微调 |
| 相似度阈值 | 0.60 到 0.95,改写模式 0.55 到 0.82 | 0.82 | 多相似才算一对 |
| 重复聚类最小样本数 | 2 到 15 | 3 | 多少条才算一组 |
| 去重策略 | 保守去重,均衡去重,召回优先 | 均衡去重 | 在阈值上加减 0.05 |
| 希望重点跟踪的主题 | 自己填写 | 空 | 组的命名和关键词关注轴 |
| 自定义词典、自定义停用词 | 自己填写 | 空 | 高频词和字面差异度 |
10
报告怎么读
| 区块 | 先看什么 |
|---|---|
| 这份结果说明了什么 | 有效文本数、重复率、重复组数 |
| 概览指标 | 上传记录数、有效文本、平均相似度、有效判定阈值 |
| 智能建议 | 按本次结果给出的调整方向 |
| 重复模式雷达图 | 哪几组强度高、范围大、跨文件 |
| 相似聚类详情 | 每组的代表原文、条数和高频词 |
| 相似度热力矩阵 | 重复集中在哪一片 |
| 高相似度文本对 | 成对的原文,逐对核对 |
| 改写嫌疑对 — 左右词级对照 | 改写模式下,改动在哪里 |
读的顺序是先看重复率和重复组数,再看雷达图挑出最值得处理的几组,到聚类详情里读代表原文,最后在文本对列表里逐对核对。结果可以下载,包括重复组汇总和每组的全部成员,以及达到阈值的文本对;改写模式下另有一张文本对表,逐对写明语义相似度和字面差异度,并附上嫌疑分。
11
把结果写进论文
去重通常放在方法部分的数据清洗里。下面是一段写法示例,方括号里换成自己的数字。
为避免重复作答与模板化填写造成的重复计数,本研究使用 TATOOLS 的文本相似度去重雷达,以语义向量的余弦相似度两两比较 [条数] 条有效回答,将相似度不低于 [阈值] 的回答视为重复,并按单连接方式归组。共识别出 [组数] 个重复组,涉及 [条数] 条回答(占 [比例]),每组保留一条代表回答进入后续分析。
写明阈值和去重策略,再举一两组重复的原文,读者就能判断去重的尺度是否合适。
12
小结
重复分原样复制、近似复制和同义改写三种,字面方法看得出前两种,语义方法三种都能覆盖。
TATOOLS 把每条文本变成单位长度的语义向量,两两计算余弦相似度,达到阈值的算一对重复。
阈值由相似度阈值、去重策略和分析场景共同决定,实际使用的阈值写在报告里。
重复对按单连接方式连成组,每组选出平均相似度最高的代表原文,雷达图画出重复强度、覆盖范围和跨文件扩散。
同义改写模式用语义相似度乘以字面差异度得到改写嫌疑分,并逐词标出改动。
找出重复组以后,想每组保留一条、其余标为并入,可以用 TATOOLS 的【重复内容合并】;想先把空洞、刷屏的段落筛掉,用【信息价值评估】;想按意思把全部文本分成几类,用【高级文本聚类】。
13
资料来源
Jaccard:The Distribution of the Flora in the Alpine Zone,New Phytologist,第 11 卷第 2 期,1912
Tarjan:Efficiency of a Good But Not Linear Set Union Algorithm,Journal of the ACM,第 22 卷第 2 期,1975
END
