Ankur Tomar

Follow

25 noiembrie, 2018 – 9 min citește

Credite: Christine Doig

Bună ziua tuturor. A trecut mult timp de când am scris ultimul meu blog despre diferitele tipuri de sisteme de recomandare. De data aceasta, voi scrie despre Topic Modelling.

Există numeroase surse unde puteți afla ce este Topic Modelling, dar cred că, majoritatea sunt oarecum tehnice și necesită o bună cunoaștere a matematicii și a altor tehnici, cum ar fi lanțurile Markov. În acest articol, voi încerca să explic ideea din spatele Topic Modelling într-un mod foarte intuitiv, cu un minim de matematică și tehnică. Voi scrie acest articol în două părți. În prima parte, voi încerca să explic ce este modelarea tematică, iar în a doua parte, voi oferi un tutorial python despre cum se face modelarea tematică pe setul de date din lumea reală.

Înainte de a începe, vreau să recunosc că acest articol este puternic inspirat de prelegerea profesorului meu de analiză exploratorie a datelor. Edward McFowland, cursul Coursera de Procesare a limbajului natural de la Higher School of Economics și explicația lui Jordan Boyd-Graber despre eșantionarea Gibbs.

Ce este modelarea subiectelor?

Modelarea subiectelor este o ramură a procesării nesupravegheate a limbajului natural care este utilizată pentru a reprezenta un document de text cu ajutorul mai multor subiecte, care pot explica cel mai bine informațiile care stau la baza unui anumit document. Acest lucru poate fi gândit în termeni de clusterizare, dar cu o diferență. Acum, în loc de caracteristici numerice, avem o colecție de cuvinte pe care dorim să le grupăm în așa fel încât fiecare grup să reprezinte o temă într-un document.

De ce avem nevoie de modelare tematică?

Ok, deci acum se pune întrebarea de ce avem nevoie de modelare tematică? Dacă ne uităm în jur, putem vedea o cantitate imensă de date textuale care se află în jurul nostru într-un format nestructurat sub formă de articole de știri, lucrări de cercetare, postări în social media etc. și avem nevoie de o modalitate de a înțelege, organiza și eticheta aceste date pentru a lua decizii informate. Modelarea subiectelor este utilizată în diverse aplicații, cum ar fi găsirea întrebărilor de pe stack overflow care sunt similare între ele, agregarea și analiza fluxului de știri, sistemele de recomandare etc. Toate acestea se concentrează pe găsirea structurii tematice ascunse în text, deoarece se crede că fiecare text pe care îl scriem, fie că este un tweet, o postare sau o lucrare de cercetare, este compus din teme cum ar fi sportul, fizica, aerospațiul etc.

Cum se face modelarea subiectelor?

În prezent, există multe moduri de a face modelarea subiectelor, dar în această postare, vom discuta despre o abordare de modelare probabilistică numită Latent Dirichlet Allocation (LDA) dezvoltată de profesorul David M. Blei în 2003. Aceasta este o extensie a Probabilistic Latent Semantic Analysis (PLSA) dezvoltată în 1999 de Thomas Hoffman, cu o diferență foarte mică în ceea ce privește modul în care tratează distribuția per-document. Așadar, să trecem direct la modul în care funcționează LDA.

Latent Dirichlet Allocation

Să începem prin a înțelege semnificația fiecărui cuvânt din titlu, deoarece cred că acesta conține tot ceea ce trebuie să știm pentru a înțelege cum funcționează LDA.

Latent: Se referă la tot ceea ce nu știm a priori și care este ascuns în date. Aici, temele sau subiectele din care constă documentul sunt necunoscute, dar se crede că acestea sunt prezente deoarece textul este generat pe baza acelor subiecte.

Dirichlet: Este o „distribuție a distribuțiilor”. Da, ați citit bine. Dar ce înseamnă acest lucru? Să ne gândim la acest lucru cu ajutorul unui exemplu. Să presupunem că există o mașină care produce zaruri și că putem controla dacă mașina va produce întotdeauna un zar cu o pondere egală pentru toate fețele sau dacă va exista vreo prejudecată pentru unele fețe. Așadar, mașina care produce zaruri este o distribuție, deoarece produce zaruri de diferite tipuri. De asemenea, știm că zarurile în sine sunt o distribuție, deoarece obținem mai multe valori atunci când aruncăm un zar. Aceasta este ceea ce înseamnă să fii o distribuție de distribuții și asta este ceea ce este Dirichlet. Aici, în contextul modelării tematice, Dirichlet este distribuția subiectelor în documente și distribuția cuvintelor în cadrul subiectului. S-ar putea să nu fie foarte clar în acest moment, dar este în regulă, deoarece îl vom analiza mai în detaliu peste puțin timp.

