Sunteți pe pagina 1din 7

Tema: Învățarea aprofundată și procesarea

limbajului natural, sau cum Facebook


traduce postările

Obiectivele lecției:
1. Vei afla cum exact sunt aplicați algoritmii de învățare aprofundată pentru a
face ca calculatoarele să înțeleagă limbajul uman
2. Vei cunoaște cum să utilizezi învățarea prin transfer pentru a crea rețele
neuronale specializate anume pe problema ta
3. Vei afla în profunzime ce algoritmi și metode stau la baza procesării
limbajului natural, și ce a stat la baza acestui domeniu

Acum că înțelegem ce instrumente se utilizează pentru a face ca mașinile


să poată privi lumea ca oamenii, sau măcar să încerce, e timpul să descoperim
cum acestea mai pot și să ne înțeleagă, sau pe cât e de posibil acest lucru.
Scrisul a apărut cam 5000 de ani în urmă, poate chiar mai devreme, și de
atunci omenirea nu s-a mai oprit din a scrie. Majoritatea cunoștințelor sunt scrise,
pentru a fi mai comod să le transmitem din generație în generație. E de la sine
înțeles că dacă vrem eventual să creăm un algoritm sau sistem de inteligență
artificială adevărată, acesta va trebui să ne înțeleagă, atât ca persoane în parte,
cât și ca un tot întreg, omenirea.
Imaginează-ți, cât de fabulos ar fi dacă am putea sa comunicăm cu roboții
de parcă am discuta pe messenger. Iar comunicarea să nu fie limitata doar la
banalități, ci să putem discuta probleme interesante și situații cu mulți participanți,
iar feedback-ul care să-l primim sa fie unul relevant contextului.

Definirea problemei
La fel ca și cu vederea artificială, înțelegerea scrisului, colocvial sau nu,
necesită o definire clară a problemei, de altfel ne-am pierde în dezbateri despre
progresul pe care îl facem și în general în ce direcție trebuie să o luăm în
domeniul dat. Și iarăși, ca în cazul vederii artificiale, avem câteva probleme, de
complexitate diferită, ce în ansamblu sumarizează capacitățile pe care le dorim de
la algoritmi.
Cea mai simplă problemă este clasificarea. Cred că nu e nevoie să explic
ce este asta. Totuși există câteva aspecte specifice pentru problema de
clasificare în cazul procesării limbajului natural, apropo, așa se numește
subdomeniul inteligenței artificiale preocupate de a face mașinile să înțeleagă
textul și vorbirea scrisă. În primul rând, clasificarea poate fi a propozițiilor, sau
poate a unor texte întregi, de obicei asta se numește clasificarea secvențelor. Un
exemplu clasic de clasificare a secvențelor este un filtru de spam în email, sau
determinarea sentimentului textului (pozitiv sau negativ).
Mai există și posibilitatea de a clasifica fiecare cuvânt în parte.
Imaginează-ți că există algoritmi care sunt capabili de a face analiza morfologică,
sau chiar sintactică a unei fraze. Din păcate pentru tine, și din fericire pentru
profesorii de limbă română, asemenea algoritmi nu prea lucrează cu limba
română, deși e doar o chestie de date. Deci, ca exemple de clasificare ce
lucrează la nivel de cuvinte în parte, pe lângă analiza sintactică și morfologică,
mai avem și recunoașterea entităților, mai exact, a numelor proprii, și specificarea
ce sunt ele. Un astfel de algoritm ar fi capabil de a ne spune că în propoziția
“Marin lucrează de ceva timp la Facebook în Menlo Park, San Francisco” Marin
este persoană, Facebook - nume de companie sau organizație, Menlo Park și
San Francisco - locații geografice. Extragerea acestor entități este deseori
crucială pentru companii ce de exemplu, lucrează cu documente legale, sau
prestează servicii de reclamă, sau motoare de căutare.
După clasificare, o altă problemă des întâlnită este generarea de text, sau
modelarea limbajului. Cel mai simplu exemplu - autocorecția din telefonul tău,
sau dacă ai scris vreodată un email via Gmail, poate ai observat că acesta uneori
îți poate sugera ce să scrii mai departe.
Încă o problemă de importanță majoră este traducerea. Dacă nu știai până
acum, Google utilizează o rețea neuronală imensă pentru Google Translate. Mai
mult de atât, ei utilizează o singură rețea pentru toate limbile! Fascinant, tu ce
spui? Și ca să menținem acest vibe, mai departe în cadrul lecției date o să-ți
explic mai detaliat care este algoritmul utilizat.
Dacă crezi că traducerea este o problemă complicată, ce spui despre
capacitatea unui algoritm de a răspunde la întrebări, nu chiar ca la “Ce? Unde?
Când?”, mai mult ca la grădiniță, dar oricum. De fapt, la moment mulți cercetători
se focuseaza anume pe această problemă ca să identifice capacitatea algoritmilor
de a înțelege cu adevărat limbajul natural, nu doar de a găsi legități statistice.
Mai există și alte probleme, la fel foarte complicate, dar care țin deja de
lingvistică. Spre exemplu așa numita rezolvare a referințelor. ‘Maria a lăsat pe
masă cana. Ea era murdară.“ La cine se referă “ea”? Sperăm că nu la Maria, așa
că mult probabil cana era murdară. Un asemenea exemplu e complicat pentru o
persoană cu inteligență naturală, imaginează-ți cât de greu le vine calculatoarelor.

