Ankur Tomar

Follow

Nov 25, 2018 – 9 min read

Credits: Christine Doig

Szia mindenkinek. Régen volt már, hogy utoljára írtam egy blogot a különböző típusú ajánlórendszerekről. Ezúttal a Témamodellezésről fogok írni.

Számtalan forrás létezik, ahol meg lehet tanulni, hogy mi is az a Témamodellezés, de azt hiszem, a legtöbbjük kissé technikai jellegű, és jó matematikai és más technikák, például Markov-láncok ismeretét igényli. Ebben a cikkben megpróbálom nagyon intuitív módon, minimális matematikai és technikai ismeretekkel elmagyarázni a témamodellezés mögötti elképzelést. A cikket két részből fogom írni. Az első részben megpróbálom elmagyarázni, hogy mi a témamodellezés, és a második részben egy python bemutatót fogok adni arról, hogyan kell a témamodellezést valós adathalmazon elvégezni.

Mielőtt elkezdeném, szeretném elismerni, hogy ezt a cikket erősen inspirálta a feltáró adatelemzés professzorom előadása. Edward McFowland, a Coursera kurzusa a Higher School of Economics természetes nyelvi feldolgozásról és Jordan Boyd-Graber magyarázata a Gibbs-mintavételezésről.

Mi az a témamodellezés?

A témamodellezés a felügyelet nélküli természetes nyelvi feldolgozás egyik ága, amely egy szöveges dokumentumot több olyan téma segítségével reprezentál, amelyek a legjobban meg tudják magyarázni az adott dokumentumban lévő mögöttes információt. Ez a klaszterezés szempontjából is elképzelhető, de egy különbséggel. Most numerikus jellemzők helyett szavak gyűjteménye áll rendelkezésünkre, amelyeket úgy akarunk csoportosítani, hogy minden csoport egy-egy témát képviseljen a dokumentumban.

Miért van szükségünk témamodellezésre?

Oké, most felmerül a kérdés, hogy miért van szükségünk témamodellezésre? Ha körülnézünk, hatalmas mennyiségű szöveges adatot látunk magunk körül strukturálatlan formában, hírek, kutatási cikkek, közösségi média posztok stb. formájában, és szükségünk van egy módra, hogy megértsük, rendszerezzük és címkézzük ezeket az adatokat, hogy megalapozott döntéseket hozhassunk. A témamodellezést különböző alkalmazásokban használják, például a stack overflow-n egymáshoz hasonló kérdések keresése, hírfolyam-aggregáció és -elemzés, ajánlórendszerek stb. esetén. Mindezek a szöveg rejtett tematikus struktúrájának megtalálására összpontosítanak, mivel úgy gondoljuk, hogy minden szöveg, amit írunk, legyen az egy tweet, egy poszt vagy egy kutatási cikk, olyan témákból áll, mint a sport, a fizika, az űrkutatás stb.

Hogyan végezhetünk témamodellezést?

Jelenleg számos módja létezik a témamodellezésnek, de ebben a bejegyzésben a David M. Blei professzor által 2003-ban kifejlesztett Latent Dirichlet Allocation (LDA) nevű valószínűségi modellezési megközelítésről lesz szó. Ez a Thomas Hoffman által 1999-ben kifejlesztett Probabilistic Latent Semantic Analysis (PLSA) kiterjesztése, egy nagyon apró különbséggel, ami a dokumentumonkénti eloszlás kezelését illeti. Ugorjunk tehát rögtön bele, hogyan működik az LDA.

Latent Dirichlet Allocation

Kezdjük azzal, hogy megértjük a címben szereplő egyes szavak jelentését, mivel szerintem ez mindent tartalmaz, amit tudnunk kell ahhoz, hogy megértsük, hogyan működik az LDA.

Latent: Ez mindarra utal, amit a priori nem ismerünk, és ami az adatokban rejtve van. Itt a témák vagy témák, amelyekből a dokumentum áll, ismeretlenek, de úgy gondoljuk, hogy jelen vannak, mivel a szöveget ezek alapján generálják.

Dirichlet: Ez egy “eloszlások eloszlása”. Igen, jól olvasta. De mit is jelent ez? Gondoljuk végig egy példa segítségével. Tegyük fel, hogy van egy gép, amely kockákat gyárt, és ellenőrizhetjük, hogy a gép mindig olyan kockát fog-e gyártani, amelynek minden oldala egyenlő súlyú, vagy lesz-e valamilyen torzítás egyes oldalak javára. Tehát a kockákat gyártó gép egy eloszlás, mivel különböző típusú kockákat gyárt. Azt is tudjuk, hogy maga a kocka is egy eloszlás, mivel többféle értéket kapunk, amikor dobunk egy kockával. Ez az, amit az eloszlások eloszlása jelent, és ez az, amit Dirichlet jelent. Itt, a témamodellezéssel összefüggésben a Dirichlet a témák eloszlása a dokumentumokban és a szavak eloszlása a témában. Lehet, hogy ez most nem túl világos, de nem baj, hiszen egy idő múlva részletesebben is meg fogjuk nézni.