Alocație: Aceasta înseamnă că, odată ce avem Dirichlet, vom aloca subiectele la documente și cuvintele documentului la subiecte.

Aceasta este tot. Aceasta este, pe scurt, ceea ce este LDA. Acum haideți să înțelegem cum funcționează acest lucru în modelarea subiectelor.

Pentru a recapitula, ceea ce spune LDA este că fiecare cuvânt din fiecare document provine de la un subiect, iar subiectul este selectat dintr-o distribuție per-document asupra subiectelor. Așadar, avem două matrici:

1. ϴtd = P(t|d) care este distribuția de probabilitate a subiectelor din documente

2. Фwt = P(w|t) care este distribuția de probabilitate a cuvintelor din subiecte

Și, putem spune că probabilitatea unui cuvânt, dat fiind documentul i.e. P(w|d) este egală cu:

unde T este numărul total de subiecte. De asemenea, să presupunem că există un număr W de cuvinte în vocabularul nostru pentru toate documentele.

Dacă presupunem independența condiționată, putem spune că

P(w|t,d) = P(w|t)

Și, prin urmare, P(w|d) este egal cu:

care este produsul punctat al lui ϴtd și Фwt pentru fiecare subiect t.

Aceasta poate fi reprezentată sub forma unei matrice ca aceasta:

Credit: Școala Superioară de Economie

Atunci, dacă ne uităm la acest lucru, ne putem gândi la LDA similar cu cel al factorizării matricelor sau SVD, unde descompunem matricea de distribuție a probabilității cuvântului în document în două matrici care constau din distribuția subiectului într-un document și distribuția cuvintelor într-un subiect.

Prin urmare, ceea ce vom obține este, de exemplu, acest lucru:

Credit: David M. Blei

Și pentru a ne lega de exemplul nostru cu zarurile, putem spune că fiecare cuvânt din distribuția cuvintelor dintr-un subiect este similar cu o parte a zarului și avem parametrul Dirichlet pentru a controla dacă toate cuvintele au aceeași probabilitate într-un subiect sau dacă acel subiect va avea o înclinație extremă către unele cuvinte. Aceeași intuiție este valabilă și pentru distribuția subiectelor într-un document.

Bine. Acum vine partea importantă. Cum învățăm ponderile acestor două matrici?

Pentru început, să atribuim în mod aleatoriu ponderi ambelor matrici și să presupunem că datele noastre sunt generate conform următorilor pași:

1. Alegeți aleatoriu un subiect din distribuția subiectelor dintr-un document pe baza ponderilor atribuite acestora. În exemplul anterior, să presupunem că am ales subiectul roz

2. Apoi, pe baza distribuției cuvintelor pentru subiectul ales, selectați un cuvânt la întâmplare și puneți-l în document

3. Repetați acest pas pentru întregul document

În acest proces, dacă presupunerea noastră cu privire la ponderi este greșită, atunci datele reale pe care le observăm vor fi foarte puțin probabile conform ponderilor noastre presupuse și procesului de generare a datelor. De exemplu, să presupunem că avem documentul D1, care constă din următorul text:

„Subsistemul de procesare vizuală Qualcomm® Adreno™ 630 cu room-scale 6DoF cu SLAM, Adreno Foveation”

și să presupunem că atribuim ponderi mari subiectului T1, care are ponderi mari pentru cuvinte precum Spoon, Plates, Onions etc., atunci vom vedea că, având în vedere presupunerea noastră privind modul de generare a datelor, este foarte puțin probabil ca T1 să aparțină lui D1 sau ca aceste cuvinte să aparțină lui T1. Prin urmare, ceea ce facem este să încercăm să maximizăm probabilitatea datelor noastre având în vedere aceste două matrici.

Pentru a identifica ponderile corecte, vom folosi un algoritm numit eșantionare Gibbs. Să înțelegem acum ce este eșantionarea Gibbs și cum funcționează în LDA.

Eșantionarea Gibbs

