Skip to main content

Oracolul similarității textuale

Author: Mihai Nan

Medium
Your best score: N/A
Problem Description

📚 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 scribi
  • test.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
  • scoredoar î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:

  • Short dacă media < 20
  • Medium dacă 20 ≤ media < 50
  • Long dacă 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:

MAE


🧮 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

  • datapointIDsampleID din test

  • answer – rezultatul:

    • Subtask 1: Short / Medium / Long
    • Subtask 2: număr întreg
    • Subtask 3: număr întreg
    • Subtask 4: valoare reală (scor prezis)

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! 🧙‍♂️

Submit Solution
Upload output file and optionally source code for evaluation.

Submission File

Source Code File (optional)

Sign in to upload a submission.