Ankur Tomar

Sledovat

25. listopadu, 2018 – 9 minut čtení

Kredity: Christine Doig

Ahoj všichni. Je to už dlouho, co jsem psala svůj poslední blog o různých typech doporučovacích systémů. Tentokrát budu psát o topickém modelování.

Existuje mnoho zdrojů, kde se můžete dozvědět, co je to topické modelování, ale myslím, že většina z nich je poněkud technická a vyžaduje dobré znalosti matematiky a dalších technik, jako jsou Markovovy řetězce. V tomto článku se pokusím vysvětlit myšlenku Topic Modelling velmi intuitivním způsobem s minimem matematiky a technikálií. Tento článek budu psát ve dvou částech. V první části se pokusím vysvětlit, co je to tematické modelování, a ve druhé části poskytnu návod v jazyce python, jak provádět tematické modelování na reálném souboru dat.

Předtím, než začnu, chci přiznat, že tento článek je silně inspirován přednáškou mého profesora průzkumové analýzy dat. Edwarda McFowlanda, kurzem Coursera o zpracování přirozeného jazyka od Higher School of Economics a výkladem Jordana Boyda-Grabera o Gibbsově vzorkování.

Co je to tematické modelování?

Tematické modelování je odvětvím neřízeného zpracování přirozeného jazyka, které se používá k reprezentaci textového dokumentu pomocí několika témat, která mohou nejlépe vysvětlit základní informace v daném dokumentu. Lze o tom uvažovat ve smyslu shlukování, ale s rozdílem. Nyní máme místo číselných znaků soubor slov, která chceme seskupit tak, aby každá skupina představovala téma v dokumentu.

Proč potřebujeme tematické modelování?

Ok, takže nyní vyvstává otázka, proč potřebujeme tematické modelování? Když se rozhlédneme kolem sebe, zjistíme, že kolem nás leží obrovské množství textových dat v nestrukturované podobě v podobě zpravodajských článků, výzkumných prací, příspěvků na sociálních sítích atd. a my potřebujeme způsob, jak tato data pochopit, uspořádat a označit, abychom mohli činit informovaná rozhodnutí. Tématické modelování se používá v různých aplikacích, jako je vyhledávání otázek na stack overflow, které jsou si navzájem podobné, agregace a analýza toku zpráv, doporučovací systémy atd. Všechny se zaměřují na hledání skryté tematické struktury v textu, protože se předpokládá, že každý text, který napíšeme, ať už je to tweet, příspěvek nebo výzkumná práce, se skládá z témat, jako je sport, fyzika, letectví atd.

Jak provádět tematické modelování?

V současné době existuje mnoho způsobů, jak provádět tematické modelování, ale v tomto příspěvku se budeme zabývat pravděpodobnostním přístupem modelování nazvaným Latent Dirichlet Allocation (LDA), který vyvinul profesor David M. Blei v roce 2003. Jedná se o rozšíření pravděpodobnostní latentní sémantické analýzy (PLSA), kterou v roce 1999 vyvinul Thomas Hoffman, s nepatrným rozdílem v tom, jak zachází s distribucí na dokument. Přejděme tedy rovnou k tomu, jak LDA funguje.

Latentní Dirichletova alokace

Začněme pochopením významu jednotlivých slov v názvu, protože si myslím, že obsahují vše, co potřebujeme vědět, abychom pochopili, jak LDA funguje.

Latentní: To se týká všeho, co a priori neznáme a co je v datech skryto. Zde neznáme témata nebo témata, z nichž se dokument skládá, ale předpokládáme, že jsou přítomna, protože text je generován na základě těchto témat.

Dirichlet: Jedná se o „distribuci distribucí“. Ano, čtete správně. Ale co to znamená? Zamysleme se nad tím pomocí příkladu. Předpokládejme, že existuje stroj, který vyrábí hrací kostky, a my můžeme kontrolovat, zda stroj bude vždy vyrábět kostky se stejnou váhou pro všechny strany, nebo zda bude pro některé strany existovat nějaké zkreslení. Stroj vyrábějící kostky je tedy rozkladem, protože vyrábí kostky různých typů. Také víme, že samotná kostka je rozdělením, protože při hodu kostkou získáme více hodnot. To je to, co znamená být rozdělením rozdělení, a tím je Dirichlet. Zde, v kontextu tematického modelování, je Dirichlet distribucí témat v dokumentech a distribucí slov v tématu. V tuto chvíli to možná není příliš jasné, ale to nevadí, protože se na to za chvíli podíváme podrobněji.

