Documente Academic
Documente Profesional
Documente Cultură
Lab3 PI
Lab3 PI
RAPORT
Lucrare de laborator nr.3
la cursul „Procesarea Informației”
Tema:„ Extragerea Informației”
Chișinău 2021
Cuprins
Introducere............................................................................................................................................2
1 Sarcina................................................................................................................................................3
Concluzie...............................................................................................................................................7
Bibliografie...........................................................................................................................................8
Anexa 1.................................................................................................................................................9
Anexa 2.................................................................................................................................................9
Anexa 3.................................................................................................................................................9
Anexa 4...............................................................................................................................................10
1
INTRODUCERE
2
1 Sarcina
1. De extras toate elementele textului care pot fi Entități Numite (Named Entities) cu ajutorul unui
script mic cu expresii regulate. Candidații posibili sunt: cuvintele ce se încep cu majuscula;
câteva cuvinte la rând care se încep cu majusculă, abrevieri din câteva majuscule, cifre, etc.
2. De clasificat fragmentele extrase utilizând resursele care puteți găsi: listele localităților,
organizațiilor, numelor persoanelor, etc. O resursă posibilă ar fi
https://ec.europa.eu/jrc/en/language-technologies/jrc-names
3. De analizat cuvintele ce au rămas neclasificate în baza resurselor disponibile.
4. De extras și de analizat cuvintele învecinate cu entitățile numite. Care din cuvintele acestea pot
fi utilizate ca indicatori pentru clasificarea entităților numite?
5. De creat un script în care de încadrat extragerea entităților numite, clasificarea lor cu ajutorul
listelor speciale și cuvintelor indicatoare.
6. De evaluat rezultatele extragerii calculând Precision și Recall.
7. De analizat rezultatul obținut de script și de gândit ce se mai poate de făcut pentru a mări
Precision și Recall.
8. De scris concluzia în care :
a. De prezentat rezultatele obținute (Precision, Recall)
b. De analizat erorile extragerii și clasificării.
c. De propus căile de rezolvare a problemelor evidențiate.
3
1. În figura 1.1 sunt reprezentate o parte din elementele textului ce sunt Entități Numite cu ajutorul
unui script Python. Entitățile selectate sunt cuvintele ce se încep cu majusculă. Pentru a vizualiza
codul, vezi Anexa 1.
2. În continuare se vor clasifica fragmentele extrase utilizând o resursă în engleză și alta în română.
În figura 1.2 sunt evidențiate elementele selectate. S-au evidențiat entități ca organizații, date,
numere ordinale și cardinale. Pentru realizarea acestui task a fost folosită biblioteca open-source
spaCy, care a fost importată la începutul scriptului. Pentru a vizualiza textul se rulează codul
(scriptul din Anexa 2) și se deschide în browser localhost:5000.
4
Figura 2. 2 Resursa în română cu entitățile selectate
Următoarea resursă este deja în română după câte se observă în figura 1.3. Aici pe lângă
entitatea Organizații, întâlnită în textul anterior, sunt prezente și altele, cum ar fi: persoane, entități
geo-politice (GPE). Pentru ca scriptul să detecteze în ce limbă e textul au fost folosite diferite
visualizers pentru entități. Pentru limba engleză s-a folosit următoarea linie de cod -
spacy.load("en_core_web_sm") și pentru limba română - spacy.load("ro_core_news_sm"). Codul
corespunzător fiind atașat în Anexa 3.
3. Resursa în limba engleză nu conține elemente care nu au fost neclasificate conform entităților
disponibile, pe când în cea română s-a omis de câteva ori selectarea elementului ”Gusinski” și
”Putin” pentru entitatea Persoană.
4. Unele cuvinte învecinate cu entitățile din textul englez sunt: the, of, by, to, identifies, names, for.
Consider că pentru determinarea numerelor ordinare din text, identificatorul a fost prepoziția
”the”, iar pentru determinarea datei ”March 2016” prepoziția ”by”.
Cuvintele învecinate pentru resursa română sunt: la, arestat, în, din, al lui, din, al. În cazul dat
ca indetificatori pentru determinarea entității GPE au fost prepozițiile ”la, din, al”, iar pentru
persoane ”al lui”.
5. Scriptul din Anexa 4 generează listă cu entități extrase din resursa în engleză, acestea pot fi
vizualizate în figura următoare.
5
6. Calcularea Precision și Recall pentru entitatea Date în resursa engleză:
True positive 2 1
Precision= = = =0.5
(True positive+ False positive) (2+2) 2
True positive 2 2
Recall= = = =1
(True positive+ Falsenegative) (2+ 0) 2
True positive 2 1
Precision= = = =0.5
(True positive+ False positive) (2+2) 2
True positive 2 1
Recall= = = =0,33
(True positive+ False negative) (2+3) 3
7. Precision și Recall sunt în compromis. În mod obișnuit, creșterea preciziei pentru un anumit
model implică scăderea recall-ului. Dacă se va crește precizia, s-ar putea ajunge la prețul scăderii
recall-ului și invers. Va trebui să se găsească echilibrul care funcționează pentru cazuri
individuale de utilizare. Îmbunătățirea recall-ului implică adăugarea de date text etichetate mai
precis la eticheta în cauză. În acest caz, trebuie de căutat textele care ar trebui să fie în această
etichetă, dar care nu sunt sau au fost prezise incorect (False Negative). Cel mai bun mod de a
găsi aceste tipuri de texte este să fie căutate folosind cuvinte cheie.
6
Concluzie
În cadrul laboratorului respectiv s-a lucrat cu extragerea informației din două resurse paralel,
una în română și alta în limba engleză. Cu ajutorul diferitor scripturi și în special al bibliotecii
spaCy, s-au clasificat diferite entități, precum Persoane, Organizații, Locații, Date. S-au efectuat
calcule pe baza la calitatea extragerii automate a acestor elemente și anume s-a calculat Precision și
Recall. În cele din urmă, concluzionez că Precision are valoarea 0.5/0.5 (valorile calculelor ambelor
resurse), iar Recall-ul – 1/0.33. Sa observat careva erori la entitatea Person, selectând și elemente
abstracte, precum ”proprietarul”, dar acest element a fost clasificat incorect, deoarece nu semnifică o
persoană exactă. De asemenea, au fost elemente neclasificate, dar care ar fi trebuit.
Spre rezolvarea acestor probleme aș propune ca pentru selectarea persoanelor spre exemplu,
să se ia în considerație litera majusculă de la începutul cuvântului. La fel, pentru determinarea
datelor să se ia în considerare prezența cifrelor. Cuvintele cheie tot au un rol deosebit în clasificarea
entităților, de aceea ele nu trebuie evitate.
Concluzionez că lucrul în cadrul laboratorului a fost unul eficient și interesant.
7
Bibliografie
1. https://en.wikipedia.org/wiki/Information_extraction
2. https://ec.europa.eu/jrc/en/language-technologies/jrc-names
3. https://help.monkeylearn.com/en/articles/2173839-improving-recall-and-precision
8
Anexa 1:
def count_capital_words(filename):
count = 0
with open(filename, 'r') as fp:
for line in fp:
for word in line.split():
if word.istitle():
print(word)
count += 1
return count
print(count_capital_words('16Jun2000baniafaceri.txt'))
9
Anexa 2
import spacy
from spacy import displacy
text = "The first release of JRC-Names (September 2011) contained the names of about 205,000
distinct known entities, plus about the same amount of variant spellings for these entities.
Additionally, it contains a number of morphologically inflected variants of these names. By March
2016, the resource has grown to 307,000 distinct entities plus 333,000 variants. EMM identifies new
names every day, and a file including also the most recently found names and name spellings is
available for daily download from the JRC's web pages. "
nlp = spacy.load("en_core_web_sm")
doc = nlp(text)
displacy.serve(doc, style="ent")
Anexa 3
import spacy
text = " Nu rideti cind bate crivatul! Marti, la Moscova, a fost arestat Vladimir Gusinski. Numele
sau e prea putin cunoscut in Romania. Gusinski este proprietarul celebrului post de televiziune NTV
din Rusia si al altor citorva canale media. Gusinski nu era un apropiat al lui Vladimir Putin.
Dimpotriva. A criticat mereu razboiul din Cecenia, care l-a adus pe Putin in fotoliul de presedinte
al Rusiei, si nu s-a sfiit sa-i puna probleme de cite ori a avut ocazia. "
nlp = spacy.load("ro_core_news_sm")
doc = nlp(text)
displacy.serve(doc, style="ent")
Anexa 4
import spacy
10
from spacy import displacy
import en_core_web_sm
nlp = en_core_web_sm.load()
doc = nlp("The first release of JRC-Names (September 2011) contained the names of about 205,000
distinct known entities, plus about the same amount of variant spellings for these entities.
Additionally, it contains a number of morphologically inflected variants of these names. By March
2016, the resource has grown to 307,000 distinct entities plus 333,000 variants. EMM identifies new
names every day, and a file including also the most recently found names and name spellings is
available for daily download from the JRC's web pages.")
import spacy
import en_core_web_sm
nlp = en_core_web_sm.load()
doc = nlp("Nu rideti cind bate crivatul! Marti, la Moscova, a fost arestat Vladimir Gusinski. Numele
sau e prea putin cunoscut in Romania. Gusinski este proprietarul celebrului post de televiziune NTV
din Rusia si al altor citorva canale media. Gusinski nu era un apropiat al lui Vladimir Putin.
Dimpotriva. A criticat mereu razboiul din Cecenia, care l-a adus pe Putin in fotoliul de presedinte
al Rusiei, si nu s-a sfiit sa-i puna probleme de cite ori a avut ocazia.")
11
12