UCSC-NLP at SemEval-2026 Task 13: Multi-View Generalization and Diagnostic Analysis of Machine-Generated Code Detection
L'équipe UCSC-NLP aborde la tâche 13 de SemEval-2026 en réalisant une détection binaire robuste du code généré par machine grâce à un cadre de fine-tuning multi-vues de UniXcoder-base, tout en démontrant que l'entraînement pondéré par classe est essentiel pour surmonter l'échec catastrophique de l'attribution multi-classes causé par un déséquilibre sévère des données.
Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète
Imaginez que vous êtes un enseignant essayant de corriger une pile de devoirs. Vous avez deux défis principaux :
- Le test « Qui l'a fait ? » : Pouvez-vous dire si un étudiant a écrit la dissertation ou s'ils ont utilisé un robot pour l'écrire ?
- Le test « Quel robot ? » : Si un robot l'a effectivement écrit, pouvez-vous dire exactement quel modèle de robot (par exemple, Robot A, Robot B, Robot C) a été utilisé ?
Ce document décrit une équipe de l'UC Santa Cruz qui a construit un système pour résoudre ces problèmes concernant le code informatique. Ils ont participé à une compétition (SemEval-2026 Tâche 13) pour évaluer la performance de leur système dans la détection de code généré par l'IA.
Voici comment ils ont relevé les deux défis, expliqué simplement :
Défi 1 : Le test « Qui l'a fait ? » (Détection binaire)
Le problème : L'équipe a entraîné son système sur du code écrit en Python, C++ et Java. Mais lors des tests, ils lui ont soumis du code dans des langues qu'il n'avait jamais vues auparavant (comme Go ou PHP) et dans des styles différents (comme des articles de recherche ou des logiciels de production). Habituellement, les détecteurs d'IA échouent ici car ils mémorisent des mots ou des langues spécifiques au lieu d'apprendre l'« ambiance » du code.
La solution : L'appareil photo à « trois lentilles »
Au lieu d'examiner le code une seule fois, l'équipe a appris à son système à regarder chaque morceau de code simultanément à travers trois lentilles différentes :
- La lentille Originale : Examiner le code exactement tel qu'il est.
- La lentille « Bandeau » (Délexicalisation) : Imaginez prendre une phrase et remplacer tous les noms de personnes, de lieux et de nombres par des mots génériques comme « Personne », « Lieu » et « Nombre ». Cela force le système à ignorer les noms de variables spécifiques (qui changent selon la langue) et à se concentrer sur la structure de la logique.
- La lentille « Mixte » : Ils ont mélangé aléatoirement du texte anglais simple dans les extraits de code. Cela a appris au système à gérer du code réel, désordonné, qui n'est pas parfaitement formaté.
L'analogie : Pensez-y comme un agent de sécurité vérifiant un sac.
- Ancienne méthode : L'agent mémorise que « Valise rouge = Mauvaise ». Si vous apportez une valise bleue, il la manque.
- Nouvelle méthode : L'agent regarde la valise sous trois angles : l'extérieur, l'intérieur (en ignorant le logo de la marque) et une version où ils ont mélangé des objets aléatoires. Si la structure du sac semble suspecte dans les trois vues, il l'alerte.
Le résultat : Cela a fonctionné incroyablement bien. Même lorsque le code était dans une nouvelle langue ou un nouveau style, leur système l'a correctement identifié comme « Humain » ou « IA » environ 84,5 % du temps.
Défi 2 : Le test « Quel robot ? » (Attribution multi-classes)
Le problème : C'était beaucoup plus difficile. L'équipe devait identifier quel modèle parmi 10 modèles d'IA différents avait écrit le code.
- Le déséquilibre des données : Imaginez une classe de 500 étudiants. 442 d'entre eux sont des humains. Les 58 autres sont des robots, mais ils sont répartis parmi 10 types de robots différents. Certains types de robots n'ont que 2 étudiants dans la classe.
- Le piège : Si vous entraînez un enseignant sur cette classe, il apprendra un tour très facile : « Si je devine simplement « Humain » pour tout le monde, j'aurai raison 88 % du temps ! »
- L'échec : Lorsque l'équipe a essayé cela, le système a obtenu un score de « précision » de 88 %, mais c'était un mensonge. Il ignorait complètement les robots. Il a échoué à identifier les classes minoritaires de robots presque 100 % du temps. C'était comme un détecteur de métaux qui émet un signal pour tout, mais ne sonne que pour les pièces de monnaie, en ignorant tout l'or.
La solution : Le « score pondéré »
Pour corriger cela, ils ont changé les règles du jeu. Ils ont dit au système : « Si vous devinez correctement « Humain », vous obtenez 1 point. Mais si vous devinez correctement un robot rare, vous obtenez 200 points.»
Cela a forcé le système à cesser d'être paresseux et à réellement apprendre à repérer les robots rares.
Le résultat :
- Avant : Le système était un « devineur d'humains » avec un score de 0,08 (terrible pour trouver des robots).
- Après : Avec les nouvelles règles, la capacité du système à trouver les robots spécifiques a bondi de 301 %. Il n'est pas devenu parfait, mais il a enfin commencé à voir les classes minoritaires au lieu de les ignorer.
Qu'ont-ils appris ? (Le « Pourquoi »)
L'équipe a regardé à l'intérieur du « cerveau » de leur système (en utilisant une visualisation appelée t-SNE) et a trouvé quelque chose d'intéressant :
- Tâche 1 (Humain vs IA) : Le code « Humain » et le code « IA » formaient deux îles distinctes et séparées. Le système pouvait facilement les distinguer.
- Tâche 2 (Quelle IA ?) : Tous les différents modèles d'IA (OpenAI, Meta, IBM, etc.) étaient regroupés en un seul gros tas désordonné, se superposant au code humain.
Pourquoi ?
- Régime alimentaire partagé : Tous ces robots ont été entraînés sur les mêmes données d'Internet (GitHub, StackOverflow), donc ils ont tous appris à écrire du code qui ressemble énormément.
- Même architecture : Ils utilisent tous des structures cérébrales similaires (transformers), donc leur « écriture manuelle » est presque identique.
- Les maths sont les maths : Il n'existe souvent que quelques façons correctes de résoudre un problème de programmation, donc tout le monde (humain ou robot) finit par écrire la même solution.
La conclusion
- Peut-on dire si le code est généré par une IA ? Oui, très bien, même si la langue change, à condition d'enseigner au système à regarder la structure plutôt que simplement les mots.
- Peut-on dire quelle IA l'a écrit ? C'est extrêmement difficile. Les différentes IA sont si similaires, et les données si déséquilibrées, que les méthodes standard échouent. Vous devez utiliser des astuces spéciales de « pondération » pour forcer le système à se soucier des cas rares.
Un avertissement : Les auteurs notent que leur système n'est pas parfait. Parfois, il confond un codeur humain très concis avec une IA, ou une IA verbeuse avec un humain. À cause de cela, ils déclarent que cet outil ne doit jamais être utilisé seul pour prendre des décisions qui changent une vie (comme licencier quelqu'un ou faire échouer un étudiant) ; un humain doit toujours vérifier les résultats.
Noyé(e) sous les articles dans votre domaine ?
Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.