文章相似度检测

文章相似度检测、内容相似度检测（content similarity detection）或抄袭检测（plagiarism detection）是在一份文件中找到抄袭或侵权词句所在位置的方法。随着电脑的普遍使用，互联网的发明，抄袭其他作品的难度越来越低。

抄袭检测可以用许多方式来进行。人工检测是传统检测是否有抄袭的方法，相当的耗时间，而且可能因为组织内对于抄袭定义的不同，会有不一致的情形。目前已有许多文字匹配软件（text-matching software、TMS），也称为反剽窃软件（anti-plagiarism software）或剽窃检测软件（plagiarism detection software），这些软件可能是商业软件，也可能是开源软件。文字比对软件不会一句一句的检查是否有抄袭，不过软件会从一份文件中找到和其他文件相符的特定片段，若相符的特定片段越多，抄袭的可能性也就越高。

## 软件辅助的文件抄袭检测

电脑辅助的抄袭检测（computer-assisted plagiarism detection、简称CaPD）是由特制的信息检索系统所进行的信息检索工作，此系统称为抄袭检测系统（plagiarism detection system、PDS）或文件相似度检测系统。2019年的一篇系统综述 简单说明了目前正在使用的抄袭检测系统。

文件相似度检测系统有两种通用的检测方式，一种是外在的，一种则和文件的固有特性有关。

外在检测系统会将待测的文件和一些参考用的文件进行比较，这些参考用的文件是假定原创，没有抄袭的文件。

依照给定的文件模型，以及事先定义的相似度准则，检测工作就是检索出参考用的文件中，内容和待测文件相似度超过一定比例的比文件。

固有特性的抄袭检测系统会直接用待测的文件进行分析。分析的目的是找出作者独特的写作方式变化，作为抄袭可能性的指标。

抄袭检测系统一定要配合人类的判断，才能可靠的识别文件抄袭。相似度是依事先定义的文件模型来计算，因此可能出现伪阳性。

### 检测方式

下图绘出目前各种以电脑软件来辅助检测文章内容相似性的方式，并依检测的范围为全域或局部加以分类。全域（global）相似性评估方式会撷取文章中大部分的特征文本甚至整篇文章和其他文章进行比对，以计算二者间的相似度；而局部（local）相似性评估方式则仅是事先选择小部分文本段落，并输入电脑软件进行比对。

<image>

#### 文章指纹识别

文章指纹识别（fingerprinting）是目前检测内容相似性的方式中所最为广泛运用者。此方式是借由从文章中择定一组由多个字母所组成的“符串”（n-gram），并定义为该篇文章中具有代表性的摘要。这些符串即如同指纹一般，而构成指纹的元素即称为“细节”（minutaie）。

文章指纹识别会先针对待确认的文件计算其指纹，并且在所有的参考文件中，查询是否有出现指纹中一定比例的细节。和其他文件的细节符合表示二份文件中有共同的文字区块，若相似度超过一定比例，有可能是抄袭的。指纹识别的限制因素是运算资源以及时间，因此此方法多半只会选择一部分的细节进行比较，一方面加速计算，也可以在大量的文本（例如互联网）中搜寻。

#### 字串匹配

字串匹配是电脑科学中常用的方法。若应用在内容抄袭检测时，会针对文件进行逐字逐字的重叠比较。针对这项任务，已提出了许多不同的方法，其中也有一些已用在外部的抄袭检测上。以此方法检查待测文件，要有足够的计算资源以及容量，才能高效的针对所有的参考文件，进行两两文件的比较。有些文件模型（例如后缀树或后缀向量）已用在此任务上。无疑的，子字串匹配的运算量相当的大，因此在比较大量参考文件时，不能使用字串匹配进行检查。

#### 词袋分析

词袋分析（Bag of words analysis）是由传统信息检索概念中的向量空间模型，转换到内容相似度检测旳技术。文件可以用一个或是多个向量（可能是分别表示文件的不同部分）表示，这些向量会用来进行成对的相似度计算。相似度计算可以用传统的余弦相似性计算，或是用更复杂的相似性计算方式。

#### 引用文献分析

引用文献为基础的抄袭检测（CbPD）是依引文分析为基础，是唯一不靠文本相似度（textual similarity）的抄袭检测算法。CbPD会检查引用文献以及文件中用文献佐证的部分，识别是否有类似的模式。因此，此方式适用于科学论文或是其他一定会引用文献的学术论文。引用文献为基础的抄袭检测是相对而言较晚发展的概念。目前还没有商用软件使用此一作法，不过已有使用此一技术的原形系统。待检查文件中的类似程度以及接近（proximity）文献的程度是此一技术的判断准则。

#### 计量文献学

计量文献学是用统计的方式识别作者独特写作风格的方式，主要用在作者归属确认，或是考虑文件固有特性的电脑辅助抄袭检测（CaPD）。可以针对不同的文字建构其文体模型，并且进行比较，来自不同来源的文字，其文体模型也会不同，因此可以依此侦测到抄袭或是侵权的情形。

### 性能比较

内容抄袭检测的比较性评估指出，检测系统的性能会因抄袭的方式不同而不同。除了引用文献分析外，其他的检测都是以文本相似度为基础。因此若混合许多文献抄袭，检测系统的准确度就会下降。

<image>