Eșantionarea Gibbs este un algoritm pentru eșantionarea succesivă a distribuțiilor condiționate ale variabilelor, a căror distribuție pe stări converge spre distribuția adevărată pe termen lung. Acesta este un concept oarecum abstract și necesită o bună înțelegere a lanțurilor Markov Monte Carlo și a teoremei lui Bayes. Aceste concepte și calculele matematice din spatele lor sunt destul de complexe și ies din sfera de aplicare a acestui blog. Aici, voi încerca să dau o intuiție despre modul în care funcționează eșantionarea Gibbs pentru a identifica subiecte în documente.

Cum am menționat mai devreme, pentru început, vom presupune că știm matricile ϴ și Ф. Acum, ceea ce vom face este că vom schimba încet aceste matrici și vom ajunge la un răspuns care maximizează probabilitatea datelor pe care le avem. Vom face acest lucru cuvânt cu cuvânt, schimbând atribuirea subiectului unui cuvânt. Vom presupune că nu cunoaștem atribuirea subiectului unui cuvânt dat, dar cunoaștem atribuirea tuturor celorlalte cuvinte din text și vom încerca să deducem ce subiect va fi atribuit acestui cuvânt.

Dacă privim acest lucru din punct de vedere matematic, ceea ce facem este să încercăm să găsim distribuția de probabilitate condiționată a atribuirii subiectului unui singur cuvânt, condiționată de restul atribuirii subiectului. Ignorând toate calculele matematice, ceea ce vom obține este o ecuație de probabilitate condiționată care arată astfel pentru un singur cuvânt w din documentul d care aparține subiectului k:

Credit: Jordan Boyd-Graber

unde:

n(d,k): Numărul de ori în care documentul d utilizează subiectul k

v(k,w): Numărul de dăți în care subiectul k utilizează cuvântul dat

αk: Parametrul Dirichlet pentru distribuția dintre document și subiect

λw: Parametrul Dirichlet pentru distribuția dintre subiect și cuvânt

Există două părți ale acestei ecuații. Prima parte ne spune în ce măsură fiecare subiect este prezent într-un document, iar cea de-a doua parte ne spune în ce măsură fiecărui subiect îi place un cuvânt. Rețineți că, pentru fiecare cuvânt, vom obține un vector de probabilități care va explica cât de probabil este ca acest cuvânt să aparțină fiecăruia dintre subiecte. În ecuația de mai sus, se poate observa că parametrii Dirichlet acționează, de asemenea, ca parametri de netezire atunci când n(d,k) sau v(k,w) este zero, ceea ce înseamnă că va exista totuși o anumită șansă ca cuvântul să aleagă un subiect în continuare.

Să trecem acum în revistă un exemplu:

Pentru început, să presupunem că avem un document cu o anumită alocare aleatorie a tematicii cuvintelor, de exemplu, așa cum se arată mai jos:

Avem, de asemenea, matricea noastră de numărare v(k,w), așa cum se arată mai jos:

Acum să modificăm atribuirea cuvântului world în document.

  • În primul rând, vom reduce numărul de cuvinte lume în subiectul 1 de la 28 la 27, deoarece nu știm cărui subiect aparține cuvântul lume.
  • În al doilea rând să reprezentăm matricea n(d,k) în felul următor pentru a arăta cât de mult folosește un document fiecare subiect

– În al treilea rând, să reprezentăm v(k,w) în felul următor pentru a arăta de câte ori fiecare subiect este atribuit acestui cuvânt

  • În al patrulea rând, vom înmulți aceste două matrici pentru a obține probabilitățile noastre condiționate

  • În cele din urmă, vom alege la întâmplare oricare dintre subiecte și vom atribui acel subiect la lume și vom repeta acești pași și pentru toate celelalte cuvinte. În mod intuitiv, ar trebui selectat subiectul cu cea mai mare probabilitate condiționată, dar, după cum putem vedea, și alte subiecte au șanse de a fi selectate

Asta este tot. Aceasta este ceea ce face algoritmul de eșantionare Gibbs sub capotă. Deși am sărit peste unele detalii, cum ar fi reglarea hiperparametrului, dar din punct de vedere intuitiv, acesta este modul în care funcționează eșantionarea Gibbs pentru modelarea subiectelor.

Atunci, asta este tot pentru teoria alocării latente Dirichlet. Sper că acest lucru a fost util pentru a înțelege ce este modelarea subiectelor și cum folosim LDA cu Gibbs pentru modelarea subiectelor. În următorul articol, voi posta implementarea LDA folosind Python.

Mulțumesc!

.

admin

Lasă un răspuns

Adresa ta de email nu va fi publicată.

lg