Setul de date se gaseste aici. Descrierea setului de date se gaseste aici.
Scop: Obtinerea de date despre statistice legate de continutul bazei de date si afisarea acestora in format grafic
Input: Baza de date (fisierul pickle)
Output: Pandas dataframes (pentru implementare fara interfata grafica) sau interfata grafica pentru acces statistici
Optiuni:
A. Numarul mediu de propozitii per literal
B. Numarul mediu de synset-uri candidat (fara synsetul „-1“) per literal
C. Pentru fiecare literal a cate *n* propozitii si *s* synseturi, se poate obtine calculul distributiei la nivel de literal pentru synset-urile posibile. Mai concret, se obtin statistici finale care cuprind listati lieralii si pentru fiecare dintre acestia sunt calculate metricile: media, varianta, deviatia standard, skewness (indicele/coeficient de asimetrie), numarul de synset-uri cu zero propozitii si suma totala de propozitii per literal.
De exemplu, pentru 10 propozitii, presupunand 3 synseturi posibile (din care se ignora synsetul „-1“) numite 1, 2 si 3, se pot exista: 7 propozitii cu synsetul corect 1, 3 pentru synsetul 2 si nicio propozitie pentru synsetul 3 (deci o distributie de 7-3-0). Pentru acest sir de valori se poate calcula: media, varianta, deviatia standard, skewness (indicele/coeficient de asimetrie). Daca se adauga in afara de cele 4 valori pt fiecare literal si numarul de synset-uri cu zero propozitii (in exemplul de aici: 1 synset nu are nicio propozitie cu synsetul corect ales 3), suma totala de propozitii per literal este 10 (aceasta ultima masura trebuie calculata oricum pentru A).
D. Lista tuturor synseturilor atinse si numarul de propozitii pentru fiecare.
De exemplu, un synset are 3 literali. Lista tuturor synseturilor se preia din RoWordNet, (Data + API for Python) (github.com). Se poate intampla ca in baza de date sa existe 0, 1, 2 sau 3 literali care sa aiba un anumit numar de propozitii. Concret, pentru fiecare synset (substantiv) din RoWordNet se calculeaza numarul literalilor acoperiti din baza de date, cu specificarea clara a acestora sub forma unui fisier usor de urmarit. Deci se obtine lista cu synseturi si pentru fiecare literal din fiecare synset (extras din RoWordNet) este returnat numarul de propozitii acoperite de catre fiecare literal. Un alt rezultat este determinat de suma de propozitii pt toti literalii fiecarui synset.
E.Lista cu numar de propozitii realizat de catre fiecare utilizator/user.
Concluzie: Din toate aceste date va rezulta acoperirea bazei de date (exp. numarul de synseturi acoperite).
Scop: La exportul din baza de date in format json (i) se obtine o distributie similara intre exemplele din multimile de antrenare, validare si testare și (ii) se pot generara de statistici.
Input: Fisierul pickle.
Output: 3 fisiere json in acelasi format ca cel din baza de date pickle si o metrica propusa care demonstreaza ca distributia intre split-uri este similara. Exemplul de metrica este dat mai jos.
Multimea de literali este impartita intr-un procent de x% antrenare, y% validare si z% testare, unde x + y + z = 1.
Similar, propozitiile sunt impartite in acelasi format x% antrenare, y% validare si z% testare, unde x + y + z = 1.
Exemplu: presupunem existenta unui literal cu 20 de propozitii si 5 synseturi, cu urmatoarea distributie: 10, 4, 6, 0, 0. Interpretare: 10 propozitii pt synset-ul 1, 4 pt synsetul 2, 6 pentru synsetul 3 etc. Daca x = 0.8 (adica 80%), y si z = 0.1 (adica 10% fiecare), submultimea de date destinate antrenarii contine:
8 propozitii din cele 10 (80%) pt synsetul 1,
2 propozitii din 4 pt synsetul 2,
4 propozitii din 6 pt synsetul 3,
0 si 0 pt synseturile 4 si 5.
Interpretare distributie antrenare/validare/testare: pt xyz = 0.8 0.1 0.1
| Synseturi | #1 | #2 | #3 | #4 | #5 |
|---|---|---|---|---|---|
| Literalul initial are | 10 | 4 | 6 | 0 | 0 |
| Antrenare va avea | 8 | 2 | 4 | 0 | 0 |
| Validalidarea va avea | 1 | 1 | 1 | 0 | 0 |
| Testarea va avea | 1 | 1 | 1 | 0 | 0 |
Explicatie: un numar de x = 80% din propozitii vor fi distribuite in setul de antrenare pt synseul 1, y = 10% si z = 10% in validare si testare. INSA, la synsetul 2 avem 0.1*4 propozitii < 1 propozitie. Deci, va trebui sa mutam o propozitie intreaga cu prioritate pentru datele de test, inca (minim) una pentru datele de validare (tot 0.1 are si valid) si ce ramane se muta la setul de antrenare. Atentie! Se observa ca setul de date de validare si cel de test au prioritate la calcularea procentuala a numarului de propozitii corespunzator fiecarui synset in parte: TESTARE > VALIDARE > ANTRENARE. De aceea, pt synsetul 3 se alege o propozitie pentru testare si una pentru validare, iar restul in multimea de antrenare.
Hint: Se poate calcula pentru test parte_intreaga_functie_ceil(z * <cate_propozitii_are_synsetul>), astfel incat valorile mai mici decat 1 sa devina 1.
Generare statistici:
- literali din datele de test si validare care nu apar in propozitii in setul de antrenare, dacă este cazul
- explorarea datelor din mulțimile generate și elaborarea de analize.
Exemplu de metrica simpla pentru un total de N literali ai caror propozitii trebuie sa fie impartite in 3 parti (train/dev/test).
Daca se poate gasi o metrica buna care determine daca un literal este bine balansat, atunci se poate face media intre toti literalii astfel incat sa se obtina o metrica la nivel de dataset (suma metrica literal / N). Deci subproblema devine obtinerea unei metrici la nivel de literal.
Continuare. Daca un literal are M propozitii valide (ignorandu-se TOATE propozitiile cu synset_correct = -1 cu propozitia respectiva invalida, aceasta nu se ia in calcul, nu trebuie sa apara nicaieri), M este intre 0 si oricat. Daca M = 0 (de exp. un literal are 10 propozitii invalide), se ignora literalul.
Fiecare propozitie are un synset corect din cele S synseturi posibile pentru acest literal.
Se pune problema distribuirii celor M propozitii in 3 parti (cu partarea raportului intre M si S pentru fiecare parte).
Distributia poate avea pentru M = 10 propozitii, cu S = 3 synseturi posibile, urmatoarea impartire:
propozitiile 1-6 au sysnetul corect S1
7-9 cu synsetul corect S2
propozitia 10 cu synsetul corect S3
si, impartite 80% train, 10% dev, 10% train, se obtine:
test: propozitia 1, 7 si 10 (a.i. in test exista synseturile corecte S1 S2 si S3)
dev: propozitia 2 si 8 (cu synseturile S1 si S2, nu mai sunt propozitii pt S3 ca sunt deja in test care are prioritate mai mare)
train: restul de propozitii 3, 4, 5, 6 (cu S1) si 9 (cu S2).
O metrica simpla ar verifica sa existe 3 din 3 synseturi (aici S = 3 in exemplu) in train, test si dev. Adica, daca in test, exista 3/3 = 1.0, in dev exista 2/3 = 0.66, in train exista 2/3 synseturi corecte prezente = 0.66. Deci, metrica pentru acest literal este (1.0 + 0.66 + 0.66)/ 3
Scop: Pentru dataset, este creat un model care primeste o propozitie, un cuvant tinta din propozitie (substantiv) si este ales synset-ul corect pentru el.
Metode de rezolvare atinse:
- Algoritmul lui Lesk. Exista numeroase resurse care explica algoritmul, multe implementari, insa nu pe wordnet-ul romanesc. Scopul este implementarea acestui algorithm.
- Metoda bazata pe retele neuronale, implementare la alegere (in care este utilizat datasetul impartit random in 3 parti: 80% train, 10% dev si 10% test pentru retele neuronale, antrenare pe train pana cand nu se imbunatatesc rezultatele pe dev, cu testare pe test).
Metrica modelului, dandu-se tot datasetul, este acuratetea
- la nivel global (numarul de synseturi alese corect din numarul de propozitii date),
- la nivel de literal (pentru cuvantul x, de cate ori este ales sensul (synset-ul) corect). Sensul corect exista deja in dataset, marcat.