若是“复制贴上”（copy and paste）型式的抄袭，公然侵犯版权的抄袭、或是适度掩饰的抄袭，若软件可以找到来源的文字，目前的内容抄袭系统的精确度很高。特别是子字串比对程序针对“复制贴上”型式的抄袭，其效果非常的好，因为其中会使用无损的文件模型，例如后缀树。利用文章指纹或是词袋分析的性能会因为文件模型中，资讯的减少程度而受到影响。若文章指纹或是词袋分析再配合灵活的分块及选择策略，检测变相抄袭的性能会比相较于子字串比对程序要好。

利用Stylometry的固有特性抄袭检测可以用比较语言相似性，克服一些文本相似度的问题。假设原始文件及待确认文件的风格都很明确，而且是用可靠的方式识别，Stylometry可以识别变相抄袭及文字改写（Paraphrasing）式的抄袭。但若文字重组的非常严重，反而产生了不同于来源资料的风格，或是抄袭自数个不同的来源，Stylometry分析可能会失效。2009年至2011年国际抄袭检测比赛的结果，以及Stein的实验都指出，Stylometry分析若要正常运作，只能针对数千到上万字之间的文件，这限制了电脑辅助的抄袭检测的应用性。

越来越多的研究是针对可侦测翻译抄袭的方式或是系统。目前跨语言的抄袭检测（cross-language plagiarism detection、CLPD）还不是成熟的技术，各系统在评估时还无法有令人满意的结果。

和其他方式比较，引用文献分析的抄袭检测在识别改写情形较严重的抄袭，或是识别翻译抄袭上的成功率较高，因为和文本相似度没有关系。不过因为引用文献分析要有足够的文献资讯，因此只限制在学术文件。引用文献分析在检测较短的抄袭文字（例如“复制贴上”的抄袭或是“复制重组贴上”的抄袭）时，效果不如以文字为基础的抄袭检测。“复制重组贴上”（shake-and-paste）的抄袭是指用不同的来源，略为混合后再抄袭的作法。

### 使用文字匹配软件的副作用

若利用文字匹配软件来进行内容抄袭检测，目前已出现一些副作用。目前最受闗注的问题是被参考文件的知识产权问题。文件要可以被文字匹配系统检查到，就需要加到文字匹配系统的数据库中，才能有效的匹配，但是将其他人创作，有知识产权的文件加入数据库，有侵权的问题。目前已经有一些相关的诉讼案。

另一个副作用是因为文字匹配软件只会计算文字精准匹配的结果。若在抄袭后将够多的单字改为同义字，减少和原文完全相同的文字，有可能可以骗过检测软件，此方法称为rogeting。

## 程式码抄袭检测

程式码的抄袭也很常见，程式码抄袭的检测工具和文件抄袭的检测工具不同。在程式码抄袭检测上，已有许多的学术研究。

程式码抄袭常常出现在程式相关的作业上。大部分的作业都会给学生很明确的需求，要学生写出符合该需求的程式。不一定可以在网络上找到已有，符合该需求的程式。网络上可找到的程式可能只能符合部分需求，若要满足作业需求，还需要改写程式或整合程式，这多半会比学生自己学程式作业要难。大部分的学生若要抄袭程式码作业，多半会抄袭同学写的作业。

根据Roy和Cordy的研究，程式码抄袭检测算法可以分为以下几种

- 字串：找文本中完全相同的文字片段，例如连续五个字相同。此算法速度很快，但若修改变数名称，即无法识别。
- 符记（Tokens）：也和字串算法相同，但是由词法分析将程式先转换为符记（Token），忽略空白、注解、识别符名称，因此若只是单纯修改变数名称，此方式仍可以法识别。大部分学术的程式码抄袭系统会使用此算法，用不同的算法来评估二个符记序列的相似度。
- 分析树（Parse Trees）：先建立分析树然后再比较，这可以侦测更高层次的类似性。例如，分析树比较可以正规化条件叙述，再侦测两者是否有类似的等效结构。
- 程式相依图（PDG）：程式相依图可以表示程式中各函式之间彼此呼叫的关系，可以找到更高层次的相似，不过复杂度及运算时间都多很多。
- 软件度量：会依照一些准则（例如循环及条件判断的个数，或是变数使用的数量）去算程式码的分数。软件度量很容易计算，也很容易比较，不过伪阳性的比例很高。二段不同的程式可能刚好有相同的软件度量值。
- 混合法：例如分析树加上后缀树，可以结合分析树的能力以及后缀树（一种用于字串比对的资料结构）的计算效率。

上述的分类一开始是为了代码重构所开发的，不是为了程式码抄袭。代码重构的一个重要目的是避免程式中重复的程式码，在文献中称为代码重复。上述的作法可以侦测到不同层次的相似性：低层次的相似性是指完全相同的文字，高层次的相似性可能是因为类似的规格所产生。在学术的使用上，因为学生是依相同的规格写程式作业，其作业的程式在机能上等效（即高层次的相似性）是合理的，因此若用在在程式作业的抄袭检测上，一般只会考虑低层次的相似性。

## 文献

- Carroll, J. (2002). A handbook for deterring plagiarism in higher education. Oxford: The Oxford Centre for Staff and Learning Development, Oxford Brookes University. (96 p.),
- Zeidman, B. (2011). The Software IP Detective’s Handbook. Prentice Hall. (480 p.),