Roboții vorbăreți
Autor: Alexandra Diaconu
Poveste
În anul 2026, Agenția Națională de Securitate Cibernetică a interceptat o serie de transmisii audio cruciale venite din partea a trei facțiuni robotice suspecte, cunoscute sub numele de cod:
- Facțiunea IronClad
- Facțiunea Prism
- Facțiunea Genesis
Misiunea voastră este să descifrați secretele ascunse în aceste fișiere audio și să demascați o infiltrare majoră. Investigarea se va desfășura în trei două critice.
Toate fișierele audio sunt în format .wav. Fiecare facțiune robotică folosește un algoritm unic de sinteză, însă în cadrul aceleiași facțiuni pot exista mai multe profile vocale (voci diferite) pentru a induce în eroare investigatorii.
Task 1: Triangularea mesajelor (40 puncte)
S-a descoperit că aceste trei tipuri de roboți au transmis aceleași de mesaje secrete, dar fiecare le-a citit folosind propria tehnologie de sinteză. Agenția a interceptat un pachet de de fișiere audio.
Primiți un set de de fișiere .wav. Știind că în acest set există exact de texte unice și că fiecare text a fost citit exact o dată de către fiecare dintre cei 3 roboți, grupați fișierele în serii de câte 3. Fiecare triplet trebuie să conțină exact aceleași cuvinte rostite, dar de roboți diferiți.
Task 2: Identificarea facțiunilor (60 puncte)
Războiul undelor audio s-a intensificat. Fiecare facțiune folosește zeci de identități vocale diferite pentru a-și ascunde urmele, mutând comunicațiile pe frecvențe dinamice. Agenții noștri de pe teren au reușit totuși o lovitură de proporții: au interceptat serverul central de calibrare și au extras un set de date etichetat. Misiunea voastră este să folosiți aceste mostre pentru a antrena un sistem de recunoaștere capabil să identifice instantaneu originea oricărei transmisii noi, izolând amprenta digitală unică a celor trei tehnologii de sinteză.
Vi se pune la dispoziție un set de antrenare format din de fișiere audio etichetate (exact câte de mostre pentru fiecare dintre cele trei facțiuni: IronClad, Prism și Genesis).
Folosind aceste date pentru a învăța particularitățile acustice ale fiecărui algoritm, va trebui să analizați un set de test ce conține de fișiere audio interceptate recent. Determinați, pentru fiecare fișier din setul de test, cărei facțiuni îi aparține ( pentru IronClad, pentru Prism, pentru Genesis).
Structura fișierelor de input și formatul datelor
Această secțiune clarifică modul în care sunt organizate fișierele de input pentru cele trei subtasks și cum trebuie folosite numele fișierelor în submisie.
Structura generală a datelor
Datele sunt organizate în următoarea structură de foldere:
task1/ 001.wav 002.wav ... 300.wavtask2/ task2_train.csv train/ 048.wav 049.wav ... test/ 001.wav 002.wav ... 400.wavToate fișierele audio sunt în format .wav.
Numele fișierelor trebuie folosite exact așa cum apar în foldere, inclusiv extensia .wav.
Task 1 - Structura inputului
Folderul task1/ conține cele de fișiere .wav care trebuie grupate în de triplete.
Fiecare triplet trebuie să conțină trei fișiere audio care reprezintă același mesaj, rostit de trei roboți diferiți.
Exemplu de fișiere în folder:
task1/ 001.wav 002.wav 003.wav ...În fișierul de submisie, pentru Subtask 1, datapointID poate fi un identificator numeric de la 1 la 100.
Exemplu:
datapointID,subtaskID,answer1,1,"001.wav|007.wav|009.wav"2,1,"014.wav|120.wav|233.wav"Reguli importante:
- trebuie trimise exact
100de linii pentrusubtaskID = 1; - fiecare valoare din
answertrebuie să conțină exact3nume de fișiere.wav; - cele 3 nume de fișiere se separă prin caracterul
|; - fiecare fișier din
task1/trebuie să apară exact o singură dată în toate tripletele; - ordinea fișierelor dintr-un triplet nu contează;
- ordinea tripletelor în CSV nu contează.
Task 2 - Structura inputului
Pentru Task 2 se oferă:
- folderul
task2/train/, care conține fișierele audio de antrenare; - fișierul
task2/task2_train.csv, care conține etichetele pentru fișierele dintask2/train/; - folderul
task2/test/, care conține cele 400 de fișiere audio pentru care trebuie prezisă clasa.
Formatul fișierului task2/task2_train.csv
Fișierul task2/task2_train.csv folosește separatorul ; și conține următoarele coloane:
name;classUnde:
nameeste numele fișierului.wavdin folderultask2/train/;classeste clasa facțiunii.
Clasele posibile sunt:
1 = IronClad2 = Prism3 = GenesisExemplu:
name;class048.wav;1049.wav;2050.wav;3Folderul de test pentru Task 2
Folderul task2/test/ conține cele 400 de fișiere pentru care trebuie generate predicții.
Exemplu:
task2/test/ 001.wav 002.wav ... 400.wavPentru fiecare fișier din task2/test/, submisia trebuie să conțină o linie cu:
datapointID,subtaskID,answer001.wav,2,1002.wav,2,3003.wav,2,2Reguli importante:
- trebuie trimise exact
400de linii pentrusubtaskID = 2; datapointIDeste numele fișierului audio dintask2/test/;- nu se include calea completă, de exemplu se scrie
001.wav, nutask2/test/001.wav; answertrebuie să fie una dintre valorile1,2,3.
Atenție: fișierele de antrenare pentru Task 2 nu sunt organizate în subfoldere pe clase. Etichetele se citesc din fișierul task2/task2_train.csv.
Format fișier de submisie
Fișierul de submisie va fi un fișier CSV cu următoarele coloane:
datapointID,subtaskID,answerUnde:
datapointIDidentifică datapoint-ul evaluat;subtaskIDidentifică subtask-ul:1sau2;answerconține predicția participantului.
Subtask 1 - Triangularea mesajelor
Pentru Subtask 1, fiecare linie reprezintă un triplet format din numele a 3 fișiere care conțin același mesaj.
Format
datapointID,subtaskID,answer1,1,"001.wav|007.wav|009.wav"2,1,"014.wav|120.wav|233.wav"3,1,"002.wav|088.wav|177.wav"Reguli
- trebuie trimise exact 100 de linii pentru
subtaskID = 1; - fiecare valoare din
answertrebuie să conțină exact 3 nume de fișiere.wav; - fișierele dintr-un triplet vor fi separate prin caracterul
|; - fiecare fișier dintre cele 300 trebuie să apară exact o singură dată;
- ordinea fișierelor în interiorul unui triplet nu contează;
- ordinea tripletelor în fișier nu contează la fel și ordinea pentru
datapointID.
Exemplu de răspuns valid
datapointID,subtaskID,answer1,1,"001.wav|007.wav|009.wav"2,1,"014.wav|120.wav|233.wav"Subtask 2 - Identificarea facțiunilor
Pentru Subtask 2, fiecare linie reprezintă predicția pentru un fișier audio din setul de test.
Format
datapointID,subtaskID,answer001.wav,2,1002.wav,2,3003.wav,2,2Clase
Valoarea din coloana answer trebuie să fie una dintre:
1 = IronClad2 = Prism3 = GenesisReguli
- trebuie trimise exact 400 de linii pentru
subtaskID = 2; datapointIDeste numele fișierului audio din test;answertrebuie să fie una dintre valorile1,2,3.
Exemplu complet de fișier de submisie
datapointID,subtaskID,answer1,1,"001.wav|007.wav|009.wav"2,1,"014.wav|120.wav|233.wav"3,1,"002.wav|088.wav|177.wav"001.wav,2,1002.wav,2,3003.wav,2,2Metrici de evaluare
Subtask 1 - Triplete corecte
Pentru Subtask 1, se evaluează câte triplete au fost identificate corect.
Un triplet este considerat corect dacă cele 3 fișiere din predicție corespund exact aceluiași mesaj din ground truth.
Ordinea fișierelor din triplet nu contează.
Exemplu
Ground truth:001.wav|007.wav|009.wavPredicție:009.wav|001.wav|007.wavAcest triplet este considerat corect.
Metrică
score_task1 = număr_triplete_corecte / 100Punctajul pentru Subtask 1 este:
punctaj_task1 = 40 * score_task1Cazuri invalide
Un triplet poate fi considerat invalid dacă:
- conține mai puțin sau mai mult de 3 fișiere;
- conține fișiere inexistente;
- conține același fișier de mai multe ori;
- folosește un fișier care apare deja într-un alt triplet;
- conține fișiere care nu aparțin aceluiași mesaj.
Tripletele invalide primesc 0 puncte.
Subtask 2 - Accuracy multiclasă
Pentru Subtask 2, se folosește accuracy.
Se compară eticheta prezisă cu eticheta reală pentru fiecare dintre cele 400 de fișiere din test.
Metrică
accuracy_task2 = număr_predicții_corecte / 400Punctajul pentru Subtask 2 este:
punctaj_task2 = 60 * accuracy_task2Observație: Dacă pentru task-ul 2, atunci primiți punctaj maxim.
Scor final
Scorul final este suma punctajelor celor două task-uri.
scor_final = punctaj_task1 + punctaj_task2Metrica generală afișată este calculată ca medie aritmetică între metricile de la cele 2 task-uri.