Ankur Tomar

Follow

25. marraskuuta, 2018 – 9 min read

Credits: Christine Doig

Hei kaikille. Siitä on pitkä aika, kun kirjoitin edellisen blogini erityyppisistä suosittelujärjestelmistä. Tällä kertaa kirjoitan Topic Modellingista.

On olemassa lukuisia lähteitä, joista voi oppia, mitä Topic Modelling on, mutta mielestäni suurin osa niistä on jokseenkin teknisiä ja vaatii hyvää matematiikan ja muiden tekniikoiden, kuten Markovin ketjujen, tuntemusta. Tässä artikkelissa yritän selittää teemamallinnuksen idean hyvin intuitiivisesti ja mahdollisimman vähän matematiikkaa ja tekniikkaa käyttäen. Kirjoitan tämän artikkelin kahdessa osassa. Ensimmäisessä osassa yritän selittää, mitä aihepiirien mallintaminen on, ja toisessa osassa annan python-oppaan siitä, miten aihepiirien mallintaminen tehdään reaalimaailman tietokokonaisuuksiin.

Ennen kuin aloitan, haluan tunnustaa, että tämä artikkeli on vahvasti inspiroitunut eksploratiivisen data-analytiikan professorin luennosta. Edward McFowland, Courseran kurssi Natural Language Processing by Higher School of Economics ja Jordan Boyd-Graberin selitys Gibbsin otannasta.

Mitä on aiheen mallintaminen?

Topic modeling (aiheen mallintaminen) on luonnollisen kielen valvomattoman tietojenkäsittelyn haara, jota käytetään tekstidokumentin esittämiseen useiden aihealueiden (topics) avulla, jotka pystyvät parhaiten selittämään tietyssä dokkarissa olevan taustalla olevan tiedon. Tätä voidaan ajatella klusteroinnin tapaan, mutta erolla. Nyt numeeristen piirteiden sijaan meillä on kokoelma sanoja, jotka haluamme ryhmitellä siten, että kukin ryhmä edustaa dokumentin aihetta.

Miksi tarvitsemme aihiomallinnusta?

Okei, nyt herää kysymys, miksi tarvitsemme aihiomallinnusta? Jos katsomme ympärillemme, näemme ympärillämme valtavan määrän tekstidataa, joka lojuu jäsentymättömässä muodossa uutisartikkeleiden, tutkimusartikkeleiden, sosiaalisen median postausten jne. muodossa, ja tarvitsemme tavan ymmärtää, järjestää ja merkitä tätä dataa, jotta voimme tehdä tietoon perustuvia päätöksiä. Aihepiirien mallintamista käytetään erilaisissa sovelluksissa, kuten samankaltaisten kysymysten löytämisessä stack overflow -palvelusta, uutisvirtojen yhdistämisessä ja analysoinnissa, suositusjärjestelmissä jne. Kaikissa näissä keskitytään tekstin piilotetun temaattisen rakenteen löytämiseen, sillä uskotaan, että jokainen kirjoittamamme teksti, olipa se sitten twiitti, viesti tai tutkimusartikkeli, koostuu teemoista, kuten urheilusta, fysiikasta, ilmailusta jne.

Miten aihepiirien mallintaminen tehdään?

Tällä hetkellä aihepiirien mallintamista voidaan tehdä monin eri tavoin, mutta tässä postauksessa keskustelemme professori David M. Blei’n vuonna 2003 kehittämästä todennäköisyyksien mallinnusmenetelmästä nimeltä Latent Dirichlet Allocation (LDA). Kyseessä on Thomas Hoffmanin vuonna 1999 kehittämän probabilistisen latentin semanttisen analyysin (Probabilistic Latent Semantic Analysis, PLSA) laajennus, jossa on hyvin pieni ero siinä, miten ne käsittelevät dokumenttikohtaista jakaumaa. Hyppäämme siis suoraan siihen, miten LDA toimii.

Latent Dirichlet Allocation

Aloitetaan ymmärtämällä otsikon jokaisen sanan merkitys, sillä mielestäni se sisältää kaiken, mitä meidän on tiedettävä ymmärtääksemme, miten LDA toimii.

Latent: Tällä tarkoitetaan kaikkea sitä, mitä emme tiedä a priori ja mikä on piilossa datassa. Tässä dokumentin sisältämät teemat tai aiheet ovat tuntemattomia, mutta niiden uskotaan olevan läsnä, koska teksti on luotu näiden aiheiden pohjalta.

Dirichlet: Se on ”jakaumien jakauma”. Kyllä, luit oikein. Mutta mitä tämä tarkoittaa? Pohditaan asiaa esimerkin avulla. Oletetaan, että on olemassa kone, joka tuottaa noppia, ja voimme kontrolloida, tuottaako kone aina nopan, jonka kaikki puolet painottuvat yhtä paljon, vai onko joillakin puolilla harhaa. Noppia tuottava kone on siis jakauma, koska se tuottaa erityyppisiä noppia. Tiedämme myös, että itse noppa on jakauma, koska saamme useita arvoja, kun heitämme noppaa. Tämä tarkoittaa sitä, että jakauma on jakaumien jakauma, ja tämä on Dirichlet-jakauma. Tässä aihepiirien mallintamisen yhteydessä Dirichlet on aihepiirien jakauma asiakirjoissa ja sanojen jakauma aihepiirissä. Se ei ehkä ole kovin selkeää tässä vaiheessa, mutta ei se haittaa, sillä tarkastelemme sitä hetken päästä tarkemmin.

Allokaatio: Tämä tarkoittaa, että kun meillä on Dirichlet, allokoimme aiheet dokumentteihin ja dokumentin sanat aiheisiin.

Se on siinä. Tätä LDA on pähkinänkuoressa. Ymmärretään nyt, miten tämä toimii aiheiden mallintamisessa.

Kertauksena LDA:n mukaan jokainen sana kussakin dokumentissa tulee aiheesta ja aihe valitaan dokumenttikohtaisesta jakaumasta aiheiden yli. Meillä on siis kaksi matriisia:

1. ϴtd = P(t|d), joka on dokumenttien aiheiden todennäköisyysjakauma

2. Фwt = P(w|t), joka on aiheiden sanojen todennäköisyysjakauma

Ja voimme sanoa, että sanan todennäköisyys annettuun dokumenttiin i.eli P(w|d) on yhtä suuri kuin:

jossa T on aiheiden kokonaismäärä. Oletetaan myös, että sanastossamme on W määrä sanoja kaikkia asiakirjoja varten.

Jos oletamme ehdollisen riippumattomuuden, voimme sanoa, että

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

Ja näin ollen P(w|d) on yhtä suuri kuin:

joka on ϴtd:n ja Фwt:n pistepotentiaali jokaiselle aiheelle t.

Tämä voidaan esittää matriisina näin:

Credit: Higher School of Economics

Tätä tarkasteltaessa voimme siis ajatella LDA:n muistuttavan matriisifaktorointia tai SVD:tä, jossa hajotamme dokumentissa olevan sanan todennäköisyysjakaumamatriisin kahdeksi matriisiksi, jotka koostuvat aiheen jakaumasta dokumentissa ja sanojen jakaumasta aiheessa.

Siten saamme esimerkiksi tämän:

Credit: David M. Blei

Ja palatakseni takaisin esimerkkiin nopasta, voimme sanoa, että jokainen sana aiheen sanojen jakaumassa on samanlainen kuin nopan puoli, ja meillä on Dirichlet-parametri, jolla voimme kontrolloida, onko kaikilla sanoilla sama todennäköisyys aiheessa vai onko aiheessa äärimmäinen vinoutuma joidenkin sanojen suhteen. Sama intuitio pätee myös aiheiden jakautumiseen asiakirjassa.

Hyvä. Nyt tulee tärkeä osa. Miten opimme näiden kahden matriisin painot?

Aluksi määritetään satunnaisesti painot molemmille matriiseille ja oletetaan, että datamme on luotu seuraavien vaiheiden mukaisesti:

1. Valitaan satunnaisesti aihe dokumentin aiheiden jakaumasta niille annettujen painojen perusteella. Edellisessä esimerkissä sanotaan, että valitsimme vaaleanpunaisen aiheen

2. Valitse seuraavaksi valitun aiheen sanajakauman perusteella satunnaisesti sana ja sijoita se asiakirjaan

3. Toista tämä vaihe koko asiakirjalle

Tässä prosessissa, jos arvauksemme painoista on väärä, havaitsemamme todelliset tiedot ovat hyvin epätodennäköisiä olettamiemme painotusten ja datan luomisprosessin mukaisesti. Oletetaan esimerkiksi, että meillä on asiakirja D1, joka koostuu seuraavasta tekstistä:

”Qualcomm® Adreno™ 630 Visual Processing Subsystem featuring room-scale 6DoF with SLAM, Adreno Foveation”

ja oletetaan, että annamme korkeat painot aiheelle T1, jossa on korkeat painot sanoille kuten Spoon, Plates, Onions jne., niin silloin huomaamme, että olettamuksemme datan luomisesta huomioon ottaen on hyvin epätodennäköistä, että T1 kuuluu D1:een tai että nämä sanat kuuluvat T1:een. Yritämme siis maksimoida datamme todennäköisyyden ottaen huomioon nämä kaksi matriisia.

Oikeiden painojen tunnistamiseksi käytämme algoritmia nimeltä Gibbs sampling. Ymmärretään nyt, mitä Gibbs-näytteenotto on ja miten se toimii LDA:ssa.

Gibbs-näytteenotto

