där T är det totala antalet ämnen. Låt oss också anta att det finns W antal ord i vårt ordförråd för alla dokument.
Om vi antar villkorligt oberoende kan vi säga att
P(w|t,d) = P(w|t)
Och därmed är P(w|d) lika med:
som är punktprodukten av ϴtd och Фwt för varje ämne t.
Detta kan representeras i form av en matris så här:
Det vi får fram är till exempel detta:
Och för att återknyta till vårt exempel med tärningar kan vi säga att varje ord i fördelningen av ord i ett ämne liknar en sida av tärningen, och vi har Dirichlet-parametern för att kontrollera om alla ord har samma sannolikhet i ett ämne eller om ämnet kommer att ha en extrem förskjutning mot vissa ord. Samma intuition gäller för fördelningen av ämnen i ett dokument.
Godt. Nu kommer den viktiga delen. Hur lär vi oss vikterna för dessa två matriser?
För att börja med, låt oss slumpmässigt tilldela vikter till båda matriserna och anta att våra data genereras enligt följande steg:
1. Välj slumpmässigt ett ämne från fördelningen av ämnen i ett dokument baserat på deras tilldelade vikter. I det tidigare exemplet, låt oss säga att vi valde rosa ämne
2. Därefter, baserat på fördelningen av ord för det valda ämnet, välj ett slumpmässigt ord och placera det i dokumentet
3. Upprepa det här steget för hela dokumentet
I den här processen, om vår gissning av vikterna är felaktig, kommer de faktiska data som vi observerar att vara mycket osannolika enligt våra antagna vikter och process för att generera data. Låt oss till exempel säga att vi har dokument D1 som består av följande text:
”Qualcomm® Adreno™ 630 Visual Processing Subsystem featuring room-scale 6DoF with SLAM, Adreno Foveation”
och låt oss säga att vi tilldelar höga vikter till ämnet T1 som har höga vikter för ord som Spoon, Plates, Onions etc. Då kommer vi att se att med tanke på vårt antagande om hur data genereras, så är det mycket osannolikt att T1 hör till D1 eller att dessa ord hör till T1. Vad vi gör är därför att vi försöker maximera sannolikheten för våra data givet dessa två matriser.
För att identifiera de korrekta vikterna kommer vi att använda en algoritm som kallas Gibbs sampling. Låt oss nu förstå vad Gibbs sampling är och hur den fungerar i LDA.
Gibbs sampling
Gibbs sampling är en algoritm för successivt sampling av betingade fördelningar av variabler, vars fördelning över tillstånden konvergerar mot den sanna fördelningen på lång sikt. Detta är ett något abstrakt begrepp och kräver en god förståelse för Monte Carlo Markov-kedjor och Bayes-satsen. Dessa begrepp och matematiken bakom dem är ganska komplexa och ligger utanför ramen för den här bloggen. Här ska jag försöka ge en intuition om hur Gibbs Sampling fungerar för att identifiera ämnen i dokumenten.
Som jag nämnde tidigare kommer vi till att börja med att anta att vi känner till ϴ- och Ф-matriserna. Vad vi nu kommer att göra är att vi långsamt ändrar dessa matriser och kommer fram till ett svar som maximerar sannolikheten för de data vi har. Vi kommer att göra detta ord för ord genom att ändra ämnestilldelningen för ett ord. Vi kommer att anta att vi inte känner till ämnestilldelningen för det givna ordet men att vi känner till tilldelningen för alla andra ord i texten och vi kommer att försöka härleda vilket ämne som kommer att tilldelas detta ord.
Om vi ser på detta på ett matematiskt sätt är det vi gör att vi försöker hitta en villkorlig sannolikhetsfördelning för ett enskilt ords ämnestilldelning som är villkorad av resten av ämnestilldelningarna. Om vi bortser från alla matematiska beräkningar får vi en betingad sannolikhetsekvation som ser ut så här för ett enskilt ord w i dokument d som tillhör ämne k:
här:
n(d,k): Antal gånger dokument d använder ämne k
v(k,w): Antal gånger dokument d använder ämne k
v(k,w): Antal gånger dokument d använder ämne k: Antal gånger ämne k använder det givna ordet
αk: Dirichlet-parameter för fördelningen mellan dokument och ämne
λw: Dirichlet-parameter för fördelningen mellan ämne och ord
Det finns två delar två denna ekvation. Den första delen talar om hur mycket varje ämne förekommer i ett dokument och den andra delen talar om hur mycket varje ämne gillar ett ord. Observera att vi för varje ord får en vektor av sannolikheter som förklarar hur troligt det är att ordet hör till varje ämne. I ekvationen ovan kan man se att Dirichlet-parametrarna också fungerar som utjämningsparametrar när n(d,k) eller v(k,w) är noll, vilket innebär att det fortfarande finns en viss chans att ordet kommer att välja ett ämne framöver.
Låt oss gå igenom ett exempel nu:
För att börja antar vi att vi har ett dokument med en slumpmässig ämnestilldelning av ord, till exempel enligt nedan:
Vi har också vår räkningsmatris v(k,w) som visas nedan:
Nu ändrar vi tilldelningen av ordet world i dokumentet.
- Först kommer vi att minska antalet värld i ämne 1 från 28 till 27 eftersom vi inte vet vilket ämne värld tillhör.
- För det andra ska vi representera matrisen n(d,k) på följande sätt för att visa hur mycket ett dokument använder varje ämne
– Tredje, Låt oss representera v(k,w) på följande sätt för att visa hur många gånger varje ämne tilldelas detta ord
- Fjärde, multiplicerar vi dessa två matriser för att få våra villkorliga sannolikheter
- Slutligt väljer vi slumpmässigt ut något av ämnena och tilldelar det ämnet till världen, och vi upprepar dessa steg för alla andra ord också. Intuitivt bör det ämne som har högst villkorad sannolikhet väljas, men som vi kan se har andra ämnen också en viss chans att väljas
Det var allt. Detta är vad Gibbs sampling-algoritmen gör under huven. Även om vi hoppade över vissa detaljer som hyperparameteravstämning, men ur ett intuitivt perspektiv är detta hur Gibbs sampling fungerar för ämnesmodellering.
Så, detta är allt för teorin om Latent Dirichlet Allocation. Jag hoppas att detta var till hjälp för att förstå vad ämnesmodellering är och hur vi använder LDA med Gibbs för ämnesmodellering. I nästa artikel kommer jag att publicera implementeringen av LDA med hjälp av Python.
Tack!