Ankur Tomar

Follow

Nov 25, 2018 – 9 min read

Credits: Christine Doig

Witam wszystkich. Minęło sporo czasu od mojego ostatniego bloga na temat różnych typów systemów rekomendujących. Tym razem będę pisał o Modelowaniu Tematycznym.

Istnieje wiele źródeł, z których można dowiedzieć się czym jest Modelowanie Tematyczne, ale myślę, że większość z nich jest nieco techniczna i wymaga dobrej znajomości matematyki i innych technik, takich jak Łańcuchy Markowa. W tym artykule postaram się wyjaśnić ideę modelowania tematycznego w bardzo intuicyjny sposób, z minimalną ilością matematyki i szczegółów technicznych. Napiszę ten artykuł w dwóch częściach. W pierwszej części postaram się wyjaśnić, czym jest modelowanie tematyczne, a w drugiej przedstawię tutorial w Pythonie, jak wykonać modelowanie tematyczne na rzeczywistym zbiorze danych.

Zanim zacznę, chcę przyznać, że ten artykuł jest silnie zainspirowany wykładem z mojej eksploracyjnej analityki danych prof. Edwarda McFowlanda, kursem Coursera na temat przetwarzania języka naturalnego prowadzonym przez Wyższą Szkołę Ekonomiczną oraz wyjaśnieniem próbkowania Gibbsa przez Jordana Boyda-Grabera.

Co to jest modelowanie tematyczne?

Modelowanie tematyczne jest gałęzią nienadzorowanego przetwarzania języka naturalnego, która jest używana do reprezentowania dokumentu tekstowego za pomocą kilku tematów, które mogą najlepiej wyjaśnić podstawowe informacje w danym dokumencie. Można to rozpatrywać w kategoriach klasteryzacji, ale z pewną różnicą. Teraz, zamiast cech liczbowych, mamy zbiór słów, które chcemy pogrupować w taki sposób, aby każda grupa reprezentowała temat w dokumencie.

Dlaczego potrzebujemy modelowania tematycznego?

Dobrze, więc teraz pojawia się pytanie, dlaczego potrzebujemy modelowania tematycznego? Jeśli rozejrzymy się dookoła, możemy zobaczyć ogromną ilość danych tekstowych leżących wokół nas w nieustrukturyzowanym formacie w postaci artykułów informacyjnych, prac badawczych, postów w mediach społecznościowych itp. i potrzebujemy sposobu, aby zrozumieć, zorganizować i oznaczyć te dane, aby podejmować świadome decyzje. Modelowanie tematyczne jest wykorzystywane w różnych aplikacjach, takich jak wyszukiwanie pytań na stack overflow, które są podobne do siebie, agregacja i analiza przepływu wiadomości, systemy rekomendujące itp. Wszystkie one skupiają się na znalezieniu ukrytej struktury tematycznej w tekście, ponieważ uważa się, że każdy tekst, który piszemy, czy to tweet, post czy praca naukowa składa się z tematów takich jak sport, fizyka, lotnictwo i kosmonautyka itp.

Jak zrobić modelowanie tematyczne?

Obecnie istnieje wiele sposobów na modelowanie tematyczne, ale w tym poście będziemy omawiać probabilistyczne podejście do modelowania zwane Latent Dirichlet Allocation (LDA) opracowane przez Prof. Davida M. Blei w 2003 roku. Jest to rozszerzenie Probabilistycznej Latentnej Analizy Semantycznej (PLSA) opracowanej w 1999 roku przez Thomasa Hoffmana z bardzo małą różnicą w sposobie traktowania dystrybucji per-dokument. Przejdźmy więc od razu do tego, jak działa LDA.

Latent Dirichlet Allocation

Zacznijmy od zrozumienia znaczenia każdego słowa w tytule, ponieważ uważam, że zawiera on wszystko, co musimy wiedzieć, aby zrozumieć, jak działa LDA.

Latent: Odnosi się to do wszystkiego, czego nie znamy a priori i co jest ukryte w danych. W tym przypadku tematy lub zagadnienia, z których składa się dokument są nieznane, ale uważa się, że są one obecne, ponieważ tekst jest generowany w oparciu o te tematy.

