de Vikash Singh

Modul în care pornirea noastră a trecut de la LDA nesupravegheat la LDA ghidat semi-supravegheat

Modul in care am schimbat LDA nesupravegheat in LDA ghidat
Fotografie de Uroš Jovičić pe Unsplash

Aceasta este povestea despre cum și de ce a trebuit să scriem propria noastră formă de Alocare latentă Dirichlet (LDA). Vorbesc și despre motivul pentru care trebuie să construim un model de subiect ghidat (GuidedLDA) și despre procesul de aprovizionare deschisă GitHub.

Ce este LDA (Topic Modeling)?

Să spunem că aveți un set de articole de știri care erau documente. Citind aceste articole, veți putea spune dacă acestea sunt despre sport, politică sau știință.

Pentru următoarele titluri, veți fi de acord că 1 și 5 sunt despre politică, 2 și 4 despre sport și 3 și 6 despre știință:

Modul in care am schimbat LDA nesupravegheat in LDA ghidat
Exemple de titluri din articole de știri.

Pentru o ființă umană nu este o provocare să-ți dai seama cărui subiect îi aparține un articol de știri. Dar cum putem învăța un computer să înțeleagă aceleași subiecte?

Aici apare modelarea subiectului. Modelarea subiectelor este o clasă nesupravegheată de algoritmi de învățare automată. Aceste modele sunt în general bune la gruparea cuvintelor în subiecte. LDA este cel mai popular tehnica de modelare a subiectului.

1612002249 387 Modul in care am schimbat LDA nesupravegheat in LDA ghidat
Cuvinte grupate pentru a forma subiecte

Odată ce avem cuvintele grupate pe subiecte, putem vedea acum despre ce grup de cuvinte vorbește articolele de știri și documentul. Apoi îl putem clasifica în acel grup sau subiect.

1612002249 740 Modul in care am schimbat LDA nesupravegheat in LDA ghidat
clasificați documentele noi pe baza cuvintelor clasificate anterior.

După cum putem vedea, acest nou articol de știri vorbește despre Premiul Nobel. Acum putem prezice că acest document vorbește despre Ştiinţă subiect.

Notă: Cuvintele nu sunt grupate direct în subiecte. Mai degrabă se calculează o probabilitate precum „Care este probabilitatea ca un cuvânt să aparțină unui subiect?”.

Este dat de p (t | w). Sau probabilitatea subiectului t cuvânt dat w. În esență este doar Bayesian_probability.

Mi-ar plăcea să vorbesc mai multe despre asta, dar nu vreau să mă abat de la problema de bază. Dacă sunteți interesat, puteți citi mai multe despre acesta Aici.

Deci, ce este LDA ghidat?

Modelarea subiectelor este în general un algoritm de învățare nesupravegheat. Noi stim aia Spaţiu și Tehnologie sunt subiecte proprii. Dar dacă nu primim multe articole despre ele sau dacă sunt menționate împreună, s-ar putea să fie clasificate într-un singur subiect.

Am întâmpinat recent o problemă similară. Lucrez ca Data Scientist la Aparține.co iar Procesarea limbajului natural este jumătate din munca mea. Recent am făcut modelarea subiectelor LDA pe corpusul nostru de date. Majoritatea subiectelor au ieșit așa cum mă așteptam la ele. Dar unele dintre subiecte nu aveau sens.

Câteva dintre subiecte se suprapun și unele dintre subiectele pe care mă așteptam să le apară nu erau acolo. Ceva de acest gen s-a întâmplat, Space și Tech s-au unit.

1612002250 137 Modul in care am schimbat LDA nesupravegheat in LDA ghidat
Spațiul și tehnologia se îmbină

Într-un algoritm de învățare supravegheat, puteți reveni și depana unde ați greșit în procesul de luare a deciziilor. Poate că ai nevoie de mai multe funcții. Sau mai multe date despre antrenament. Sau poate funcții de pierdere, valori și eșantionare mai bune.

Dar de unde să începem când modelul este nesupravegheat? Am decis să depanăm …

1612002250 95 Modul in care am schimbat LDA nesupravegheat in LDA ghidat
Momentul din istorie când am decis să depanăm LDA …

Am constatat că subiectele care se îmbinau nu aveau suficiente documente pentru a se remarca.

1612002250 523 Modul in care am schimbat LDA nesupravegheat in LDA ghidat
Subiectele spațiale și tehnice se îmbină.

Am decis să spunem modelului să păstreze spațiul și tehnologia separate. Ideea a fost să setăm câteva cuvinte semințe pentru Spațiu și câteva cuvinte semințe pentru Tech. Apoi ghidați modelul pentru a converge în jurul acestor termeni.

1612002251 9 Modul in care am schimbat LDA nesupravegheat in LDA ghidat
Set Cuvinte însămânțate pentru ID-uri de subiect

A fost o idee simplă și intuitivă, dar nu am putut găsi nicio implementare a unui GuidedLDA. Au fost foarte puține lucrări care vorbeau despre îndrumarea LDA.

Ne-am referit la lucrarea lui Jagadeesh Jagarlamudi, Hal Daume III și Raghavendra Udupa Incorporarea Priorilor lexicali în modelele de subiecte. Lucrarea vorbește despre modul în care priorii (în acest caz priori cuvinte însemnate însemnate) pot fi setate în model pentru a-l ghida într-o anumită direcție. Vom intra în detalii într-un pic.

Odată ce am făcut aceste modificări, modelul a convergut așa cum am vrut.

1612002251 57 Modul in care am schimbat LDA nesupravegheat in LDA ghidat
Subiectele spațiale și tehnice sunt separate după însămânțarea subiectelor.

Deci, cum am schimbat LDA în GuidedLDA?

Pentru a explica această parte, va trebui să intrăm în detaliile despre modul în care funcționează LDA. Voi încerca tot posibilul pentru a-l simplifica. Dacă nu doriți să intrați în ea, puteți să treceți la Utilizarea GuidedLDA secțiune.

Modul în care funcționează regulat LDA este, mai întâi fiecare cuvânt este atribuit aleatoriu unui subiect. Această inițializare poate fi controlată cu priori Dirichlet prin parametrul Alpha. De acolo LDA (Latent Dirichlet Allocation) își primește numele. Această aleatorie ar putea fi inițializare uniformă dacă alfa este mare sau inițialitate înclinată atunci când alfa este mică. Să continuăm cu inițializarea uniformă pentru moment.

1612002251 957 Modul in care am schimbat LDA nesupravegheat in LDA ghidat
Inițializare implicită cu distribuire uniformă a subiectului de cuvinte.

Următorul pas este de a afla care termen aparține subiectului. Aceasta este partea de modelare a subiectului algoritmului. LDA optează pentru o abordare foarte simplă, găsind subiectul pentru un termen la un moment dat.

Spuneți că doriți să găsiți un subiect pentru termen Originea albastră. LDA va presupune mai întâi că fiecare alt termen din corpus este atribuit subiectului potrivit. În ultimul pas, am distribuit în mod uniform fiecare termen în toate subiectele, așa că vom presupune că acesta este subiectul corect pentru acești termeni.

Apoi calculăm ce termeni Originea albastră vine frecvent împreună cu. Apoi, care este cel mai frecvent subiect dintre acești termeni. Vom atribui Originea albastră la acel subiect.

Originea albastră probabil se va apropia de oricare subiect SpaceX și NASA sunt înăuntru. Acum puteți vedea asta NASA, SpaceX și Albastru Origine sunt puțin mai aproape unul de celălalt decât erau înainte de acest pas. Apoi vom trece la termenul următor și vom repeta procesul. Vom repeta acest întreg proces suficient de multe ori pentru a determina modelul să convergă.

Formula pentru aceasta va fi:
Probability de Originea albastră a se încadra în subiect Z {0,1,2, ..} când apare într-un document este egal cu numărul de ori Originea albastră este atribuit subiectului Z înmulțit cu numărul celuilalt words în acel document care aparține deja Z, împărțit la total de câte ori un cuvânt este atribuit subiectului Z.

Iată formula reală:

1612002252 970 Modul in care am schimbat LDA nesupravegheat in LDA ghidat

Pentru fiecare document (D) și pentru fiecare cuvânt (W) în acel document, vom calcula probabilitatea ca acel cuvânt să aparțină fiecărui subiect (Z).

for d in all_documents_D:    for w in all_words_W_in_d:        for z in all_topics_Z:            w_in_z = count(across all documents w belongs to z)            d_in_z = count(in d all words that belong to z)            tokens_in_z = count(all assignments in z)            p(z| w, d) = w_in_z * d_in_z / tokens_in_z        # so w belong to max p(z)        # whichever topic the probability was maximum for w        w_z = max(p(z| w, d))

Rezultatele inițiale vor fi greșite. Dar vom rula acest întreg proces de mai multe ori și cu fiecare iterație se vor îmbunătăți. De-a lungul timpului, ei vor converge pentru a forma distribuția subiectului de cuvinte.

Ce se schimbă atunci când semănăm documentele?

Spune că vrem să însămânțăm SpaceX, NASA a converge spre topic_0. În timpul inițializării, putem da un plus de impuls SpaceX și NASA să zacă în acest subiect specific.

Putem controla acest parametru cu privire la cât de mult ar trebui acordat un termen suplimentar. În algoritmul nostru îl numim seed_confidence și poate varia între 0 și 1. Cu un seed_confidence de 0,1 puteți distinge cuvintele însămânțate cu 10% mai mult față de subiectele însămânțate.

1612002252 709 Modul in care am schimbat LDA nesupravegheat in LDA ghidat
Inițializare însămânțată cu distribuție modificată a subiectului de cuvinte.

În inițializarea de mai sus, NASA și SpaceX sunt însămânțați pentru Topic_0, Apple și Google pentru Topic_1, și Physics și Chemistry pentru Topic_2.

Acum, când vom rula procesul de mai sus, vom avea un număr mai mare pentru cuvintele însămânțate aparținând subiectelor însămânțate. Formula va rămâne aceeași pentru GuidedLDA, iar convergența se va schimba către subiectele însămânțate.

# for seeded words belonging to seeded topics# this count will be higher now for seeded z.
w_in_z = count(across all documents w belongs to z)
# Thus probability of p belonging to seeded z will be higher
p(z| w, d) ∝ w_in_z

Prin urmare, ghidarea LDA. Sau GuidedLDA.

Am încercat o mulțime de abordări diferite înainte de a finaliza în cele din urmă aceasta.

Utilizarea GuidedLDA

GuidedLDA este o bibliotecă python pe care am deschis-o Repo GitHub.

Puteți să-l instalați cu o simplă instalare pip:

pip install guidedlda

Codul de utilizare este destul de simplu. Creați un dicționar pentru seed_topics cu word_id la topic_id Hartă. Și treceți-o la model.fit() metodă.

  1. seed_confidence poate varia între 0 și 1.
  2. seed_topics este dicționarul {word_id la topic_id}
  3. X este matricea termenului documentului.
seed_topics = {    'NASA': 0, 'SpaceX': 0,    'Apple': 1, 'Google': 1,    'Physics': 2, 'Chemistry': 2,}model.fit(X, seed_topics=seed_topics, seed_confidence=0.15).

Documentația pentru GuidedLDA este legată Aici.

credite

O mare parte a codului este împrumutată de la bibliotecă python LDA.

Un strigăt uriaș către autorii acelei biblioteci: Allen Riddell și Tim Hopper.

Mulțumiri speciale lui Vinodh Ravindranath, care m-a mentorat pe tot parcursul proiectului.

Prin utilizarea GuidedLDA am reușit să separăm subiectele care aveau o reprezentare mai mică în corpus și să orientăm clasificarea documentelor.

Am văzut succes cu acest model în producție. Dar totuși, algoritmul și implementarea se află într-un stadiu incipient. Vă rugăm să încercați și să vă împărtășiți gândurile, experimentele și rezultatele. Mi-ar plăcea să aud de la tine.