Prognozowanie tematu przy użyciu ukrytego przydziału Dirichleta

17

Użyłem LDA do zbioru dokumentów i znalazłem kilka tematów. Wynikiem mojego kodu są dwie macierze zawierające prawdopodobieństwa; jedno prawdopodobieństwo doc-temat i drugie prawdopodobieństwo słowo-temat. Ale tak naprawdę nie wiem, jak wykorzystać te wyniki do przewidzenia tematu nowego dokumentu. Korzystam z próbkowania Gibbs. Czy ktoś wie jak? dzięki

Hossein
źródło
1
Co rozumiesz przez „przewidywanie tematu nowego dokumentu”? Czy chcesz dowiedzieć się, z którego jednego tematu został wygenerowany ten dokument? Czy chcesz znaleźć mieszankę tematów do dokumentu? Czy chcesz oznaczyć każde słowo w nowym dokumencie tematem, z którego ono pochodzi?
SheldonCooper
Czy chcesz dowiedzieć się, z którego jednego tematu został wygenerowany ten dokument? Czy chcesz znaleźć mieszankę tematów do dokumentu? - Właściwie chcę odpowiedzieć na oba te pytania ... ale mój korpus jest naprawdę duży, więc nie mogę sobie pozwolić na ponowne przeszkolenie całego modelu za każdym razem, gdy nowy dokument jest badany
Hossein

Odpowiedzi:

21

Spróbowałbym „złożyć”. Odnosi się to do pobrania jednego nowego dokumentu, dodania go do korpusu, a następnie uruchomienia próbkowania Gibbsa tylko na słowach w tym nowym dokumencie , zachowując przypisania tematyczne starych dokumentów bez zmian. Zwykle zbiega się to szybko (może 5-10-20 iteracji) i nie trzeba próbkować starego korpusu, więc działa również szybko. Na końcu będziesz mieć przypisanie tematu do każdego słowa w nowym dokumencie. Zapewni to dystrybucję tematów w tym dokumencie.

W twoim samplerze Gibbs prawdopodobnie masz coś podobnego do następującego kodu:

// This will initialize the matrices of counts, N_tw (topic-word matrix) and N_dt (document-topic matrix)
for doc = 1 to N_Documents
    for token = 1 to N_Tokens_In_Document
       Assign current token to a random topic, updating the count matrices
    end
end

// This will do the Gibbs sampling
for doc = 1 to N_Documents
    for token = 1 to N_Tokens_In_Document
       Compute probability of current token being assigned to each topic
       Sample a topic from this distribution
       Assign the token to the new topic, updating the count matrices
    end
end

Składanie jest takie samo, z tym wyjątkiem, że zaczynasz od istniejących macierzy, dodajesz do nich tokeny nowego dokumentu i próbkujesz tylko dla nowych tokenów. To znaczy:

Start with the N_tw and N_dt matrices from the previous step

// This will update the count matrices for folding-in
for token = 1 to N_Tokens_In_New_Document
   Assign current token to a random topic, updating the count matrices
end

// This will do the folding-in by Gibbs sampling
for token = 1 to N_Tokens_In_New_Document
   Compute probability of current token being assigned to each topic
   Sample a topic from this distribution
   Assign the token to the new topic, updating the count matrices
end

pwjawjajotwjot

jotpwjotja
(uwaga, że prawdopodobnie będzie trzeba obliczyć go w przestrzeni dziennika).
Sheldon Cooper
źródło
dziękuję za odpowiedź. Przeczytałem kilka rzeczy na temat, ale nadal jestem trochę zdezorientowany co do „składania”. Mówisz, że powinienem zachować takie same przypisania tematów do starych dokumentów, co oznacza, że ​​przypisania tematów do słów powinny zostać ponownie obliczone? Czy możesz podać mi bardziej szczegółowe kroki, które należy zrobić? a może odsyłając mnie do artykułu lub linku, który może pomóc mi wyjaśnić ten proces „składania”. Moją pierwszą opcją jest „złożenie”. Jeśli się nie powiedzie, wybiorę drugą zaproponowaną metodę (nie jestem pewien, jak dobrze to działa w porównaniu do składania). Dzięki.
Hossein
@SheldonCooper: Jeśli dobrze cię rozumiem, wątpię, aby tak to zrobić: robisz tak, jakbyś mierzył wydajność SVM na nowej próbce testowej, podając algorytm optymalizacji kilka kroków od obecne rozwiązanie obejmujące próbkę testową, a następnie oceń ją na tej próbce ... ale: w uczeniu maszynowym nigdy nie możesz testować swojego zestawu szkoleniowego ... i włączając próbkę testową do modelu, robisz dokładnie to: test na próbka szkoleniowa ...
Fabian Werner
@FabianWerner Uważam, że rozwiązanie nie zaktualizowało matrycy tematów słów z oryginalnego szkolenia. Po prostu ponownie uruchamia sampler Gibbs, zaczynając od wyuczonej matrycy temat-słowo, i tworzy nową matrycę temat-dokument. W każdym razie, czy znasz inny sposób zrobienia tego, o co poprosił PO (co prawda kilka lat temu)? Patrzę na ten sam problem.
thecity2
@ thecity2 Chociaż od dłuższego czasu zastanawiam się nad tym problemem, muszę ze smutkiem powiedzieć, że nie mam jeszcze rozwiązania. Jeśli znajdziesz taki, daj mi znać !!!
Fabian Werner
@FabianWerner Nie masz pociągu i testu ustawionego w tym problemie - twój komentarz nie ma tu znaczenia. Jest to nauka bez nadzoru, podobnie jak klastrowanie.
emem