Allokáció:

Ez azt jelenti, hogy ha megvan a Dirichlet, akkor a témákat a dokumentumokhoz, a dokumentum szavait pedig a témákhoz rendeljük.

Ez minden. Ez az LDA dióhéjban összefoglalva. Most pedig értsük meg, hogyan működik ez a témamodellezésben.

Még egyszer összefoglalva, az LDA azt mondja, hogy minden dokumentumban minden szó egy témából származik, és a témát egy dokumentumonkénti eloszlásból választjuk ki a témák között. Tehát két mátrixunk van:

1. ϴtd = P(t|d), ami a dokumentumokban lévő témák valószínűségi eloszlása

2. Фwt = P(w|t), ami a témákban lévő szavak valószínűségi eloszlása

És azt mondhatjuk, hogy egy szó valószínűsége adott i dokumentumban.azaz P(w|d) egyenlő:

ahol T a topikok teljes száma. Tegyük fel továbbá, hogy a szókincsünkben W számú szó van az összes dokumentumhoz.

Ha feltételes függetlenséget feltételezünk, akkor azt mondhatjuk, hogy

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

És így P(w|d) egyenlő:

az ϴtd és Фwt pontszorzata minden t témára.

Ez egy mátrix formájában így ábrázolható:

Kredit: Higher School of Economics

Ezt nézve tehát az LDA-t a mátrix faktorizáláshoz vagy SVD-hez hasonlóan gondolhatjuk, ahol a dokumentumban lévő szó valószínűségeloszlási mátrixát két mátrixra bontjuk, amelyek a dokumentumban lévő téma eloszlásából és a témában lévő szavak eloszlásából állnak.

Ezért például ezt kapjuk:

Kredit: David M. Blei

És hogy visszatérjünk a kocka példánkhoz, azt mondhatjuk, hogy egy téma szavainak eloszlásában minden szó hasonlít a kocka egyik oldalához, és van Dirichlet paraméterünk, amellyel szabályozhatjuk, hogy minden szónak azonos valószínűsége van-e egy témában, vagy az adott téma szélsőségesen elfogult lesz néhány szó irányába. Ugyanez az intuíció érvényes a dokumentumok témáinak eloszlására is.

Jó. Most jön a fontos rész. Hogyan tanuljuk meg e két mátrix súlyait?

Kezdésként rendeljünk véletlenszerűen súlyokat mindkét mátrixhoz, és tegyük fel, hogy adatainkat a következő lépések szerint generáljuk:

1. Véletlenszerűen válasszunk ki egy témát a dokumentumban lévő témák eloszlásából a hozzájuk rendelt súlyok alapján. Az előző példában mondjuk, hogy rózsaszín témát választottunk

2. Ezután a kiválasztott témához tartozó szavak eloszlása alapján véletlenszerűen válasszunk ki egy szót, és tegyük be a dokumentumba

3. Ismételjük meg ezt a lépést a teljes dokumentumra

Ezzel a folyamattal, ha a súlyokra vonatkozó feltételezésünk rossz, akkor a tényleges, általunk megfigyelt adatok nagyon valószínűtlenek lesznek a feltételezett súlyok és az adatgenerálási folyamat alapján. Tegyük fel például, hogy van egy D1 dokumentumunk, amely a következő szövegből áll:

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

és tegyük fel, hogy magas súlyokat rendelünk a T1 témához, amely magas súlyokkal rendelkezik az olyan szavakhoz, mint Spoon, Plates, Onions stb. akkor látni fogjuk, hogy az adatgenerálásra vonatkozó feltételezésünk alapján nagyon valószínűtlen, hogy a T1 a D1-hez tartozik vagy ezek a szavak a T1-hez tartoznak. Ezért azt csináljuk, hogy megpróbáljuk maximalizálni az adataink valószínűségét e két mátrix ismeretében.

A helyes súlyok azonosításához egy Gibbs-mintavételezés nevű algoritmust fogunk használni. Értelmezzük most, hogy mi az a Gibbs-mintavételezés, és hogyan működik az LDA-ban.

Gibbs-mintavételezés