Algoritmi și reprezentări
Acum că înțelegi spectrul de probleme care sunt utilizate pentru a evalua
capacitățile algoritmilor moderni, e timpul să ne aprofundăm în cum funcționează
și care sunt acești algoritmi.
În primul rând, trebuie să înțelegi că marea majoritate a algoritmilor de
învățare automată sau aprofundată nu pot lucra cu textul în mod direct. Aceștia
necesită cifre, din motiv că în interior au loc adunări, înmulțiri, și tot felul de alte
operații. Cum ai putea să înmulțești “Crăciun” cu “fericit”? Pe cât de straniu nu ar
suna, dar răspunsul nu este “nicicum”, ci mai degrabă “dar care este
reprezentarea numerică a acestor cuvinte”.
Pe parcursul deceniilor au fost propuse mai multe scheme de codare a
cuvintelor în formă numerică, astfel spre exemplu pot fi utilizați vectori rari (cu
multe zerouri) sub formă de numere de repetări per cuvânt per document.
Spre exemplu, pentru documentele:
1. Hai la mare
2. Vasile e băiat mare
3. Hai și-om sărbători ziua lui Vasile
O să avem tabelul:
Hai la mare Vasile e băiat și-om sărbători ziua lui

D1 1 1 1 0 0 0 0 0 0 0

D2 0 0 1 1 1 1 0 0 0 0

D3 1 0 0 1 0 0 1 1 1 1

Poți observa că fiecare rând reprezintă un document, în cazul nostru un


document fiind o propoziție. Deși codarea s-a primit binară în exemplul dat, putem
avea propoziții/documente unde un cuvânt se repetă de mai multe ori, atunci pe
poziția lui nu va fi 0 sau 1, ci numărul de repetări al acelui cuvânt în document.
O altă proprietate al acestei metode este că fiecare cuvânt la fel poate fi
reprezentat numeric, nu doar documentele. Reprezentarea numerică fiind poziția
cuvântului în vector. Adică Hai o să fie 0, la o să fie 1 iar ziua, spre exemplu, o să
fie 8.
O tehnică mai avansată este de a normaliza aceste valori cu numărul de
documente în care aceste cuvinte sunt întâlnite. Această variantă mai este numită
TF-IDF, din engleză term frequency - inverse document frequency. Astfel valorile
maxime vor fi asociate cuvintelor ce se întâlnesc des în puține documente. E
cumva și logic, pentru că un cuvânt des întâlnit în multe documente probabil este
un cuvânt cu puțină încărcătură semantică, adică nu ne spune mare treabă
despre un document concret, pe de altă parte, un cuvânt ce la fel este relativ des
întâlnit dar doar într-un număr mic de documente, sau poate chiar doar în unul,
probabil este specific anume acelor documente și efectiv un cuvânt cu un sens
important pentru procesarea acestor texte.

Astfel, formula pentru TF-IDF este:


Freq(t,d) x (ln(1+Nr_docs) - ln(1+Freq(d,t)) + 1) unde ln este logaritmul natural
De exemplu, pentru cuvântul mare în documentul D1 valoarea lui va fi
aproximativ: 1 x (1.386 - 1.099 + 1) = 1.287
Dacă să continuăm exemplul cu cele 3 documente de mai sus, dar de dat asta
utilizând TF-IDF o să obținem următorul tabel:

Hai la mare Vasile e băiat și-om sărbători ziua lui

D1 1.287 1.69 1.287 0 0 0 0 0 0 0

D2 0 0 1.287 1.287 1.69 1.69 0 0 0 0

D3 1.287 0 0 1.287 0 0 1.69 1.69 1.69 1.69

Problema acestor mecanisme este că vectorii se primesc lungi și rari, ceea


