Een beginnershandleiding voor Latente Dirichlet Allocatie (LDA)

Topic modeling is een methode voor onbewaakte classificatie van documenten, vergelijkbaar met clustering op numerieke data, die een aantal natuurlijke groepen van items (topics) vindt, zelfs als we niet zeker weten waarnaar we zoeken.

Een document kan deel uitmaken van meerdere onderwerpen, net als bij fuzzy clustering (zachte clustering), waarbij elk gegevenspunt tot meer dan één cluster behoort.

Waarom topic modeling?

Topic modeling biedt methoden voor het automatisch organiseren, begrijpen, doorzoeken en samenvatten van grote elektronische archieven.
Het kan helpen bij het volgende:

  • ontdekken van de verborgen thema’s in de collectie.
  • classificeren van de documenten in de ontdekte thema’s.
  • gebruiken van de classificatie om de documenten te organiseren/samenvatten/zoeken.

Voorbeeld: een document behoort tot de onderwerpen voedsel, honden en gezondheid. Dus als een gebruiker “hondenvoer” opvraagt, kan hij bovengenoemd document relevant vinden omdat het deze onderwerpen (naast andere onderwerpen) bestrijkt. We zijn in staat om de relevantie ten opzichte van de zoekopdracht te bepalen zonder zelfs maar het hele document door te nemen.

Daarom, door het document te annoteren, gebaseerd op de onderwerpen die door de modelleer methode worden voorspeld, zijn we in staat om ons zoekproces te optimaliseren.

LDA

Het is een van de meest populaire onderwerp modelleer methodes. Elk document bestaat uit verschillende woorden, en elk onderwerp heeft ook verschillende woorden die erbij horen. Het doel van LDA is om onderwerpen te vinden waartoe een document behoort, op basis van de woorden in het document. Veel verwarring? Hier is een voorbeeld om je er doorheen te leiden.

Model definitie

Each document is a collection of words.

We have 5 documents each containing the words listed in front of them( ordered by frequency of occurrence).

What we want to figure out are the words in different topics, as shown in the table below. Each row in the table represents a different topic and each column a different word in the corpus. Each cell contains the probability that the word(column) belongs to the topic(row).

Each topic contains a score for all the words in the corpus.

Finding Representative Words for a Topic

  • We can sort the words with respect to their probability score.
    De bovenste x woorden worden uit elk onderwerp gekozen om het onderwerp te vertegenwoordigen. Als x = 10, sorteren we alle woorden in onderwerp1 op basis van hun score en nemen we de top 10 woorden om het onderwerp te vertegenwoordigen.
    Deze stap is niet altijd nodig, want als het corpus klein is, kunnen we alle woorden in sorteren op hun score.
  • Aternatief kunnen we een drempel instellen op de score. Alle woorden in een onderwerp met een score boven de drempel kunnen worden opgeslagen als de vertegenwoordiger ervan, in volgorde van hun score.

Foto door Anusha Barwa op Unsplash

Laten we zeggen dat we 2 onderwerpen hebben die kunnen worden geclassificeerd als CAT_related en DOG_related. Een onderwerp heeft waarschijnlijkheden voor elk woord, dus woorden als melk, miauw en kitten hebben een hogere waarschijnlijkheid in het CAT_related onderwerp dan in het DOG_related onderwerp. Het DOG_gerelateerde onderwerp zal, op dezelfde manier, hoge waarschijnlijkheden hebben voor woorden als puppy, schors en bot.

Als we een document hebben dat de volgende zinnen bevat:

“Honden kauwen graag op botten en halen graag stokken”.
“Puppy’s drinken melk.”
“Beiden blaffen graag.”

We kunnen gemakkelijk zeggen dat het behoort tot onderwerp DOG_gerelateerd, omdat het woorden bevat als Dogs, bones, puppies, en schors. Ook al bevat het het woord melk, dat bij het onderwerp CAT_gerelateerd hoort, het document hoort bij DOG_gerelateerd omdat er meer woorden mee overeenkomen.

Aannames:

  • Elk document is slechts een verzameling woorden of een “zak woorden”. Dus, de volgorde van de woorden en de grammaticale rol van de woorden (onderwerp, voorwerp, werkwoorden, …) worden niet overwogen in het model.
  • Woorden als ben/is/zijn/van/een/het/maar/… dragen geen informatie over de “onderwerpen” en kunnen daarom worden geëlimineerd uit de documenten als een voorbewerkingsstap. In feite kunnen we woorden elimineren die in minstens %80 ~ %90 van de documenten voorkomen, zonder enige informatie te verliezen.
    Bijv. als ons corpus alleen medische documenten bevat, kunnen woorden als mens, lichaam, gezondheid, enz. in de meeste documenten voorkomen en dus verwijderd worden, omdat ze geen specifieke informatie toevoegen die het document zou doen opvallen.
  • We weten van tevoren hoeveel onderwerpen we willen. ‘k’ is vooraf bepaald.
  • Alle topic-toewijzingen behalve het huidige woord in kwestie zijn correct, en dan wordt de toewijzing van het huidige woord bijgewerkt met behulp van ons model van hoe documenten worden gegenereerd

Hoe werkt LDA?

Er zijn 2 delen in LDA:

  • De woorden die bij een document horen, die we al kennen.
  • De woorden die bij een topic horen of de kans dat woorden bij een topic horen, die moeten we berekenen.

