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:
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:
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!
.