Gibbs-näytteenotto on algoritmi, jolla voidaan peräkkäin ottaa näytteitä muuttujien ehdollisista jakaumista, joiden jakauma tilojen yli konvergoi pitkällä aikavälillä todellista jakaumaa kohti. Tämä on jokseenkin abstrakti käsite ja vaatii hyvää ymmärrystä Monte Carlo Markovin ketjuista ja Bayesin lauseesta. Nämä käsitteet ja niiden taustalla oleva matematiikka ovat melko monimutkaisia, eivätkä ne kuulu tämän blogin piiriin. Tässä yritän antaa intuition siitä, miten Gibbs Sampling toimii dokumenttien aiheiden tunnistamiseksi.

Kuten aiemmin mainitsin, oletamme aluksi, että tunnemme ϴ- ja Ф-matriisit. Nyt teemme sen, että muutamme hitaasti näitä matriiseja ja pääsemme vastaukseen, joka maksimoi todennäköisyyden saamiemme tietojen perusteella. Teemme tämän sana sanalta muuttamalla yhden sanan aiheen määrittelyä. Oletamme, että emme tiedä kyseisen sanan aiheen määrittelyä, mutta tiedämme tekstin kaikkien muiden sanojen määrittelyn, ja yritämme päätellä, mikä aihe määritetään tälle sanalle.

Jos tarkastelemme tätä matemaattisesti, yritämme löytää yksittäisen sanan aiheen määrittelyn ehdollisen todennäköisyysjakauman, joka on riippuvainen muista aiheen määrittelyistä. Kun jätämme huomiotta kaikki matemaattiset laskutoimitukset, saamme seuraavanlaisen ehdollisen todennäköisyysyhtälön yksittäiselle sanalle w asiakirjassa d, joka kuuluu aihealueeseen k:

Credit: Jordan Boyd-Graber

>

missä:

n(d,k): Kuinka monta kertaa dokumentti d käyttää aihetta k

v(k,w): Kuinka monta kertaa aihe k käyttää annettua sanaa

αk: Dirichlet-parametri dokumentin ja aiheen väliselle jakaumalle

λw: Dirichlet-parametri aiheen ja sanan väliselle jakaumalle

Tässä yhtälössä on kaksi osaa. Ensimmäinen osa kertoo, kuinka paljon kutakin aihetta esiintyy asiakirjassa, ja toinen osa kertoo, kuinka paljon kukin aihe pitää sanasta. Huomaa, että jokaiselle sanalle saamme todennäköisyysvektorin, joka selittää, kuinka todennäköisesti tämä sana kuuluu kuhunkin aiheeseen. Yllä olevasta yhtälöstä voidaan nähdä, että Dirichlet-parametrit toimivat myös tasoitusparametreina, kun n(d,k) tai v(k,w) on nolla, mikä tarkoittaa, että on edelleen olemassa jonkinlainen mahdollisuus, että sana valitsee aiheen jatkossa.

Käydään nyt läpi esimerkki:

Aluksi oletetaan, että meillä on dokumentti, jossa on jokin satunnainen sana aiheen määritys, esimerkiksi alla olevan kuvan mukaisesti:

Meillä on myös laskentamatriisimme v(k,w) alla olevan mukaisesti:

Muutetaan nyt asiakirjan sanan maailma osoitusta.

  • Vähennämme ensin maailman lukumäärää aiheessa 1 28:sta 27:ään, koska emme tiedä, mihin aiheeseen maailma kuuluu. esitetään v(k,w) seuraavalla tavalla, jotta nähdään, kuinka monta kertaa kukin aihepiiri on osoitettu tälle sanalle

    • Neljänneksi, kerromme nämä kaksi matriisia saadaksemme ehdolliset todennäköisyydet

    • Viimeiseksi valitsemme sattumanvaraisesti minkä tahansa aihepiirin ja osoitamme sen aihepiirin maailmalle, ja toistamme nämä vaiheet myös kaikille muille sanoille. Intuitiivisesti aihe, jolla on suurin ehdollinen todennäköisyys, pitäisi valita, mutta kuten näemme, myös muilla aiheilla on jonkinlainen mahdollisuus tulla valituksi

    Se on siinä. Tätä Gibbs sampling -algoritmi tekee konepellin alla. Vaikka ohitimme joitakin yksityiskohtia, kuten hyperparametrin virittämisen, mutta intuition näkökulmasta katsottuna näin Gibbs sampling toimii aiheiden mallintamisessa.

    Se on siis tässä Latent Dirichlet Allocationin teoria. Toivottavasti tästä oli apua sen ymmärtämisessä, mitä aiheen mallintaminen on ja miten käytämme LDA:ta Gibbsin kanssa aiheen mallintamiseen. Seuraavassa artikkelissa julkaisen LDA:n toteutuksen Pythonilla.

    Kiitos!

admin

Vastaa

Sähköpostiosoitettasi ei julkaista.

lg