Het algoritme om de laatste te vinden

  • Ga door elk document en wijs elk woord in het document willekeurig toe aan een van de k topics (k is van tevoren gekozen).
  • Voor elk document d, ga je door elk woord w en bereken :
  1. p(topic t | document d): het aandeel woorden in document d dat is toegewezen aan topic t. Probeert vast te leggen hoeveel woorden behoren tot topic t voor een gegeven document d. Exclusief het huidige woord.
    Als veel woorden uit d tot t behoren, is het waarschijnlijker dat woord w tot t behoort.
    ( #woorden in d met t +alpha/ #woorden in d met enig onderwerp+ k*alpha)
  2. p(woord w| onderwerp t): de verhouding van toewijzingen aan onderwerp t over alle documenten die afkomstig zijn van dit woord w. Probeert weer te geven hoeveel documenten in onderwerp t zijn vanwege woord w.
    LDA stelt documenten voor als een mengsel van onderwerpen. Op dezelfde manier is een onderwerp een mengsel van woorden. If a word has high probability of being in a topic, all the documents having w will be more strongly associated with t as well. Similarly, if w is not very probable to be in t, the documents which contain the w will be having very low probability of being in t, because rest of the words in d will belong to some other topic and hence d will have a higher probability for those topic. So even if w gets added to t, it won’t be bringing many such documents to t.
  • Update the probability for the word w belonging to topic t, as
p(word w with topic t) = p(topic t | document d) * p(word w | topic t)

A layman’s example

Suppose you have various photographs(documents) with captions(words). You want to display them in a gallery so you decide to categorize the photographs on various themes(topics) based on which you will create different sections in your gallery.

Foto door Soragrit Wongsa op Unsplash

Je besluit om k=2 rubrieken in je album te maken – natuur en stad. Natuurlijk is de indeling niet zo duidelijk, want sommige foto’s met stad hebben bomen en bloemen, terwijl de natuurfoto’s misschien wat gebouwen bevatten. U besluit om te beginnen de foto’s die alleen natuur- of stadselementen bevatten in hun respectieve categorieën in te delen, terwijl u de rest willekeurig indeelt

Het valt u op dat veel foto’s in de natuur het woord boom in hun bijschriften hebben. Dus concludeert u dat het woord boom en het onderwerp natuur nauw verwant moeten zijn.

Daarna kiest u het woord gebouw en controleert u hoeveel foto’s in de natuur vallen omdat ze het woord gebouw in hun bijschrift hebben. Je vindt er niet veel en bent er nu minder zeker van dat gebouw bij het onderwerp natuur hoort en associeert het sterker met het onderwerp stad.

Je kiest vervolgens een foto met het bijschrift “De boom staat voor het gebouw en achter een auto” en ziet dat die momenteel in de categorie natuur valt.
Je kiest dan het woord boom, en berekent de eerste waarschijnlijkheid p(onderwerp t | document d): andere woorden in het bijschrift zijn gebouw en auto, de meeste foto’s met bijschriften met gebouw of auto erin zijn in stad, dus je krijgt een lage waarschijnlijkheid.
Nu de tweede waarschijnlijkheid p(woord w| onderwerp t): we weten dat veel foto’s in natuur het woord boom erin hebben. Hier krijg je dus een hoge score.
De kans dat een boom in de natuur voorkomt, werk je bij door de twee te vermenigvuldigen. Je krijgt een lagere waarde dan voorheen voor boom in onderwerp natuur, omdat je nu die boom en woorden als gebouw/auto in hetzelfde bijschrift hebt gezien, wat impliceert dat bomen ook in steden te vinden zijn.
Om dezelfde reden zult u, wanneer u de waarschijnlijkheid bijwerkt voor boom in onderwerp stad, merken dat deze groter zal zijn dan voorheen.

Na meerdere iteraties over alle foto’s en voor elk onderwerp, zult u nauwkeurige scores hebben voor elk woord met betrekking tot elk onderwerp. Je gissingen zullen steeds beter worden, omdat je uit de context zult concluderen dat woorden als gebouwen, stoep, metro samen voorkomen en dus bij hetzelfde onderwerp moeten horen, waarvan we gemakkelijk kunnen raden dat het de stad is.
Woorden als bergen, velden, strand, die misschien niet samen voorkomen in veel onderschriften, maar wel vaak voorkomen zonder stadswoorden, zullen dus een hogere score krijgen voor natuur.
Woorden als bomen, bloemen, honden, lucht zullen bijna dezelfde waarschijnlijkheid hebben om in een van beide te staan, omdat ze in beide onderwerpen voorkomen.

Wat de foto betreft, u ziet dat deze 1 woord (met gemiddelde waarschijnlijkheid) uit de categorie natuur heeft en 2 woorden (met hoge waarschijnlijkheid) uit de categorie stad, u concludeert dat deze sterker bij de stad hoort dan bij de natuur en u besluit deze toe te voegen aan stad.

Noot

De toepassingen van LDA hoeven niet beperkt te blijven tot Natural Language Processing. Ik heb onlangs een artikel geïmplementeerd waarin we LDA gebruiken (samen met een neuraal netwerk) om de context van een afbeelding te extraheren. Als je daar meer over wilt weten, laat dan een reactie achter of een bericht.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *