Oracolul similarității textuale
Author: Mihai Nan
📚 Oracolul similarității 🔮
În Biblioteca Marelui Regat, arhiviștii se confruntă cu o sarcină tot mai dificilă:
mii de manuscrise, pergamente și cronică veche trebuie organizate, comparate și indexate.
Pentru a-i ajuta, strămoșii au creat un mecanism legendar: Oracolul similarității. Acesta este
un dispozitiv capabil să stabilească, cu o precizie remarcabilă, cât de asemănătoare
sunt două fragmente de text, întorcând un scor între 0 și 5.
Dar mecanismul s-a degradat în timp, iar Marele Consiliu al Arhiviștilor a decis că este nevoie
de o versiune modernă, construită folosind învățare automată.
Pentru aceasta, ți s-au pus la dispoziție două fișiere:
train.csv- pergamentele adnotate manual de scribitest.csv- perechi noi care trebuie analizate de soluția ta
Sarcina ta este să reconstruiești Oracolul printr-o serie de analize și un model predictiv final.
📊 Setul de date
Fiecare rând din fișierele train.csv și test.csv reprezintă o pereche de propoziții:
- sampleID – identificator unic al perechii
- sentence1 – primul text
- sentence2 – al doilea text
- score – doar în train.csv, o valoare reală între 0 și 5 care indică similaritatea
Scopul final este să prezici score pentru fiecare rând din test.csv.
📝 Task-uri
Pentru primele subtask-uri, trebuie să analizați datele furnizate în train.csv și test.csv
și să extrageți diferite informații relevante despre propozițiile din test.
Subtask 1 (10 puncte)
Calculați lungimea fiecărei propoziții (sentence1 și sentence2) pentru fiecare rând din setul de test
și etichetați perechea în funcție de lungimea medie:
Shortdacă media < 20Mediumdacă 20 ≤ media < 50Longdacă media ≥ 50
Subtask 2 (15 puncte)
Pentru fiecare rând din test, calculați numărul de cuvinte din fiecare propoziție (sentence1 și sentence2) și determinați numărul total după formula:
număr_total = nr_cuvinte(sentence1) + nr_cuvinte(sentence2)
Subtask 3 (15 puncte)
Stabiliți diferența absolută dintre lungimea sentence1 și lungimea sentence2
pentru fiecare rând din test.
Cu alte cuvinte, pentru fiecare rând trebuie să calculăm:
|nr_caractere(sentence1) - nr_caractere(sentence2)|
Subtask 4 (60 puncte)
Construiți un model de învățare automată capabil să prezică valoarea numerică score
pentru fiecare rând din test.csv.
Evaluarea finală se va face folosind MAE (Mean Absolute Error), calculat astfel:
🧮 Evaluare
Metrica pentru Subtask 4 este:
- MAE (Mean Absolute Error) (cu cât valoarea este mai mică, numărul de puncte o să fie mai mare).
- Dacă modelul obține MAE ≤ 0.65, soluția primește 60 puncte.
- Dacă modelul obține MAE ≥ 2.0, soluția primește 0 puncte.
- Pentru valori intermediare de MAE, punctajul se calculează proporțional.
Pentru subtasks 1-3, răspunsurile sunt evaluate exact.
📌 Note
- Tratamente precum tokenizare, embeddings, modele pre-antrenate sunt permise.
📄 Formatul fișierului de submisie
Fișierul submission.csv trebuie să conțină câte 4 linii pentru fiecare rând din test,
corespunzătoare celor 4 subtasks.
Structura:
subtaskID datapointID answer
Semnificația coloanelor:
-
subtaskID – un număr între 1 și 4
-
datapointID –
sampleIDdin test -
answer – rezultatul:
- Subtask 1:
Short/Medium/Long - Subtask 2: număr întreg
- Subtask 3: număr întreg
- Subtask 4: valoare reală (scor prezis)
- Subtask 1:
Exemplu pentru un sampleID = 1714:
subtaskID datapointID answer
1 1714 Medium
2 1714 15
3 1714 3
4 1714 3.74
Succes! Marele Consiliu al Arhiviștilor își pune speranțele în voi pentru a reînvia Oracolul similarității! 🧙♂️