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生成的解決方案共享語義而非結構。