Topic Modeling

Zoeken naar content of documenten doe je meestal door een of meer trefwoorden in je zoekmachine in te voeren. Bijvoorbeeld zoals je dat doet met Google, Bing of andere zoekmachines. Het resultaat is veelal goed, maar niet in alle gevallen is een rechttoe-rechtaan zoekmachine voldoende. Stel dat je een grote verzameling documenten hebt die je wilt doorzoeken. Dan is het handig als je ongeveer weet waar de documenten over gaan; over welke onderwerpen (topics of thema’s) wordt er geschreven. Deze informatie is alleen al nuttig om bij voorbaat bepaalde documenten uit te sluiten bij je zoekopdracht. Bij een klein aantal documenten kun je nog handmatig vaststellen waar het document over gaat. Als je veel (duizenden) documenten hebt, dan kun je niet meer handmatig bepalen over welke topics de documenten gaan.

Machine learning is dan een oplossing. Een veel gebruikte classificatie techniek is Latent Dirichlet Allocaton (LDA). Dat klinkt nogal stoer, maar is wel uit te leggen zonder te vervallen in diepgravende wiskunde. LDA is een unsupervised ML techniek omdat we geen gebruik maken van training en testsets.
Wat de LDA techniek doet is ruwweg gezegd het volgende. (Bron: Kailash eighttolate).

Aan de hand van de woorden in de documenten wordt een verdeling in topics gemaakt. Bij elk topic hoort een groep specifieke woorden die op een adequate/acceptabele wijze het topic beschrijft. Aan elk document wordt een Top N van topics toegekend op basis van de relevante woorden die in het document voorkomen. De aanpak van het algoritme is ruwweg als volgt:

  1. Bepaal het aantal topics K. Dit is in zekere zin een zwakte van LDA. Je moet op voorhand het aantal topics weten. Door K te varieren kun je wel de resultaten optimaliseren.
  2. Verdeel willekeurig alle relevante woorden die in de documenten voorkomen over de K topics. Met relevante woorden bedoelen we hier dat de documenten opgeschoond zijn door bijvoorbeeld diacrieten, cijfers, spaties, stopwoorden en vervoegingen te verwijderen uit de documenten of te standaardiseren. Bij deze stap heb je feitelijk je eerste verdeling in Topics met per Topic de beschrijvende woorden. Alleen zal het geen adequate verdeling zijn.
  3. Voor elk document d bereken je per woord w in d twee factoren:
    1. F1: voor elk topic T bereken je de verhouding van woorden in document d die zijn toegewezen aan Topic T. Voorbeeld: stel T bevat de woorden (Aap Noot Mies). En stel document d bevat de woorden (Teun, Mies, Noot, Vuur, Zus, Hok). dan is de factor 2/6 = 0,333 (aantal cursieve woorden in T / totaal aantal woorden in d).
    2. F2: de verhouding van het aantal documenten d dat het woord w als bijdrage heeft geleverd aan Topic T en het totaal aantal documenten. Voorbeeld: woord w (stel Aap) uit d dat toegekend is aan Topic T, is afkomstig uit 4 van de totaal 50 documenten, dan is deze factor gelijk aan 4/50 = 0,08.
  4. Vervolgens ken je het woord w toe aan Topic T dat je met kans F1*F2 uit de K Topics hebt gekozen.
  5. Deze procedure herhaal je zo vaak totdat er ruwweg een evenwicht is bereikt.

Achtergrond van LDA is:

Als een woord w uit document d vaak voorkomt in topic t en n documenten zijn leverancier van het woord w aan topic t, dan hebben w, t en de n documenten waarschijnlijk iets met elkaar te maken. Het is vergelijkbaar met een ander bekend statistisch criterium voor tekst-analyse, namelijk TF-IDF (Term Frequency – Inverse Document Frequency). Als een woord w vaak voorkomt in een document d maar niet zo vaak in de totale verzameling van documenten {d}, dan is dat woord waarschijnlijk een belangrijk woord in document d en daarmee medebepalend voor de topic(s) in document d.

Om te kijken hoe dit in de praktijk uitwerkt, kijken we in een volgende blog naar een toepassing van LDA Topic Modeling in R. Hiervoor gebruiken we de content die chatbot ELS verzameld heeft aan de hand van vragen van gebruikers en de antwoorden die ELS gegegeven heeft.

Een korte schets van de aanpak is:

  • inlezen content
  • opschonen content
  • LDA toepassen
  • relatie topics en content bepalen
  • top n woorden in elk topic bepalen
  • en nog wat andere metrics vaststellen.