Fine-Tuning Pre-Trained Code Models for AI-Generated Code Detection
本論文は、SemEval-2026 タスク 13 に向けた「Archaeology」チームのシステムを提示するもので、微調整済み事前学習コードモデルと、言語を一つずつ除外する交差検証やサンドイッチ型トークン詰め込みといった特化戦略を活用し、AI 生成コードの検出とその出所特定において最高水準のパフォーマンスを達成するものである。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
「考古学」という名のデジタル探偵事務所を想像してみてください。彼らの仕事は古代の土器を掘り起こすことではなく、コンピュータコードの山をふるい分け、2 つの大きな問いに答えることです:
- 誰が書いたのか? 人間のプログラマーか、それともロボット(AI)か?
- どのロボットが書いたのか? もしロボットなら、どの特定の AI モデルが作成したのか?
このチームは、自らの技能を実証するために「SemEval-2026 タスク 13」と呼ばれる高リスクのコンペティションに参加しました。彼らがどのように取り組んだか、簡単に説明します。
課題:2 部構成のミステリー
このコンペティションには、それぞれ異なる探偵戦略を必要とする 2 つの明確なパズルがありました。
パズル A:「人間対ロボット」テスト(二値分類)
- 目標: コードの断片を見て、「人間」か「AI」かを言い当てること。
- 罠: チームは主にPythonコード(練習データの 91%)で訓練されましたが、最終テストには JavaScript、Go、C# など、これまで見たことのない言語が含まれていました。まるで、イタリア料理だけを調理するようにシェフを訓練しておき、実際にはタイカレーが出されたときに、それが手作りか工場で作られたものかを識別させるようなものです。
- 手がかり: AI によるコードは長く均一な傾向がありますが、人間のコードは短く混沌としています。ただし、この規則は言語によって逆転します(例えば C++ では、人間の方が AI より長いコードを書くことが実際にはあります)。
パズル B:「どのロボット?」テスト(多クラス帰属)
- 目標: コードが AI 生成である場合、11 の異なる AI モデルのいずれが書いたかを正確に特定すること。
- 罠: データは極端に不均衡でした。あるカテゴリ(人間が書いたコード)はデータの**88%**を占めていた一方、特定の AI モデルの中には 2,000 例未満のものもありました。まるで、干し草の山の中から針を探すようなもので、その山は 99% が干し草で、針は色違いですが、赤い針は 1 本しかなく、青い針は 100 万本あるような状況です。
- 手がかり: 異なる AI モデルには微妙な「筆跡」スタイルがありますが、これらのスタイルは長く複雑なコードの中では見つけにくいです。
探偵のツールキット
チームは単に推測したわけではありません。彼らは 4 つの異なる「スーパーアイ」(事前学習済み AI モデル)を使用し、各パズルに合わせた特別な訓練技法を適用しました。
パズル A(人間対ロボット)用
- 「言語交換」ドリル: テストでのサプライズ言語に備えるため、彼らはモデルを訓練する際に 1 つの言語ずつ隠すようにしました。これにより、モデルは Python のコメントに
#を使うといった特定の言語のトリックに依存せず、パターンを認識することを学びました。 - 「スクラビングとマスク」ワークアウト: 訓練中にコメントを剥ぎ取り、数値をプレースホルダーに置き換えました。これにより、モデルはコードの表面的な装飾ではなく、ロジックそのものを見るように強制されました。
- 「チャンキング」戦略: テストコードは 1 回で読むには長すぎる場合が多かったため、それらを重なり合う断片にスライスしました(長い本を数ページずつ読んでいくようなものです)。その後、最も極端な「ノイズ」のある推測を無視し、これらのスライスの平均値を取ることで最終判断を下しました。
- 「困難なケース」較正: 単純なコンピュータプログラムが間違えた事例を用いた特別な「ハードテスト」を作成しました。彼らはこれらの厄介なケースに基づいて決定閾値(「人間」と「AI」の境界線)を調整し、テストデータにだまされないようにしました。
パズル B(どのロボット?)用
- 「サンドイッチ」技法: コードがモデルのメモリに収まりきらないほど長かったため、単に真ん中を切り捨てるのではなく、コードのヘッド(先頭)とテール(末尾)を保持し、真ん中に特別なマーカーを入れてサンドイッチのように詰め込みました。これにより、「ロボットの署名」が隠れがちな先頭と末尾のスタイルを維持しました。
- 「公平性」の重み: データ内で一部の AI モデルが希少だったため、チームはモデルに「最も一般的なものを推測するだけにするな!希少なものに特別に注意を払え」と伝えました。スコアリングシステムを調整し、モデルが人気のあるものだけでなく、希少なロボットも見分けられるように学習させました。
- 「群衆の知恵」投票: 彼らは同じコードをわずかな変異を加えてモデルに複数回通し、モデルに答えを投票させました。これにより誤りを減らし、信頼性を高めました。
結果
「考古学」チームは非常に良い成績を収めました:
- パズル A: スコアは0.737で、81 チーム中6 位でした。彼らの最良のツールはCodeBERTであり、他のものよりもコードの「ロジック」を理解しているように見えました。
- パズル B: スコアは0.422で、34 チーム中7 位でした。ここでの最良のツールはUniXcoderで、より長いコード断片を参照し、「投票」戦略を利用したことが恩恵となりました。
大きな教訓
チームは、モデルがどのように訓練されたかが、そのサイズよりも重要であることを発見しました。
- コードのロジックを理解することに特化して訓練された、より小さなモデル(1 億 2,500 万パラメータ)の方が、AI を見分ける能力において優れていました。
- 巨大なモデル(2 億 2,000 万パラメータ)は勝利しませんでした。これは、この特定の任務においては、「一般論」よりも「専門家」である方が優れていることを示唆しています。
要約すれば、このチームは、長いコードをスライスする、表面的なノイズを無視する、答えに投票するといった適切な訓練のトリックを用いれば、新しい言語に身を隠そうとする AI 生成コードを驚くほど上手に見抜くシステムを構築できることを証明しました。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。