Ankur Tomar

Follow

25 nov, 2018 – 9 min read

Credits: Christine Doig

Hoi iedereen. Het is alweer een hele tijd geleden dat ik mijn laatste blog schreef over de verschillende soorten aanbevelingssystemen. Deze keer schrijf ik over Topic Modelling.

Er zijn talloze bronnen te vinden waar je kunt leren wat Topic Modelling is, maar ik denk dat de meeste nogal technisch zijn en een goede kennis van wiskunde en andere technieken zoals Markov Chains vereisen. In dit artikel zal ik proberen om het idee achter Topic Modelling uit te leggen op een zeer intuïtieve manier met een minimum aan wiskunde en technische details. Ik zal dit artikel in twee delen schrijven. In het eerste deel zal ik proberen uit te leggen wat topic modeling is en in het tweede deel zal ik een python tutorial geven van hoe je topic modeling kunt doen op de real-world dataset.

Voordat ik begin, wil ik erkennen dat dit artikel sterk geïnspireerd is door de lezing van mijn exploratory data analytics Prof. Edward McFowland, de cursus Natural Language Processing van Coursera door de Higher School of Economics en Jordan Boyd-Graber uitleg over Gibbs sampling.

Wat is topic modeling?

Topic modeling is een tak van unsupervised natural language processing die wordt gebruikt om een tekstdocument weer te geven met behulp van verschillende topics, die de onderliggende informatie in een bepaald document het beste kunnen verklaren. Dit kan worden gedacht in termen van clustering, maar met een verschil. In plaats van numerieke kenmerken hebben we nu een verzameling woorden die we zodanig willen groeperen dat elke groep een onderwerp in een document vertegenwoordigt.

Waarom hebben we topic modeling nodig?

Okay, dus nu rijst de vraag waarom hebben we topic modeling nodig? Als we om ons heen kijken, zien we een enorme hoeveelheid ongestructureerde tekstuele gegevens in de vorm van nieuwsartikelen, onderzoekspapers, berichten in de sociale media, enz. en we hebben een manier nodig om deze gegevens te begrijpen, te ordenen en te labelen om weloverwogen beslissingen te kunnen nemen. Topic modeling wordt gebruikt in verschillende toepassingen zoals het vinden van vragen op stack overflow die gelijkaardig zijn aan elkaar, nieuwsstroom aggregatie en analyse, recommender systemen enz. Al deze toepassingen richten zich op het vinden van de verborgen thematische structuur in de tekst, omdat wordt aangenomen dat elke tekst die we schrijven, of het nu een tweet, post of een onderzoeksartikel is, is samengesteld uit thema’s zoals sport, natuurkunde, ruimtevaart, enz.

Hoe doe je aan topic modeling?

Er zijn momenteel veel manieren om aan topic modeling te doen, maar in deze post zullen we een probabilistische modelbenadering bespreken die Latente Dirichlet Allocatie (LDA) wordt genoemd en die in 2003 door Prof. David M. Blei is ontwikkeld. Dit is een uitbreiding van Probabilistic Latent Semantic Analysis (PLSA), ontwikkeld in 1999 door Thomas Hoffman, met een miniem verschil in de manier waarop ze de verdeling per document behandelen. Dus laten we meteen beginnen met hoe LDA werkt.

Latente Dirichlet Allocatie

Laten we beginnen met het begrijpen van de betekenis van elk woord in de titel, omdat ik denk dat het alles bevat wat we moeten weten om te begrijpen hoe LDA werkt.

Latent: Dit verwijst naar alles wat we niet a priori weten en verborgen zijn in de gegevens. Hier zijn de thema’s of onderwerpen waaruit het document bestaat onbekend, maar ze worden verondersteld aanwezig te zijn omdat de tekst op basis van die onderwerpen wordt gegenereerd.

Dirichlet: Het is een “verdeling van verdelingen”. Ja, u leest het goed. Maar wat betekent dit? Laten we daar eens over nadenken met behulp van een voorbeeld. Stel dat er een machine is die dobbelstenen produceert en we kunnen controleren of de machine altijd een dobbelsteen zal produceren met een gelijk gewicht voor alle kanten, of dat er een vooroordeel zal zijn voor sommige kanten. De machine die dobbelstenen produceert is dus een verdeling, want zij produceert dobbelstenen van verschillende soorten. Ook weten we dat de dobbelsteen zelf een verdeling is, omdat we meerdere waarden krijgen als we met een dobbelsteen gooien. Dit is wat het betekent om een verdeling van verdelingen te zijn en dit is wat Dirichlet is. Hier, in de context van topic modeling, is de Dirichlet de verdeling van topics in documenten en de verdeling van woorden in het topic. Het is misschien niet erg duidelijk op dit moment, maar het is prima, want we zullen het over een tijdje in meer detail bekijken.

Allocatie: Dit betekent dat zodra we Dirichlet hebben, we onderwerpen aan de documenten zullen toewijzen en woorden van het document aan onderwerpen.

Dat is het. Dit is wat LDA is in een notendop. Laten we nu eens begrijpen hoe dit werkt in topic modeling.

Let even ter herinnering, wat LDA zegt is dat elk woord in elk document afkomstig is van een topic en dat het topic wordt gekozen uit een per-document verdeling over topics. We hebben dus twee matrices:

1. ϴtd = P(t|d) dat is de waarschijnlijkheidsverdeling van onderwerpen in documenten

2. Фwt = P(w|t) dat is de waarschijnlijkheidsverdeling van woorden in onderwerpen

En, we kunnen zeggen dat de waarschijnlijkheid van een woord gegeven document i.d. P(w|d) gelijk is aan:

waarbij T het totale aantal onderwerpen is. Laten we ook aannemen dat onze woordenschat voor alle documenten W aantal woorden bevat.

Als we uitgaan van voorwaardelijke onafhankelijkheid, kunnen we zeggen dat

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

En dus is P(w|d) gelijk aan:

dat is het scalair product van ϴtd en Фwt voor elk onderwerp t.

Dit kan in de vorm van een matrix als volgt worden weergegeven:

Credit: Higher School of Economics

Dus, als we hiernaar kijken, kunnen we LDA vergelijken met matrixfactorisatie of SVD, waarbij we de waarschijnlijkheidsverdelingsmatrix van woorden in documenten ontleden in twee matrices die bestaan uit de verdeling van onderwerpen in een document en de verdeling van woorden in een onderwerp.

Dus wat we krijgen is bijvoorbeeld dit:

Credit: David M. Blei

En om terug te komen op ons voorbeeld van dobbelstenen, kunnen we zeggen dat elk woord in de verdeling van woorden in een onderwerp vergelijkbaar is met een zijde van de dobbelsteen, en we hebben Dirichlet-parameter om te controleren of alle woorden dezelfde waarschijnlijkheid hebben in een onderwerp of dat het onderwerp een extreme voorkeur heeft voor bepaalde woorden. Dezelfde intuïtie geldt voor de verdeling van de onderwerpen in een document.

Goed. Nu komt het belangrijke deel. Hoe leren we de gewichten van deze twee matrices?

Om te beginnen, laten we willekeurig gewichten toekennen aan beide matrices en aannemen dat onze gegevens worden gegenereerd volgens de volgende stappen:

1. Kies willekeurig een onderwerp uit de verdeling van onderwerpen in een document op basis van de aan hen toegewezen gewichten. Laten we in het vorige voorbeeld zeggen dat we roze onderwerp hebben gekozen

2. Selecteer vervolgens op basis van de woordverdeling voor het gekozen onderwerp een willekeurig woord en plaats het in het document

3. Herhaal deze stap voor het hele document

In dit proces, als onze gok van de gewichten verkeerd is, zullen de werkelijke gegevens die we observeren zeer onwaarschijnlijk zijn onder onze veronderstelde gewichten en het proces van gegevensgeneratie. Bijvoorbeeld, laten we zeggen dat we document D1 hebben dat uit de volgende tekst bestaat:

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

en laten we zeggen dat we hoge gewichten toekennen aan onderwerp T1 dat hoge gewichten heeft voor woorden als Lepel, Borden, Uien enz. dan zullen we zien dat gegeven onze aanname van hoe gegevens worden gegenereerd, het zeer onwaarschijnlijk is dat T1 bij D1 hoort of dat deze woorden bij T1 horen. Daarom proberen we de waarschijnlijkheid van onze gegevens te maximaliseren, gegeven deze twee matrices.

Om de juiste gewichten te bepalen, zullen we een algoritme gebruiken dat Gibbs sampling heet. Laten we nu eens begrijpen wat Gibbs sampling is en hoe het werkt in LDA.

Gibbs Sampling