ce nu întotdeauna este eficient, din acest motiv au fost propuse alte mecanisme
de vectorizare a textelor. Cel mai popular mecanism “dens” este word2vec.
Word2vec este o mică rețea neuronală, mai exact un perceptron, care încearcă
să codeze cuvintele în termeni de probabilitatea lor de a apărea alături de alte
cuvinte.
Având reprezentarea numerică a textului, putem aplica algoritmi de
învățare automată, cum ar fi perceptronul, sau spre exemplu algoritmul Naive
Bayes. Naive Bayes, sau clasificatorul bayesian naiv, este un algoritm simplu ce
lucrează în baza probabilităților. Idea este de a estima probabilitatea fiecărei
valori al unui atribut, de exemplu fiecărui cuvânt, de a aparține unei clase sau
alteia, iar predicțiile se fac în baza produsului acestor probabilități și comparării
lor. Metoda este naivă din motiv că algoritmul asumă că fiecare atribut este
corelat (adică are o relație de dependență) doar cu clasa, și nu corelează cu alte
atribute. Un lucru care deseori este greșit. Totuși în practică acest algoritm
lucrează bine pentru unele probleme, de exemplu identificarea mesajelor spam.
Acest algoritm este numit bayesian din motiv că utilizează regula lui Bayes, din
probabilitate, pentru a calcula prezicerile.
Desigur acest algoritm, ca și majoritatea algoritmilor de învățare automată
clasică pot fi substituiți cu variante mai expresive bazate pe rețele neuronale.
Textul are o reprezentare destul de specifică, mai exact textul este format
din secvențe de cuvinte, și în majoritatea cazurilor cuvintele precedente pot
influența sensul celor următoare, mai rar invers. Aceste lucruri poate sună ca
niște banalități, dar cunoașterea acestor proprietăți ne permite să creăm rețele
neuronale cu o structură specifică, care să poată rula pe secvențe arbitrar de
lungi.
Aceste rețele neuronale se mai numesc recurente, din motiv că structura
lor ia în calcul nu doar datele de intrare, dar și starea internă precedenta, sau din
trecut, pentru a face o predicție. Rețelele neuronale recurente totuși nu sunt foarte
stabile, din acest motiv diferite tehnici de a le stabiliza și face să țină minte un
context mai vechi au fost propuse. O metoda extrem de populară, încă din anii 90,
este LSTM, adică long short-term memory, sau în românia, memorie de scurtă
durată lungă. Idea acestei arhitecturi este că la fiecare moment de timp celula
LSTM să decidă cât din contextul anterior și cât din cel curent să transmită mai
departe în viitor (Vezi figura mai jos).
O celulă LSTM este un caz special de rețea neuronală recurentă (Stânga) ce

transmite în viitor nu doar starea/ieșirea precedentă dar și o “memorie” sau


context. Din motiv că acest context este unul ce se decide la fiecare iterație,
este conceput ca un fel de memorie de scurtă durată, dar din motiv că acestă
memorie potențial poate fi transmisă intactă dintr-un capăt al secvenței
(începutul iterației) până în alt capăt, poate lua rol de memorie de lungă durată,
de aici și denumirea, memorie de scurtă durată lungă (LSTM). (Dreapta) Celula
LSTM este compusă din mai multe operații mai complexe, la moment nu este
nevoie să înțelegi întreg mecanismul.
Mai recent asemenea tehnici ca atenția și rețele neuronale numite
Transformers au fost propuse și deja destul de activ utilizate pentru probleme de
procesare de limbaj natural. Acești algoritmi permit preziceri incredibil de exacte.
Pe de altă parte, ca și orice altă tehnologie avansată, periodic dau greș în cele
mai neașteptate situații. Din acest motiv nu putem spune că procesarea limbajului
natural este o problemă definitiv rezolvată, chiar dacă avem soluții utile și
puternice.
Utilizarea modelelor Transformer, adică bazate pe mecanisme de atenție,
pe langa performanțe excelente au mai permis și utilizarea eficientă a numeroase
trucuri de antrenare și adaptare a modelelor date. Spre exemplu, aplicarea
învățării prin transfer pentru modelele transformer este la fel de simpla ca pentru
modelele de vedere computationala. De asemenea, modelele gen GPT și BERT
de la OpenAI și Google, respectiv, utilizează și metode eficiente de preantrenare,
precum învățarea auto-supervizată și combinarea a mai multe probleme de
optimizare, un fel de multi-tasking. Spre exemplu, familia de modele GPT este
antrenată pe un volum extrem de mare de text, mai exact o combinatie de pagini
web și toată Wikipedia, în toate limbile disponibile, dar nu într-un mod pe care l-
am putea numi pur supervizat. Astfel modelele GPT încearcă sa prezica
următorul cuvant, fiindu-i dată o propozitie. La un nivel mai înalt, acestea învață
sa derive paragrafe întregi din cateva cuvinte sau propozitii de început. BERT pe
de alta parte încearca sa prezica cuvintele lipsa dintr-o propozitie și combină
aceasta problemă de antrenare cu prezicerea dacă doua propozitii sunt alături în
text sau nu. Astfel aplicând principiile de învățare auto-supervizată, adică
extragere a semnalului de supervizare din însăși datele neadnotate, și învățare
multi-task, prin combinarea problemelor de învățare.
Un exemplu de aplicare a ultimelor tehnologii în domeniul procesării
limbajului natural, pe scara largă, cu utilizarea rețelelor neuronale, este Google
Translate. Inițial serviciul era bazat pe tehnici de învățare automată clasică și
suporta doar cateva limbi, iar preprocesarea era una destul de anevoioasa. Însă
în 2014, Google a decis sa incerce utilizarea rețelelor neuronale LSTM pentru o
probleme de prezicere de tip seq2seq, adică transformarea unei secvențe de
elemente în alta secvența. Traducerea poate fi modelată drept o astfel de
problema, spre exemplu din secvența [“În”, “Moldova”, “au”, “avut”, “loc”, “alegeri”]
în [“In”, “Moldova”, “there”, “were”, “elections”]. Google Translate, utilizând
arhitectura LSTM cu un mecanism de atenție, a reușit peste noapte sa suporte
aproape 100 de limbi si sa o faca cu o precizie incomparabilă cu versiunile
anterioare, dar și cu concurenții acesteia.
Mecanismul de atenție stă la baza și arhitecturilor neuronale mai noi de tip
transformer. Conceptual, atenția este un mecanism simplu, care permite
corelarea unor elemente dintr-o secvență cu elementele din altă secvență. Spre
exemplu, având două propoziții lungi în două limbi diferite, atenția este
reprezentată ca o matrice cu numărul de rânduri corespunzător cuvintelor din
prima secvență, și cu numărul de coloane egal cu numărul de cuvinte din a 2-a
secvență. Această matrice specifică influența unui cuvânt din propoziția unu față
de cuvintele din propoziția doi. În linii mari, mecanismul de atenție eficientizează
lucrul rețelelor neuronale cu secvențe lungi, spre exemplu LSTM.

Probleme curente
Printre principalele probleme în domeniul procesării limbajului natural
putem menționa faptul că toate soluțiile bazate pe învățare automată, începând
cu tehnici precum Naive Bayes și până la mastodonți de genul arhitecturilor
Transformer, este faptul că aceste modele nu înțeleg ce învață, acestea doar
încearcă să memoreze și să generalizeze șabloane observate în volume mari de
text, din acest motiv nu putem spune ca acești algoritmi “înțeleg” limbajul natural,
chiar dacă pentru unele probleme se pare că ar înțelege ceva. Această problemă
este ușor observabilă în problemele de tip Q&A mai complicate și când vine vorba
despre decodarea referințelor în text (vezi exemplul cu Maria de mai sus).
O problema corelată cu aceasta este lipsa unor seturi de date ce ar
permite evaluarea adecvată a algoritmilor de învățare automată pe probleme de
text. Pe deoparte aceasta este din cauza că dezvoltarea unor astfel de seturi de
date este un proces extrem de complicat, fiind necesar de luat în considerație
diferite aspecte ale unui set de date, precum minimizarea discrepanțelor dintre
clasele majoritare și minoritare, prezenta unui număr mare de clase, minimizarea
similaritatilor dintre clase, reprezentarea egală a diferitor clase minoritare din
lumea reala in setul de date, dar și multe alte probleme. Printre care și o
problema trivială de volum mare de date calitative. În condițiile curente avem
seturi de date și respectiv probleme relativ complicate, dar cu mici deficiențe,
cazuri speciale, pe care algoritmii noștri foarte capabili învață să le exploateze,
astfel având rezultate impunătoare ce nu mereu se mapează pe rezultate
superioare în lumea reală.
Epilog
Acum că ai făcut cunoștința cu cele mai recente realizări, dar și probleme,
din domeniul inteligenței artificiale în asemenea domenii importante ca vederea
computațională și procesarea limbajului natural, e timpul să ne aprofundăm în
mecanismele și principiile ce stau la baza tuturor algoritmilor descriși până acum.

Exerciții

1. Cum sunt modelate cuvintele sau caracterele pentru a fi pe înțelesul


algoritmilor de învățare automată?
2. Cum lucrează mecanismul de atenție, conceptual? Pentru ce este utilizat
acesta?
3. Rulează exemplul propus. EXAMPLE1 - Teacheble Machines + poate inca un
exemplu din resursa

Test

1. Care este diferența dintre un sistem cu IA simbolic și unul ce utilizează


abordarea statistică?
2. Cum lucrează un algoritm de învățare supervizată?

S-ar putea să vă placă și