Dirichlet: Jest to „rozkład rozkładów”. Tak, dobrze przeczytałeś. Ale co to oznacza? Zastanówmy się nad tym na przykładzie. Załóżmy, że istnieje maszyna, która produkuje kostki do gry i możemy kontrolować, czy maszyna będzie zawsze produkować kostkę z równą wagą dla wszystkich stron, czy też będzie jakaś stronniczość dla niektórych stron. Tak więc maszyna produkująca kostki jest dystrybucją, ponieważ produkuje kostki różnych typów. Wiemy również, że sama kostka do gry jest rozkładem, ponieważ podczas rzucania kostką otrzymujemy wiele wartości. To właśnie oznacza bycie rozkładem rozkładów i tym właśnie jest Dirichlet. Tutaj, w kontekście modelowania tematycznego, Dirichlet jest rozkładem tematów w dokumentach i rozkładem słów w temacie. W tym momencie może to nie być zbyt jasne, ale to dobrze, ponieważ za chwilę przyjrzymy się temu bardziej szczegółowo.

Alokacja: Oznacza to, że gdy mamy już Dirichleta, przypiszemy tematy do dokumentów, a słowa z dokumentu do tematów.

To wszystko. Oto czym w skrócie jest LDA. Zrozummy teraz, jak to działa w modelowaniu tematycznym.

Podsumowując, LDA mówi, że każde słowo w każdym dokumencie pochodzi z tematu, a temat jest wybierany z rozkładu per-dokument na tematy. Mamy więc dwie macierze:

1. ϴtd = P(t|d), która jest rozkładem prawdopodobieństwa tematów w dokumentach

2. Фwt = P(w|t), która jest rozkładem prawdopodobieństwa słów w tematach

I możemy powiedzieć, że prawdopodobieństwo słowa w danym dokumencie i.e. P(w|d) jest równe:

gdzie T jest całkowitą liczbą tematów. Załóżmy również, że w naszym słowniku znajduje się W liczba słów dla wszystkich dokumentów.

Jeśli założymy warunkową niezależność, to możemy powiedzieć, że

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

A stąd P(w|d) jest równe:

czyli iloczynowi punktowemu ϴtd i Фwt dla każdego tematu t.

Można to przedstawić w postaci macierzy w taki sposób:

Kredit: Wyższa Szkoła Ekonomiczna

Patrząc na to możemy więc myśleć o LDA podobnie jak o faktoryzacji macierzy lub SVD, gdzie rozkładamy macierz rozkładu prawdopodobieństwa słowa w dokumencie na dwie macierze składające się z rozkładu tematu w dokumencie i rozkładu słów w temacie.

Więc to co otrzymamy to na przykład to:

Credit: David M. Blei

I aby powrócić do naszego przykładu z kostką do gry, możemy powiedzieć, że każde słowo w rozkładzie słów w temacie jest podobne do strony kostki do gry, i mamy parametr Dirichleta, aby kontrolować, czy wszystkie słowa mają takie samo prawdopodobieństwo w temacie, czy też temat będzie miał ekstremalne odchylenie w kierunku niektórych słów. Ta sama intuicja odnosi się do rozkładu tematów w dokumencie.

Dobrze. Teraz nadchodzi ważna część. Jak nauczyć się wag tych dwóch macierzy?

Na początek losowo przypiszmy wagi obu macierzom i załóżmy, że nasze dane są generowane zgodnie z następującymi krokami:

1. Losowo wybierz temat z rozkładu tematów w dokumencie na podstawie przypisanych im wag. W poprzednim przykładzie, powiedzmy, że wybraliśmy temat różowy

2. Następnie, w oparciu o rozkład słów dla wybranego tematu, wybierz losowo słowo i umieść je w dokumencie

3. Powtórz ten krok dla całego dokumentu

W tym procesie, jeśli nasze przypuszczenia dotyczące wag są błędne, to rzeczywiste dane, które obserwujemy, będą bardzo mało prawdopodobne w ramach naszych założonych wag i procesu generowania danych. Na przykład, powiedzmy, że mamy dokument D1, który składa się z następującego tekstu:

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

i powiedzmy, że przypisujemy wysokie wagi do tematu T1, który ma wysokie wagi dla słów takich jak Łyżka, Talerze, Cebula itp. wtedy zobaczymy, że biorąc pod uwagę nasze założenie dotyczące sposobu generowania danych, jest bardzo mało prawdopodobne, że T1 należy do D1 lub te słowa należą do T1. Dlatego też, to co robimy, to próbujemy zmaksymalizować prawdopodobieństwo naszych danych, biorąc pod uwagę te dwie macierze.

Aby zidentyfikować prawidłowe wagi, użyjemy algorytmu zwanego próbkowaniem Gibbsa. Zrozummy teraz czym jest próbkowanie Gibbsa i jak działa ono w LDA.

Próbkowanie Gibbsa

