AI News HubLIVE
站內改寫2 分鐘閱讀

CodeSpectra:輕鬆編碼的幻象——為什麼AI仍然需要努力

本文介紹了CodeSpectra,一個用於檢測AI輔助代碼抄襲的四階段級聯工具。它通過精確匹配哈希、盲歸一化加最長公共子序列、抽象語法樹片段加隨機森林機器學習,以及語義相似性檢測,逐步識別從直接複製到語義克隆的各種抄襲類型,特別針對AI生成代碼的挑戰。

來源Hacker News AI作者: sikandarejaz

AI編程助手徹底改變了遊戲規則。一個曾經需要數小時複製並重寫同學代碼的學生,現在可以通過ChatGPT快速獲得結構相同的解決方案,並因變量名不同而問心無愧地提交。傳統的抄襲檢測器將文件作為字符串進行比較,一旦重命名變量或改變循環風格,它們就會失效。為此,我們開發了CodeSpectra工具,採用四級級聯檢測技術,每級都旨在捕捉前一級遺漏的作弊手段。

“自動化應輔助教育者,而非取代他們的判斷。”

CodeSpectra對每份學生提交的代碼進行級聯處理:每個階段針對特定類別的抄襲進行優化。階段之間不會重複檢查已捕獲的內容,因此即使面對大量學生,性能也能保持線性。所有四個階段的結果會合併為一份針對每個學生的報告,包含最終相似度分數和扣分建議。

第一階段:精確匹配哈希(類型1) 每個源文件首先去除註釋和空白,然後使用MD5進行哈希。不同學生提交的哈希匹配立即標記為完全相同的克隆,無需進一步處理。這處理了最常見的情況:學生直接將文件發送給同學。我們採用了多語言正則表達式去除註釋,並在哈希前進行空白標準化。該階段時間複雜度為O(n),可擴展至數千份提交。對於此克隆類型,零誤報。

第二階段:盲歸一化加最長公共子序列(類型2) 在精確匹配階段之後,每個文件經歷兩個層次的標準化。友好標準化去除註釋並摺疊空白,同時保留標識符名稱。盲標準化更進一步,將每個非關鍵字標識符替換為通用令牌(如VAR_0、VAR_1……),使得重命名的變量與原始變量無法區分。然後使用Python的SequenceMatcher(最長公共子序列)計算相似度。友好標準化後的原始相似度≥0.95提示類型1;盲標準化後的歸一化相似度≥0.95提示類型2。

第三階段:AST片段加隨機森林機器學習(類型3) 這正是大多數檢測器失效的地方,也是CodeSpectra的主要研究重點。類型3克隆是那些共享結構但語句被添加、刪除或重排的片段。例如,學生重寫排序函數,用臨時變量交換,產生類型3克隆。

第四階段:語義相似性(類型4) 這是最困難的問題:兩個程序功能相同但語法完全不同。遞歸斐波那契和迭代斐波那契是類型4克隆。AI生成的解決方案和人為編寫的相同任務解決方案也可能是類型4克隆。類型4檢測器使用代碼嵌入——程序語義的密集向量表示——並計算它們之間的餘弦相似度。歸一化相似度低於0.45(對於類型3來説差異太大)但嵌入相似度高的配對被標記為語義克隆。這在AI提交時代尤其相關,因為GPT生成的解決方案共享語義而非結構。