文章相似度檢測

**文章相似度檢測**、**內容相似度檢測**（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）相似性評估方式則僅是事先選擇小部分文本段落，並輸入電腦軟體進行比對。

##### 文章指紋識別

文章指紋識別（fingerprinting）是目前檢測內容相似性的方式中所最為廣泛運用者。此方式是藉由從文章中擇定一組由多個字母所組成的「符串」（n-gram），並定義為該篇文章中具有代表性的摘要。這些符串即如同指紋一般，而構成指紋的元素即稱為「細節」（minutaie） 。
文章指紋識別會先針對待確認的文件計算其指紋，並且在所有的參考文件中，查詢是否有出現指紋中一定比例的細節。和其他文件的細節符合表示二份文件中有共同的文字區塊，若相似度超過一定比例，有可能是抄襲的。指紋識別的限制因素是運算資源以及時間，因此此方法多半只會選擇一部份的細節進行比較，一方面加速計算，也可以在大量的文本（例如網際網路）中搜尋。

##### 字串匹配

字串匹配是電腦科學中常用的方法。若應用在內容抄襲檢測時，會針對文件進行逐字逐字的重疊比較。針對這項任務，已提出了許多不同的方法，其中也有一些已用在外部的抄襲檢測上。以此方法檢查待測文件，要有足夠的計算資源以及容量，才能高效的針對所有的參考文件，進行兩兩文件的比較。有些文件模型（例如後綴樹或後綴向量）已用在此任務上。無疑的，子字串匹配的運算量相當的大，因此在比較大量參考文件時，不能使用字串匹配進行檢查。

##### 詞袋分析

詞袋分析（Bag of words analysis）是由傳統信息檢索概念中的向量空間模型，轉換到內容相似度檢測旳技術。文件可以用一個或是多個向量（可能是分別表示文件的不同部份）表示，這些向量會用來進行成對的相似度計算。相似度計算可以用傳統的餘弦相似性計算，或是用更複雜的相似性計算方式。

##### 引用文獻分析

引用文獻為基礎的抄襲檢測（CbPD）是依引文分析為基礎，是唯一不靠文本相似度（textual similarity）的抄襲檢測演算法。CbPD 會檢查引用文獻以及文件中用文獻佐證的部份，識別是否有類似的模式。因此，此方式適用於科學論文或是其他一定會引用文獻的學術論文。引用文獻為基礎的抄襲檢測是相對而言較晚發展的概念。目前還沒有商用軟體使用此一作法，不過已有使用此一技術的原形系統。待檢查文件中的類似程度以及接近（proximity）文獻的程度是此一技術的判斷準則。

##### 計量文獻學

計量文獻學是用統計的方式識別作者獨特寫作風格的方式，主要用在作者歸屬確認，或是考慮文件固有特性的電腦輔助抄襲檢測（CaPD）。可以針對不同的文字建構其文體模型，並且進行比較，來自不同來源的文字，其文體模型也會不同，因此可以依此偵測到抄襲或是侵權的情形。

#### 性能比較

內容抄襲檢測的比較性評估指出，檢測系統的性能會因抄襲的方式不同而不同。除了引用文獻分析外，其他的檢測都是以文本相似度為基礎。因此若混合許多文獻抄襲，檢測系統的準確度就會下降。

若是「複製貼上」（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）：程式相依圖可以表示程式中各函式之間彼此呼叫的關係，可以找到更高層次的相似，不過複雜度及運算時間都多很多。
* 軟體度量：會依照一些準則（例如迴圈及條件判斷的個數，或是變數使用的數量）去算程式碼的分數。軟體度量很容易計算，也很容易比較，不過偽陽性的比例很高。二段不同的程式可能剛好有相同的軟體度量值。
* 混合法：例如分析樹加上後綴樹，可以結合分析樹的能力以及後綴樹（一種用於字串比對的資料結構）的計算效率。

上述的分類一開始是為了代碼重構所開發的，不是為了程式碼抄襲。代碼重構的一個重要目的是避免程式中重複的程式碼，在文獻中稱為代碼重複。上述的作法可以偵測到不同層次的相似性：低層次的相似性是指完全相同的文字，高層次的相似性可能是因為類似的規格所產生。在學術的使用上，因為學生是依相同的規格寫程式作業，其作業的程式在機能上等效（即高層次的相似性）是合理的，因此若用在在程式作業的抄襲檢測上，一般只會考慮低層次的相似性。

## 相關條目

* 反剽竊軟體比較
* 局部敏感哈希
* 最鄰近搜索
* 改寫檢測
* 柯氏複雜性：用來評估多個系統中，符記序列（token sequences）的類似程度

## 參考資料

## 文獻

* 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.), ISBN 1873576560
* Zeidman, B. (2011). _The Software IP Detective’s Handbook_. Prentice Hall. (480 p.), ISBN 0137035330