Próbkowanie Gibbsa jest algorytmem sukcesywnego próbkowania warunkowych rozkładów zmiennych, których rozkład w stanach zbiega się do prawdziwego rozkładu w długim okresie czasu. Jest to nieco abstrakcyjna koncepcja i wymaga dobrego zrozumienia łańcuchów Monte Carlo Markov Chains i twierdzenia Bayesa. Te pojęcia i stojąca za nimi matematyka jest dość złożona i wykracza poza zakres tego bloga. Tutaj postaram się przedstawić intuicję tego, jak działa próbkowanie Gibbsa w celu identyfikacji tematów w dokumentach.

Jak wspomniałem wcześniej, na początek założymy, że znamy macierze ϴ i Ф. Teraz będziemy powoli zmieniać te macierze i dojdziemy do odpowiedzi, która zmaksymalizuje prawdopodobieństwo danych, które mamy. Będziemy to robić na zasadzie słowo po słowie, zmieniając przypisanie tematyczne jednego słowa. Założymy, że nie znamy przyporządkowania tematycznego danego słowa, ale znamy przyporządkowanie wszystkich innych słów w tekście i spróbujemy wywnioskować, jaki temat zostanie przypisany temu słowu.

Jeśli spojrzymy na to w sposób matematyczny, to co robimy, to próbujemy znaleźć warunkowy rozkład prawdopodobieństwa przyporządkowania tematycznego pojedynczego słowa uwarunkowany pozostałymi przyporządkowaniami tematycznymi. Ignorując wszystkie obliczenia matematyczne, to co otrzymamy to równanie prawdopodobieństwa warunkowego, które wygląda tak dla pojedynczego słowa w w dokumencie d, które należy do tematu k:

Credit: Jordan Boyd-Graber

gdzie:

n(d,k): Liczba przypadków użycia tematu k przez dokument d

v(k,w): Liczba przypadków użycia danego słowa przez temat k

αk: Parametr Dirichleta dla rozkładu dokumentu na temat

λw: Parametr Dirichleta dla rozkładu temat-słowo

W tym równaniu są dwie części. Pierwsza część mówi nam jak bardzo każdy temat jest obecny w dokumencie, a druga część mówi jak bardzo każdy temat lubi dane słowo. Zauważ, że dla każdego słowa, otrzymamy wektor prawdopodobieństw, który wyjaśni jak bardzo prawdopodobne jest, że to słowo należy do każdego z tematów. W powyższym równaniu można zauważyć, że parametry Dirichleta działają również jako parametry wygładzające, gdy n(d,k) lub v(k,w) wynosi zero, co oznacza, że nadal będzie istniała pewna szansa, że słowo wybierze temat w przyszłości.

Przejrzyjmy teraz przykład:

Na początek załóżmy, że mamy dokument z pewnym losowym przypisaniem słowa do tematu, na przykład tak, jak pokazano poniżej:

Mamy też naszą macierz zliczeń v(k,w), jak pokazano poniżej:

Zmieńmy teraz przypisanie słowa world w dokumencie.

  • Po pierwsze, zmniejszymy liczbę słów world w temacie 1 z 28 do 27, ponieważ nie wiemy, do jakiego tematu należy world.
  • Po drugie, przedstawmy macierz n(d,k) w następujący sposób, aby pokazać, jak bardzo dokument korzysta z każdego tematu

– Po trzecie, przedstawmy v(k,w) w następujący sposób, aby pokazać ile razy każdy temat jest przypisany do tego słowa

  • Po czwarte, pomnożymy te dwie macierze, aby otrzymać nasze prawdopodobieństwa warunkowe

  • Na koniec wybierzemy losowo dowolny temat i przypiszemy go do świata, a następnie powtórzymy te kroki dla wszystkich pozostałych słów. Intuicyjnie, temat z najwyższym prawdopodobieństwem warunkowym powinien zostać wybrany, ale jak widzimy, inne tematy również mają pewne szanse zostać wybrane

To wszystko. Oto co algorytm próbkowania Gibbsa robi pod maską. Chociaż pominęliśmy niektóre szczegóły, takie jak dostrajanie hiperparametrów, ale z perspektywy intuicji, tak właśnie działa próbkowanie Gibbsa dla modelowania tematycznego.

Więc, to jest to dla teorii Latent Dirichlet Allocation. Mam nadzieję, że było to pomocne w zrozumieniu czym jest modelowanie tematyczne i jak używamy LDA z Gibbsem do modelowania tematycznego. W następnym artykule przedstawię implementację LDA przy użyciu Pythona.

Dziękuję!

admin

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

lg