文章相似度檢測、內容相似度檢測(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年的一篇系統綜述 簡單說明了目前正在使用的抄袭检测系統。
文件相似度檢測系統有兩種通用的檢測方式,一種是外在的,一種則和文件的固有特性有關。
程式碼抄袭常常出現在程式相關的作業上。大部份的作業都會給學生很明確的需求,要學生寫出符合該需求的程式。不一定可以在網路上找到已有,符合該需求的程式。網路上可找到的程式可能只能符合部份需求,若要滿足作業需求,還需要改寫程式或整合程式,這多半會比學生自己學程式作業要難。大部份的學生若要抄袭程式碼作業,多半會抄袭同學寫的作業。
根據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.),
- Zeidman, B. (2011). The Software IP Detective’s Handbook. Prentice Hall. (480 p.),
评论 (0)