A Gibbs-mintavételezés egy olyan algoritmus, amely olyan változók feltételes eloszlásainak egymás utáni mintavételezésére szolgál, amelyek eloszlása az állapotok felett hosszú távon konvergál a valódi eloszláshoz. Ez egy kissé absztrakt fogalom, és a Monte Carlo Markov-láncok és a Bayes-tétel jó ismeretét igényli. Ezek a fogalmak és a mögöttük álló matematika meglehetősen összetett, és meghaladja ennek a blognak a kereteit. Itt megpróbálok egy megérzést adni arról, hogyan működik a Gibbs-mintavételezés a dokumentumok témáinak azonosítására.

Amint korábban említettem, először is feltételezzük, hogy ismerjük a ϴ és a Ф mátrixokat. Most azt fogjuk tenni, hogy lassan megváltoztatjuk ezeket a mátrixokat, és olyan válaszhoz jutunk, amely maximalizálja a valószínűségét a rendelkezésünkre álló adatoknak. Ezt szóról szóra fogjuk megtenni egy-egy szó témakijelölésének megváltoztatásával. Feltételezzük, hogy nem ismerjük az adott szó témakijelölését, de ismerjük az összes többi szó témakijelölését a szövegben, és megpróbálunk következtetni arra, hogy milyen témát rendelünk ehhez a szóhoz.

Ha ezt matematikai módon nézzük, akkor azt tesszük, hogy megpróbáljuk megtalálni egyetlen szó témakijelölésének feltételes valószínűségi eloszlását a többi témakijelölés függvényében. Az összes matematikai számítást figyelmen kívül hagyva egy feltételes valószínűségi egyenletet kapunk, amely így néz ki a d dokumentumban található egyetlen w szóra, amely a k témához tartozik:

Credit: Jordan Boyd-Graber

hol:

n(d,k):

v(k,w): A k téma k adott szó használatának száma

αk: Dirichlet paraméter a dokumentum-téma eloszláshoz

λw: Dirichlet paraméter a téma és a szó közötti eloszláshoz

Ez az egyenlet két részből áll. Az első rész azt mondja meg, hogy az egyes témák mennyire vannak jelen egy dokumentumban, a második rész pedig azt, hogy az egyes témák mennyire szeretnek egy-egy szót. Vegyük észre, hogy minden szóhoz kapunk egy valószínűségi vektort, amely megmagyarázza, hogy ez a szó milyen valószínűséggel tartozik az egyes témákhoz. A fenti egyenletben látható, hogy a Dirichlet-paraméterek simító paraméterként is működnek, ha n(d,k) vagy v(k,w) nulla, ami azt jelenti, hogy még mindig lesz némi esély arra, hogy a szó egy témát fog választani a továbbiakban.

Menjünk most végig egy példán:

Kezdésként tegyük fel, hogy van egy dokumentumunk valamilyen véletlenszerű szó témakijelöléssel, például az alábbiak szerint:

A számítási mátrixunk is megvan v(k,w), az alábbiak szerint:

Most változtassuk meg a dokumentumban a world szó hozzárendelését.

  • Először is csökkentsük a világ szó számát az 1. témakörben 28-ról 27-re, mivel nem tudjuk, hogy a világ melyik témakörbe tartozik.
  • Második ábrázoljuk az n(d,k) mátrixot a következő módon, hogy megmutassuk, mennyire használja egy dokumentum az egyes témákat

– Harmadik, ábrázoljuk v(k,w) a következő módon, hogy megmutassuk, hogy az egyes témák hányszor vannak hozzárendelve ehhez a szóhoz

  • Negyedszer, megszorozzuk ezt a két mátrixot, hogy megkapjuk a feltételes valószínűségeinket

  • Végül véletlenszerűen kiválasztjuk bármelyik témát, és azt a témát a világhoz rendeljük, majd ezeket a lépéseket az összes többi szóra is megismételjük. Intuitíve a legnagyobb feltételes valószínűségű témát kell kiválasztanunk, de mint látjuk, más témáknak is van némi esélyük a kiválasztásra

Ez az. Ezt csinálja a Gibbs mintavételi algoritmus a motorháztető alatt. Bár kihagytunk néhány részletet, például a hiperparaméterek hangolását, de intuitív szempontból így működik a Gibbs-mintavételezés a témamodellezésben.

Ez tehát a Latens Dirichlet Allocation elmélete. Remélem, ez segített megérteni, hogy mi a témamodellezés, és hogyan használjuk az LDA-t Gibbs-szel a témamodellezéshez. A következő cikkben közzéteszem az LDA implementációját Python használatával.

Köszönöm!

admin

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.

lg