Gibbs sampling is een algoritme voor het achtereenvolgens bemonsteren van voorwaardelijke verdelingen van variabelen, waarvan de verdeling over toestanden op de lange termijn convergeert naar de ware verdeling. Dit is een enigszins abstract concept en vereist een goed begrip van Monte Carlo Markov Chains en de stelling van Bayes. Deze concepten en de wiskunde erachter zijn vrij complex en vallen buiten het bestek van deze blog. Hier zal ik proberen een intuïtie te geven over hoe Gibbs Sampling werkt om onderwerpen in de documenten te identificeren.

Zoals ik al eerder zei, gaan we er om te beginnen van uit dat we ϴ en Ф matrices kennen. We zullen deze matrices langzaam veranderen om tot een antwoord te komen dat de waarschijnlijkheid maximaliseert van de gegevens die we hebben. We zullen dit woord voor woord doen door de topic-toewijzing van één woord te veranderen. We gaan ervan uit dat we de topic-toewijzing van het gegeven woord niet kennen, maar we kennen de toewijzing van alle andere woorden in de tekst en we zullen proberen af te leiden welk onderwerp aan dit woord zal worden toegewezen.

Als we dit op een wiskundige manier bekijken, proberen we een voorwaardelijke kansverdeling te vinden van de topic-toewijzing van één enkel woord, afhankelijk van de rest van de topic-toewijzingen. Als we alle wiskundige berekeningen negeren, krijgen we een voorwaardelijke waarschijnlijkheidsvergelijking die er als volgt uitziet voor één enkel woord w in document d dat behoort tot onderwerp k:

Credit: Jordan Boyd-Graber

waar:

n(d,k): Aantal keren dat document d onderwerp k gebruikt

v(k,w): Aantal keren dat onderwerp k het gegeven woord gebruikt

αk: Dirichlet-parameter voor de verdeling van document naar onderwerp

λw: Dirichlet parameter voor topic naar woord verdeling

Er zijn twee delen in deze vergelijking. Het eerste deel vertelt ons hoeveel elk onderwerp aanwezig is in een document en het tweede deel vertelt hoeveel elk onderwerp van een woord houdt. Merk op dat we voor elk woord een vector van waarschijnlijkheden krijgen die uitlegt hoe waarschijnlijk het is dat dit woord bij elk van de onderwerpen hoort. In de bovenstaande vergelijking kan men zien dat de Dirichlet parameters ook fungeren als afvlakkingsparameters wanneer n(d,k) of v(k,w) nul is, wat betekent dat er nog steeds enige kans zal zijn dat het woord een onderwerp zal kiezen.

Laten we nu een voorbeeld doornemen:

Om te beginnen, stel dat we een document hebben met een willekeurige toewijzing van een woordonderwerp, bijvoorbeeld zoals hieronder afgebeeld:

We hebben ook onze telmatrix v(k,w) zoals hieronder weergegeven:

Nu gaan we de toewijzing van het woord wereld in het document veranderen.

  • Eerst zullen we het aantal werelden in onderwerp 1 terugbrengen van 28 naar 27, omdat we niet weten tot welk onderwerp wereld behoort.
  • Tweede laten we de matrix n(d,k) op de volgende manier weergeven om te laten zien hoeveel een document elk onderwerp gebruikt

– Ten derde, laten we v(k,w) op de volgende manier weergeven om te laten zien hoe vaak elk onderwerp aan dit woord is toegewezen

  • Vierde, vermenigvuldigen we deze twee matrices om onze voorwaardelijke kansen te krijgen

  • Tot slot kiezen we willekeurig een onderwerp en wijzen we dat onderwerp toe aan wereld en herhalen we deze stappen ook voor alle andere woorden. Intuïtief zou het onderwerp met de hoogste voorwaardelijke waarschijnlijkheid moeten worden geselecteerd, maar zoals we kunnen zien, hebben andere onderwerpen ook een kans om te worden geselecteerd

Dat is het. Dit is wat het Gibbs bemonsteringsalgoritme onder de motorkap doet. We hebben weliswaar enkele details overgeslagen, zoals de afstemming van hyperparameters, maar intuïtief gezien werkt Gibbs sampling zo voor topic modeling.

Dus, dit is het voor de theorie van Latente Dirichlet Allocatie. Ik hoop dat dit nuttig was om te begrijpen wat topic modelling is en hoe we LDA met Gibbs gebruiken voor topic modelling. In het volgende artikel zal ik de implementatie van LDA met behulp van Python.

Dank!

admin

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.

lg