Rozdělení: To znamená, že jakmile máme Dirichleta, přiřadíme témata k dokumentům a slova dokumentu k tématům.

To je vše. To je v kostce to, co je LDA. Nyní pochopíme, jak to funguje při modelování témat.

Jen pro rekapitulaci: LDA říká, že každé slovo v každém dokumentu pochází z tématu a téma je vybráno z rozdělení na dokument nad tématy. Máme tedy dvě matice:

1. ϴtd = P(t|d), což je pravděpodobnostní rozdělení témat v dokumentech

2. Фwt = P(w|t), což je pravděpodobnostní rozdělení slov v tématech

A můžeme říci, že pravděpodobnost slova daného dokumentu i.P(w|d) je rovna:

kde T je celkový počet témat. Předpokládejme také, že v našem slovníku je W slov pro všechny dokumenty.

Pokud předpokládáme podmíněnou nezávislost, můžeme říci, že

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

A tedy P(w|d) je rovno:

což je bodový součin ϴtd a Фwt pro každé téma t.

To lze znázornit ve formě matice takto:

Kredit: Higher School of Economics

Při tomto pohledu si tedy můžeme LDA představit podobně jako maticovou faktorizaci nebo SVD, kdy matici rozdělení pravděpodobnosti slova v dokumentu rozložíme na dvě matice složené z rozdělení tématu v dokumentu a rozdělení slov v tématu.

Tedy to, co dostaneme, je například toto:

Kredit: David M. Blei

A abychom se vrátili k našemu příkladu s hracími kostkami, můžeme říci, že každé slovo v rozložení slov v tématu je podobné jedné straně hrací kostky a máme Dirichletův parametr, kterým kontrolujeme, zda všechna slova mají v tématu stejnou pravděpodobnost, nebo bude mít toto téma extrémní sklon k některým slovům. Stejná intuice platí i pro rozložení témat v dokumentu.

Dobře. Nyní přichází důležitá část. Jak se naučíme váhy těchto dvou matic?

Na začátek náhodně přiřaďme váhy oběma maticím a předpokládejme, že naše data jsou generována podle následujících kroků:

1. Váhy obou matic jsou náhodné. Náhodně vyberte téma z rozdělení témat v dokumentu na základě jejich přiřazených vah. V předchozím příkladu řekněme, že jsme vybrali růžové téma

2. Dále na základě distribuce slov pro vybrané téma náhodně vyberte slovo a vložte ho do dokumentu

3. Tento krok opakujte pro celý dokument

Při tomto postupu, pokud je náš odhad vah špatný, pak skutečná data, která budeme pozorovat, budou podle našich předpokládaných vah a procesu generování dat velmi nepravděpodobná. Řekněme například, že máme dokument D1, který se skládá z následujícího textu:

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

a řekněme, že přiřadíme vysoké váhy tématu T1, které má vysoké váhy pro slova jako Lžíce, Talíře, Cibule atd. pak uvidíme, že vzhledem k našemu předpokladu způsobu generování dat je velmi nepravděpodobné, že T1 patří do D1 nebo že tato slova patří do T1. Proto se snažíme maximalizovat pravděpodobnost našich dat vzhledem k těmto dvěma maticím.

Pro určení správných vah použijeme algoritmus zvaný Gibbsovo vzorkování. Pochopme nyní, co je Gibbsovo vzorkování a jak funguje v LDA.

Gibbsovo vzorkování

Gibbsovo vzorkování je algoritmus pro postupné vzorkování podmíněných rozdělení proměnných, jejichž rozdělení nad stavy dlouhodobě konverguje k pravdivému rozdělení. Jedná se o poněkud abstraktní pojem, který vyžaduje dobrou znalost Markovových řetězců Monte Carlo a Bayesovy věty. Tyto pojmy a matematika, která za nimi stojí, jsou poměrně složité a přesahují rámec tohoto blogu. Zde se pokusím přiblížit, jak funguje Gibbsovo vzorkování pro identifikaci témat v dokumentech.

Jak jsem se již zmínil, pro začátek budeme předpokládat, že známe matice ϴ a Ф. V případě, že se jedná o matice ϴ a Ф, budeme předpokládat, že je známe. Nyní budeme postupovat tak, že tyto matice budeme pomalu měnit a dostaneme se k odpovědi, která maximalizuje pravděpodobnost dat, která máme k dispozici. Budeme to dělat slovo po slově tak, že změníme přiřazení tématu jednoho slova. Budeme předpokládat, že neznáme přiřazení tématu daného slova, ale známe přiřazení všech ostatních slov v textu a pokusíme se odvodit, jaké téma bude tomuto slovu přiřazeno.

Podíváme-li se na to matematicky, děláme to, že se snažíme najít podmíněné rozdělení pravděpodobnosti přiřazení tématu jednoho slova podmíněné ostatními přiřazeními témat. Pomineme-li všechny matematické výpočty, dostaneme rovnici podmíněné pravděpodobnosti, která pro jedno slovo w v dokumentu d, které patří k tématu k, vypadá takto:

Kredit: Jordan Boyd-Graber

kde:

n(d,k):

v(k,w): Počet případů, kdy dokument d používá téma k

v(k,w): Počet případů, kdy téma k používá dané slovo

αk: Dirichletův parametr pro rozdělení dokumentu k tématu

λw: Dirichletův parametr pro distribuci tématu ke slovu

Tato rovnice má dvě části. První část nám říká, jak moc jsou jednotlivá témata přítomna v dokumentu, a druhá část říká, jak moc má každé téma rádo slovo. Všimněte si, že pro každé slovo získáme vektor pravděpodobností, který nám vysvětlí, s jakou pravděpodobností toto slovo patří k jednotlivým tématům. Ve výše uvedené rovnici je vidět, že Dirichletovy parametry fungují také jako vyhlazovací parametry, když je n(d,k) nebo v(k,w) nulové, což znamená, že stále bude existovat určitá šance, že si slovo vybere nějaké téma dopředu.

Projděme si nyní příklad:

Na začátek předpokládejme, že máme dokument s nějakým náhodným přiřazením tématu slovu, například jak je uvedeno níže:

Máme také naši matici počtu v(k,w), jak je znázorněno níže:

Nyní změníme přiřazení slova svět v dokumentu.

  • Nejprve snížíme počet souvětí v tématu 1 z 28 na 27, protože nevíme, do jakého tématu souvětí patří.
  • Druhé znázorníme matici n(d,k) následujícím způsobem, abychom ukázali, kolik dokument používá jednotlivých témat

– Za třetí, znázorněme v(k,w) následujícím způsobem, abychom ukázali, kolikrát je každé téma přiřazeno k tomuto slovu

  • za čtvrté, vynásobíme tyto dvě matice, abychom získali naše podmíněné pravděpodobnosti

  • Nakonec náhodně vybereme libovolné téma a toto téma přiřadíme k souvětí a tyto kroky zopakujeme i pro všechna ostatní slova. Intuitivně by mělo být vybráno téma s nejvyšší podmíněnou pravděpodobností, ale jak vidíme, i ostatní témata mají určitou šanci být vybrána

To je vše. Tohle dělá Gibbsův vzorkovací algoritmus pod kapotou. Sice jsme přeskočili některé detaily, jako je ladění hyperparametrů, ale z intuitivního hlediska takto funguje Gibbsovo vzorkování pro modelování témat.

Takže to je vše k teorii Latentní Dirichletovy alokace. Doufám, že vám to pomohlo pochopit, co je to tematické modelování a jak používáme LDA s Gibbsovým vzorkováním pro tematické modelování. V příštím článku zveřejním implementaci LDA pomocí jazyka Python.

Díky!

.

admin

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

lg