NLP met R deel 1: onderwerpmodellering voor onderwerpen identificeren in restaurantrecensies

(Jurriaan Nagelkerke) ( 13 november 2020)

Dit verhaal is geschreven door en . Het maakt deel uit van onze NLP met R serie ( Natuurlijke taalverwerking voor voorspellende doeleinden met R ) waar we Topic Modeling, Word Embeddings, Transformers en BERT gebruiken.

In een reeks van artikelen vergelijken we verschillende NLP-technieken om u te laten zien hoe we waardevolle informatie uit ongestructureerde tekst halen. Ongeveer een jaar geleden verzamelden we recensies over Nederlandse restaurants. We vroegen ons af of ‘the wisdom of the crowd’ – recensies van restaurantbezoekers – kunnen worden gebruikt om te voorspellen welke restaurants het meest waarschijnlijk een nieuwe Michelin-ster zullen krijgen. Lees dit bericht om te zien hoe dat is verlopen. We gebruikten onderwerpmodellering als ons belangrijkste hulpmiddel om informatie uit de recensieteksten te extraheren en combineerden dat met voorspellende modelleringstechnieken om bij onze voorspellingen te komen.

We kregen veel aandacht met onze voorspellingen en ook vragen over hoe we het tekstanalyse-gedeelte deden. Om deze vragen te beantwoorden, zullen we onze aanpak in de komende artikelen nader toelichten. Maar we zijn niet gestopt met het verkennen van NLP-technieken na onze publicatie, en we delen ook graag inzichten door het toevoegen van meer nieuwe NLP-technieken. Meer specifiek zullen we twee soorten insluitingen van woorden gebruiken: een klassiek Word2Vec-model en een GLoVe-inbeddingsmodel – we zullen transfer learning gebruiken met vooraf getrainde woordinsluitingen en we gebruiken BERT . We vergelijken de toegevoegde waarde van deze geavanceerde NLP-technieken met ons baseline topic-model op dezelfde dataset. Door te laten zien wat we hebben gedaan en hoe we het hebben gedaan, hopen we anderen te begeleiden die tekstuele gegevens willen gebruiken voor hun eigen data science-inspanningen.

In een (vorig artikel) hebben we laten zien hoe we hebben onze gegevens voorbereid om te worden gebruikt voor verschillende NLP-technieken. Hier beginnen we onze reeks artikelen over NLP-technieken met de introductie van Onderwerpmodellering en laten we u zien hoe u onderwerpen kunt identificeren en het onderwerpmodel kunt visualiseren resultaten. In een (later artikel) laten we u zien hoe u de resultaten van het onderwerpmodel kunt gebruiken in een voorspellend model.

Wat is onderwerpmodellering?

Om de onderwerpen te ontdekken die restaurantrecensenten schrijven over in hun restaurantrecensies, gebruiken we Topic Modeling. Maar wat is een topicmodel? Bij machine learning en natuurlijke taalverwerking is een onderwerpmodel een soort statistisch model dat kan worden gebruikt om de abstracte onderwerpen te ontdekken die voorkomen in een verzameling documenten. Er zijn een aantal algoritmen om onderwerpen uit een verzameling teksten te extraheren, maar de Latent Dirichlet Allocation is een van de meest populaire algoritmen omdat het efficiënt is en resulteert in zeer interpreteerbare onderwerpen. Interpreteerbaarheid van onderwerpen is een belangrijk kenmerk van een onderwerpmodel, aangezien we niet alleen statistisch relevante woordgroepen willen vinden, we willen ook de geïdentificeerde onderwerpen kunnen labelen met een onderwerpnaam waar anderen zich mee kunnen identificeren. Als zodanig vertoont onderwerpmodellering enkele overeenkomsten met clusteringstechnieken zoals KMeans, waarbij interpretatie net zo belangrijk is als statistische metrieken om te bepalen wat een “goede” oplossing is. Hoe onderwerpmodellering / LDA werkt, wordt gevisualiseerd door Blei als:

Zoals de afbeelding laat zien:

  • Elke topic is een verdeling over woorden
  • Elk document is een verdeling over onderwerpen

Dus nadat we klaar zijn met het modelleren van onze recensies:

  • moeten we weten wat de onderwerpen of onderwerpen zijn waarover recensenten schrijven in hun restaurantrecensies,
  • we weten welke tekens of woorden het belangrijkst zijn in deze onderwerpen, en
  • we kunnen voor elke individuele recensie vertellen in hoeverre het gaat over de geïdentificeerde onderwerpen en dit kan een mix zijn – 80\% over onderwerp X en 20\% over onderwerp Y .

Stap 0: onze context opzetten

Eerst hebben we onze werkmapomgeving opgezet met de vereiste pakketten om onderwerpmodellering uit te voeren.

In onze (blog over prepar ing van de tekstuele gegevens) hebben we al kort tidyverse en tidytext geïntroduceerd.Hier voegen we een paar andere pakketten toe aan de lijst:

  • topicmodels is een pakket om onderwerpmodellen te schatten met LDA en builds op datastructuren gemaakt met het tm-pakket
  • tm is een krachtig, generiek pakket met allerlei soorten tekstminingfunctionaliteit, waaronder het maken van document termmatrices, die we nodig hebben voor het modelleren van onderwerpen
  • ldavis is een geweldig pakket om het onderwerpmodel te visualiseren en te interpreteren en is erg handig bij het labelen onderwerpen

Stap 1. Laad voorverwerkte gegevens

Voor we verdiepen ons in de analytische kant van de dingen, we hebben wat voorbereide tekstuele gegevens nodig. Zoals alle echte datawetenschappers weten, kost een goede datavoorbereiding het grootste deel van uw tijd en is het meest bepalend voor de kwaliteit van de analyseresultaten die u krijgt. Het voorbereiden van tekstuele gegevens is een ander kopje thee vergeleken met het voorbereiden van gestructureerde numerieke of categorische gegevens. In deze blog ligt onze focus op tekstanalyse. Toch willen we u laten zien hoe we de verzamelde gegevens hebben opgeschoond en voorbereid. In deze (vorige blog) leggen we in detail uit hoe we de gegevens hebben voorverwerkt, wat resulteert in de volgende 5 bestanden die we kunnen gebruiken in onze NLP-analyse:

  • reviews.csv: een csv-bestand met originele en voorbereide recensie-teksten – de brandstof voor onze NLP-analyses. (inclusief sleutel: restoreviewid, vandaar de unieke ID voor een recensie)
  • labels.csv : a csv-bestand met 1/0-waarden, waarmee wordt aangegeven of de recensie een recensie voor een Michelin-restaurant is of niet (inclusief sleutel: restoreviewid)
  • restoid.csv : een csv-bestand met restaurant-IDs, om te kunnen bepalen welke recensies bij welk restaurant horen (inclusief sleutel: restoreviewid)
  • trainids.csv : een csv-bestand met 1/0-waarden, dat aangeeft of de recensie moet worden gebruikt voor training of testen – we hebben de beoordelingen al opgesplitst in train / test om hergebruik van dezelfde voorbeelden mogelijk te maken voor eerlijke vergelijkingen tussen technieken (inclusief key: restoreviewid)
  • features.csv : een csv-bestand met andere functies met betrekking tot de beoordelingen (inclusief sleutel: restoreviewid)

Deze bestanden met th De opgeschoonde en relevante gegevens voor NLP-technieken worden voor u beschikbaar gesteld via openbare blob-opslag, zodat u alle code die we zelf presenteren kunt uitvoeren en kunt zien hoe de dingen werken in meer detail. Voor ons onderwerpmodel hebben we drie van deze bestanden nodig:

Stap 2: bereid gegevens voor op onderwerp modellering

Uitgaande van de opgeschoonde recensieteksten, moeten we een aantal dingen doen voordat we onze onderwerpmodellen kunnen schatten:

  1. Tokenize onze voorbereide tekst (inclusief bigrams)
  2. Voorbeeldrecensies voor het trainen van ons onderwerpsmodel
  3. Relevante tokens filteren
  4. Documenttermmatrix maken

2.1. Tokenize onze voorbereide tekst (inclusief bigrams)

Latent Dirichlet Allocation (LDA), de techniek die we gebruiken voor het modelleren van onderwerpen, is een ‘zak met woorden’ techniek. Dit betekent dat de NLP-techniek bij het analyseren van de tekst niet naar de volgorde van de tokens kijkt. Daarom wordt er geen rekening gehouden met waar het token zich in de tekst bevindt en welke andere tokens zich dicht bij het token bevinden (voorafgaande / volgende tokens) binnen het document . Het is alsof alle tokens uit de documenttekst in een zak worden gegooid, ze door elkaar halen maar de informatie behouden dat de tokens zijn in hetzelfde document. Als gevolg hiervan kunnen we cruciale informatie missen als er veel interessante collocaties – frequente combinaties van tokens – in de tekst aanwezig zijn. Populaire voorbeelden zijn namen van mensen (Donald Trump, Jonnie Boer) of plaatsen (Verenigde Staten, Den Haag), maar ook contextspecifieke combinaties van woorden kunnen belangrijk zijn om op te nemen in ons topicmodel: witte wijn ( witte wijn ), rode wijn , ( rode wijn ), gaan eten . Om ervoor te zorgen dat we deze belangrijke collocaties niet missen, voegen we de voorbereide bigrammen toe die aanwezig zijn in onze tekst. Onthoud dat we stopwoorden en interpunctie al in onze dataprep hebben verwijderd.

Na het toevoegen van bigrams aan de geladen, opgeschoonde teksten, splitsen we de teksten opnieuw op om te eindigen met een dataframe waarin elke rij een recensie-tokencombinatie is. We filteren beoordelingen die te kort zijn geworden (5 tokens) na het verwijderen van stopwoorden. In deze indeling zijn we klaar voor onze laatste voorbereidingen voordat we kunnen beginnen met het modelleren van onderwerpen.

2.2 Voorbeeldrecensies voor het trainen van ons onderwerpsmodel

In onze volgende stap zullen we de meest relevante tokens filteren om op te nemen in de documenttermmatrix en vervolgens in onderwerpmodellering.Maar eerst moeten we bepalen welke documenten (recensies) voor ons het belangrijkst zijn. Om een ​​aantal redenen willen we niet alle recensies gebruiken als input voor ons onderwerpmodel:

  • Uiteindelijk willen we de onderwerpen in een voorspellingsmodel gebruiken om voorspellen Michelin-sterren. Het is een goede gewoonte om een ​​testset opzij te zetten voordat we het onderwerpmodel bouwen en de resultaten ervan gebruiken in de stroomafwaartse voorspellende taak. Op deze manier bouwen we zowel ons onderwerpmodel als onze voorspelling op basis van treindata en houden we testdata ongezien tot evaluatie.
  • Zoals hieronder getoond, zijn niet meer dan 3\% van alle beoordelingen Michelin-beoordelingen. Door het aandeel Michelin-recensies in de treinset die we gebruiken voor het modelleren van onderwerpen te vergroten, is de kans groter dat specifieke onderwerpen die in Michelin-recensies worden besproken, worden geïdentificeerd.

Om deze redenen zal de rest van de voorbereiding richten op ons topic-model en de schatting van de topic-modellen op een subset van recensies. Deze subset bevat alleen beoordelingen die al als trainingcases zijn gespecificeerd in ons datavoorbereidingsnotitieboekje. Binnen deze subset nemen we alle Michelin-recensies (ongeveer 3.000) en vullen we aan met niet-Michelin-recensies om te eindigen met ongeveer 10.000 recensies:

# A tibble: 2 x 3
ind\_michelin n pct

1 0 141554 97\%
2 1 4313 3\%
# A tibble: 5 x 5
# Groups: train\_smpl, train [3]
train\_smpl train ind\_michelin n\_reviews n\_tokens

1 0 0 0 40997 433179
2 0 0 1 1290 35129
3 0 1 0 88505 773887
4 1 1 0 7181 111435
5 1 1 1 2971 70548
[1] "10152 unique reviews and 163137 unique tokens selected to train topic model"

2.3 Filtertokens

Nu we bigrams aan de tokens hebben toegevoegd en we onze teksten opnieuw hebben getokeniseerd, hebben we nog steeds heel veel unieke tokens beschikbaar voor ons onderwerpmodel . Het is een goede gewoonte om de lange termijn van zeldzame termen te verwijderen. Laten we eerst eens kijken hoe de verdeling van de tokenfrequentie eruitziet. Onthoud dat we in ons (datavoorbereidingsblog) al alle stopwoorden uit de teksten hebben verwijderd, inclusief 128 aangepaste stop-woorden met hoge frequentie die we hebben gespecificeerd door naar de tokenfrequentie te kijken bij het voorbereiden van de gegevens.

Bovenstaande plot laat duidelijk zien dat een groot aantal van de unieke tokens zelden voorkomt in alle beoordelingen, 75\% komt maar één keer voor.

Focus op tokens die 5 keer of meer in de trein Corpus

Zoals we kunnen zien aan de hand van de tokenfrequentietelling, zijn er veel tokens die slechts één of enkele keren voorkomen: ongeveer 92\% van alle unieke tokens komen minder dan 5 keer voor in onze corpus van recensies. Deze laagfrequente tokens zijn van invloed op de analyse van het onderwerpmodel. Om ons te concentreren op veelgebruikte tokens, selecteren we tokens die 5 keer of vaker voorkomen in de voorbereide treingegevens. Dit is hopelijk genoeg om onderwerpen te leren van tokens die samen in dezelfde recensies voorkomen. Bij het optimaliseren van ons onderwerpmodel kunnen we de minimumfrequentie variëren om de impact op de resultaten te evalueren.

Waarom niet TF-IDF?

Als u wat over tekstanalysetools hebt gelezen, vraagt ​​u zich misschien af: waarom gebruiken we TF-IDF niet om de meest relevante tokens te selecteren? TF-IDF staat voor Term Frequency – Inverse Document Frequency. Deze statistiek combineert de term Frequentie – hoe vaak is het token aanwezig in een document? – met de inverse van de documentfrequentie – in hoeveel unieke documenten is de term aanwezig? Hoewel de TF-IDF vaak een goede keuze is om de meest relevante tokens te selecteren, is het niet in onze context, waar de documentgrootte beperkt is en de herhaling van hetzelfde token in dezelfde tekst laag is. Niet vaak heeft een token een Term Frequentie hoger dan 1. Als gevolg hiervan is alleen het gedeelte Inverse Document Frequency doorslaggevend en dit geeft de voorkeur aan de tokens die alleen in een of twee recensies voorkomen. Om deze reden gebruiken we hier geen TF-IDF, maar kijken we naar de algemene frequentie om relevante tokens te kiezen voor onderwerpmodellering. Ook omdat we de aangepaste lijst met stopwoorden al uit onze tekst hebben verwijderd, zijn te frequente tokens al verwijderd.

Door de niet-frequente tokens te filteren, hebben we het aantal te overwegen tokens verminderd dramatisch in onze LDA, gericht op de 12K (8\%) meest voorkomende tokens en het verwijderen van de 146K (92\%) tokens die te zeldzaam zijn in het corpus. Deze geselecteerde tokens vertegenwoordigen echter nog steeds 73\% van alle tokens in de documenten:

# A tibble: 2 x 5
min\_5\_freq n\_unique\_tokens n\_tokens pct\_unique\_tokens pct\_all\_tokens

1 token frequency: 2 token frequency: >=5 12525 518146 8\% 73\%

2.4 Create DTM

Na het filteren van de tokens die we willen gebruiken om ons topic-model te bouwen, kunnen we de input creëren voor LDA. Hiervoor is een document-term-matrix of DTM nodig, vandaar een matrix met in de rijen al onze documenten (recensies) en in de kolommen alle termen (de relevante tokens). Houd er rekening mee dat we de algemene tokenfrequentie gebruiken voor de parameter value.Je zou hier de documentspecifieke termfrequentie kunnen verwachten, maar we gebruiken de algemene tokenfrequentie om bij het vinden van het onderwerpmodel veel meer nadruk te leggen op termen die in het algemeen vaker voorkomen; gezien de korte lengte van recensies (in vergelijking met boeken of artikelen die vaak worden gebruikt bij het modelleren van onderwerpen) is de kans dat een enkele token vaker voorkomt in de recensie beperkt.

DTM dimensions: 
Documents (10152) x Tokens (12525) (average token frequency: 702.3)

Stap 3: ontwikkel een onderwerpmodel

Nu we een DTM, we zijn klaar om met onderwerpmodellering te beginnen! Tot dusver hebben we al behoorlijk wat keuzes gemaakt die van invloed zijn op ons analyseresultaat: welke minimale beoordelingsduur moet worden gebruikt, welke stopwoorden moeten worden uitgesloten, wat n -grammen om op te nemen, de minimale tokenfrequentie om tokens te gebruiken … En er moeten nog een paar keuzes worden gemaakt.

LDA heeft een aantal parameters die van invloed zijn op het resultaat, waarvan de belangrijkste zijn:

  • k : het aantal onderwerpen! Ja, dit is een parameter en geen resultaat. Net als bij clusteringstechnieken zoals KMeans, moet u aangeven hoeveel clusters / onderwerpen u wilt identificeren ify.
  • methode : het topicmodels-pakket maakt verschillende optimalisatiemethoden mogelijk, VEM algorithm of Gibbs sampling, standaard is VEM.
  • control : lijst met controlevariabelen om de schatting te begeleiden – relevante parameters zijn afhankelijk van de gekozen methode VEM of Gibbs, maar de belangrijkste zijn:
  • nstart : het aantal runs dat moet worden uitgevoerd met dezelfde instellingen maar met verschillende zaden
  • seed : Voor reproduceerbaarheid kan een willekeurige seed worden ingesteld. Als nstart> 1, moet u meerdere zaden opgeven, 1 per nstart (bijv. C (123, 234 “, 345”))
  • best : indien TRUE (standaard), wordt alleen de run met het best passende resultaat behouden, of set, if FALSE wordt een lijst met alle runs geretourneerd zodat u alle van hen.

Voor een volledig overzicht van alle beschikbare parameters en instellingen, zie het topicmodels pakketvignet .

Schatting LDA-onderwerpmodel

De meest impactvolle parameter is k : het getal van onderwerpen om te identificeren. Hoe kies je een waarde voor k? Dit is gedeeltelijk het resultaat van een discussie (hoeveel onderwerpen verwachten we in deze context te vinden?) En een & -fout (probeer verschillende waarden van k, evalueer resultaten). Sommige datawetenschappers vinden dit misschien niet leuk, ze kijken liever naar statistieken om hen bij dit proces te begeleiden, maar voor degenen die bekend zijn met andere niet-gecontroleerde data science-technieken zoals KMeans is dit niet zo nieuw. Clustering en ook onderwerpmodellering is tot op zekere hoogte meer kunst dan wetenschap. Geleid door statistische technieken en maatregelen, creëert een datawetenschapper een oplossing voor het modelleren van onderwerpen die past bij de (zakelijke) behoeften. Als je een startpunt voor k nodig hebt met enige statistische achtergrond, kun je deze benadering of dit proberen aanpak.

Laten we beginnen met een onderwerpmodel om 3 onderwerpen te identificeren en het resultaat te verkennen. We hebben op dit moment geen reden om andere standaardinstellingen te wijzigen.

Evalueer Topic Model

Onderwerpmodel is aangepast, dus laten we het verkennen!

Het aangepaste lda-object bevat een aantal matrices:

  • phi : matrix met verdeling van tokens (in rijen) over onderwerpen (in kolommen)
  • theta : matrix met distributie van documenten (vandaar: recensies, in rijen) over onderwerpen (in kolommen)

Zowel voor phi als voor theta, de som over alle kolommen is gelijk aan 1, wat betekent:

  • Voor phi is de som van alle tokenscores binnen een onderwerp 1 – hogere scores betekent een groter belang van dat token binnen het onderwerp .
  • Voor theta is de som van alle onderwerpscores in een document 1 – hogere scores betekent dat het onderwerp meer aanwezig is in dat document.

Laten we, om ons onderwerpsmodel te verkennen, eerst kijken naar de belangrijkste tokens per onderwerp. Om dit te doen, moeten we specificeren wanneer een token belangrijk is voor een onderwerp. We zouden kunnen zeggen dat het token belangrijk is voor het onderwerp als het een grote kans heeft om binnen een onderwerp p(token|topic) te voorkomen. Laten we eens kijken hoe dit eruitziet voor ons onderwerpmodel met drie onderwerpen. We gebruiken een handige functie van het tidytext -pakket, dat helpt bij het voorbereiden van de onderwerpmodelgegevens om de belangrijkste tokens te visualiseren per onderwerp: tidy().

Met deze plot krijgen we een eerste indruk van wat de onderwerpen in ons eerste onderwerpmodel vertegenwoordigen. Zoals we in de plot kunnen zien, heeft het kijken naar de token-waarschijnlijkheid per onderwerp de keerzijde dat tokens met een hoge algehele frequentie een grotere kans hebben om in de top-10 te verschijnen voor meerdere onderwerpen. restaurant komt bijvoorbeeld voor in top-10s met meerdere onderwerpen. Alleen kijken naar de algemene waarschijnlijkheden van het onderwerp kan verbergen dat specifieke, iets minder frequente tokens erg gerelateerd zijn aan een specifiek onderwerp. Om dat te analyseren, kunnen we de tokenfrequentie in het onderwerp relatief maken ten opzichte van de algehele frequentie van het token: p(token|topic)/p(token). Dit laat zien welke tokens sterk gerelateerd zijn aan het onderwerp, onafhankelijk van de tokenfrequentie.

Het nemen van (alleen) de laatste benadering heeft zijn eigen keerzijde, en benadrukt belangrijke tokens die mogelijk niet voorkomen in zoveel beoordelingen. De beste benadering ligt misschien ergens in het midden: om een ​​onderwerpmodel te evalueren, is het het meest waardevol om het onderwerpmodel vanuit beide perspectieven te kunnen onderzoeken – absolute termkans en relatieve termwaarschijnlijkheid – en misschien zelfs een combinatie van beide. Om deze reden is het pakket LDAvis zo waardevol omdat het u in staat stelt precies dat te doen! LDAvis heeft een JSON nodig met informatie over uw onderwerpmodel en vocabulaire:

Een kanttekening hier: het LDAvis R-pakket kan worden gebruikt vanuit R of RStudio, maar niet rechtstreeks vanuit een notebookomgeving zoals Jupyter of Databricks. Daarom hebben we de pyLDAvis-poort gebruikt voor het LDAvis-pakket, omdat dit het gemakkelijk maakt om de prachtige LDAvis-tool in een notebook op te nemen. In sommige browsers werkt de pyLDAvis echter niet correct. Bekijk in dat geval een voorbeeld hieronder. Voel je vrij om download dit notitieboekje en probeer de LDAvis zelf.

Om LDAvis lokaal met R of RStudio te draaien, kun je serVis(json) draaien. Zie deze link om de interactieve LDAvis vanaf de onderstaande zeefdruk te verkennen.

De plot aan de linkerkant toont de grootte van Onderwerpen ( Hoeveel documenten worden aan het onderwerp toegeschreven?) evenals de afstand tussen onderwerpen ( Welke onderwerpen zijn meer / minder aan elkaar gerelateerd? ). De rechterkant toont de belangrijke tokens voor het geselecteerde onderwerp (of de algemene belangrijkste tokens in het onderwerpmodel als er geen onderwerp is geselecteerd). Met de schuifregelaar rechtsboven kunnen we lambda wijzigen, waarbij lambda bepaalt hoeveel we de voorkeur geven aan het kijken naar de absolute tokenkans binnen het onderwerp (p(token|topic), lambda = 1) of de voorkeur geven aan het relatieve token waarschijnlijkheid binnen het onderwerp (p(token|topic)/p(token), lambda = 0). Spelen met deze visualisatie is vaak de beste manier om vertrouwd te raken met de geïdentificeerde onderwerpen. En – het allerbelangrijkste – het uitzoeken van een geschikt onderwerplabel voor elk van de onderwerpen! Dit is ook een grote hulp bij het beslissen of het huidige onderwerpmodel volstaat voor uw stroomafwaartse taak of dat u enkele instellingen (k, methode, seed, …) of zelfs de gegevens (verander geselecteerde documenten of tokens) wilt wijzigen om een beter resultaat.

Herhalingen naar uw winnende Topic Model

We zeiden het al eerder: topic modeling is – net als clusteranalyse en andere niet-gecontroleerde machine learning-technieken – meer kunst dan wetenschap! Daarom ga je waarschijnlijk behoorlijk wat tijd besteden aan het aanpassen van je onderwerpmodel voordat je uitkomt met je “beste” onderwerpmodel. We zetten “beste” hier tussen aanhalingstekens, omdat wat “beste” is sterk afhankelijk is van zowel de toepassingen die u in gedachten heeft met uw onderwerpmodel als uw creativiteit! Dus dit is nogal subjectief! Tijdens het proces van het vinden van je beste onderwerpmodel, heb je waarschijnlijk momenten waarvan je denkt dat je geen oplossing zult vinden die je kunt gebruiken en andere momenten waarop je de extase ervaart van het zien van die intrinsieke onderwerpen die tot leven komen door de tokens die het domineren.Hier zijn je belangrijkste tools om je optimale onderwerpmodel te maken:

  • verander k – het aantal onderwerpen
  • sluit extra te dominante (frequente) tokens uit (deze kunnen nog steeds wees te dominant en onderdruk het vinden van interessantere subdomeinen in uw tekst)
  • verhoog de minimale tokenfrequentie naar focus op de meer dominante tokens
  • voorbeelddocumenten om u te concentreren op de meest relevante documenten om belangrijke onderwerpen te vinden , zouden we de steekproefstrategie kunnen veranderen.

Naast deze parameters heb je ook enkele LDA-parameters die je kunt variëren, maar naar onze ervaring zijn de bovenstaande parameters de belangrijkste om mee te beginnen. Terwijl het verhogen of verlagen van k alleen betekent dat u uw LDA opnieuw moet schatten, betekent het wijzigen van de steekproef van beoordelingen of de tokens waarmee u rekening moet houden ook dat u uw DTM opnieuw moet maken.

Wat hebben we gedaan? Na veel zweet, wat vloeken en het verkennen van vele oplossingen, hebben we het volgende gedaan:

  • verander k in 7 onderwerpen.
  • Voeg enkele tokens samen en sluit een aantal te frequente tokens
  • Verken meerdere seed-resultaten (met nstart en best=FALSE) om het best interpreteerbare onderwerpmodel te vinden **
  • Selecteer ten slotte het beste zaad en stel best=TRUE in om alleen het beste LDA-model te behouden

** Het LDA functie maakt het mogelijk om meerdere runs uit te voeren door de nstart parameter op te geven om het aantal runs in te stellen en met seed ingesteld de zaden om deze runs te begeleiden. Wanneer u best=TRUE instelt, wordt alleen de oplossing met de beste logboekwaarschijnlijkheid behouden. Als u deze instelt op best=FALSE, kunt u alle onderwerpmodellen verkennen (de teruggegeven object is nu een lijst met alle onderwerpmodellen).

Het herhalen en vergelijken van resultaten resulteerde in 7 onderwerpen die we mooi konden labelen met onderwerpnamen van onderwerpen waarover recensenten praten bij het beoordelen van restaurants. Hier is onze oplossing voor de onderwerpen waaraan de labels al zijn toegevoegd:

DTM dimensions: 
Documents (10152) x Tokens (12496) (average token frequency: 416.26)

Om de interactieve LDAvis te verkennen vanaf de onderstaande zeefdruk, ga naar dit html-bestand .

Hoewel sommige onderwerpen nog steeds een mix van dingen zijn, gebruiken we deze oplossing graag bij het voorspellen van Michelin-sterren. We zien wel een duidelijk onderscheid tussen de geïdentificeerde onderwerpen en we verwachten dat het vertalen van de ruwe tekst van elke recensie naar een waarschijnlijkheidsvector voor deze onderwerpen zal helpen bij het voorspellen van Michelin-sterren. Hier is een overzicht van de onderwerpen met de labels die we ze geven en hun meest voorkomende tokens:

Onderwerpmodellering – afronden

In deze artikel hebben we u laten zien hoe u een onderwerpmodel kunt bouwen om de latente constructies of onderwerpen te identificeren waarover recensenten praten in hun restaurantrecensies. Zoals je hebt gezien, zijn er nogal wat keuzes die moeten worden gemaakt voordat we ons definitieve ‘beste’ onderwerpmodel hebben, en sommige van die keuzes zijn niet gemakkelijk te maken omdat er niet altijd begeleidende statistieken beschikbaar zijn. Onthoud wat we eerder zeiden: Onderwerpmodellering is een techniek zonder toezicht en dit maakt het ‘meer kunst dan wetenschap’. Wat voor veel gebruiksscenarios belangrijk is, is dat u onderwerpen krijgt die u kunt interpreteren en uitleggen, aangezien u de functies die u hier heeft gebouwd, moet kunnen interpreteren terwijl u ze in downstream-taken gebruikt. Met ons model met 7 onderwerpen zijn we ervan overtuigd dat we dat kunnen doen!

Voordelen

Een groot voordeel van onderwerpmodellering – en vooral LDA – is dat wanneer alle aanpassingen en worstelingen zijn als je klaar bent, krijg je waarschijnlijk een overzichtelijk aantal mooi interpreteerbare onderwerpen. Hiermee kunt u voor elk document de verdeling over die onderwerpen toevoegen. Omdat de onderwerpkansen optellen tot 1 en numerieke waarden zijn, hebt u nu de ongestructureerde teksten van verschillende lengte samengevat in slechts een paar nieuwe, gemakkelijk te verwerken functies. Functies die van grote waarde kunnen zijn in downstream-taken zoals voorspellende modellering of segmentatietaken.

Nadelen

Het grootste nadeel van onderwerpmodellering is hoogstwaarschijnlijk de subjectiviteit bij het vinden van het beste model . Daarom kan het behoorlijk wat tijd en moeite kosten om met een goede onderwerpmodeloplossing te komen. Er kunnen meerdere statistisch equivalente oplossingen zijn die aanzienlijk kunnen verschillen in de resulterende onderwerpen.Daarom is er altijd een kans dat de interpretatie van het model drastisch wordt gewijzigd wanneer u de analyse opnieuw uitvoert met iets andere gegevens of instellingen. Vooral als er geen dominante onderwerpoplossing in uw tekstuele gegevens aanwezig is, kan elke run verschillende resultaten opleveren. Zorg ervoor dat je eerdere runs bijhoudt, door gebruikte zaden en datasets veilig te stellen, zodat je niet de frustratie zult ervaren van het vinden van een mooie onderwerpmodeloplossing die je mooi kunt interpreteren en beschrijven en deze vervolgens kwijtraakt om hem nooit meer te herstellen.

Vooruitkijken

Eerder hebben we ons doel gespecificeerd: voorspellen welke restaurants een Michelinster hebben. In een van onze (volgende blogs) gebruiken we daarom de verdeling over onderwerpen in de recensieteksten om te voorspellen of de recensie een Michelin-recensie is of niet. We verzamelen die voorspellingen ook over alle beoordelingen die een restaurant heeft moeten evalueren in hoeverre we Michelin-sterren kunnen voorspellen. Daarnaast gebruiken we (andere technieken) (word2vec, GloVe, BERT) om de recensieteksten samen te vatten in functies die we kunnen gebruiken om Michelin-sterren te voorspellen en laten we zien welke aanpak het beste werkt. We beginnen met het introduceren van technieken voor het inbedden van woorden (word2vec, GloVe) in onze volgende blog en laten u zien hoe u onze recensieteksten kunt omzetten in insluitingen en hoe u deze kunt interpreteren en visualiseren.

Dit artikel maakt deel uit van onze NLP met R -serie. Een overzicht van alle artikelen binnen de serie is (hier te vinden).

  • Vorige in deze serie: (Gegevensvoorbereiding voor natuurlijke taalverwerking)
  • Volgende in deze serie : (Training Word-model insluiten en resultaten visualiseren)

Wilt u dit zelf doen? Voel je vrij om de Databricks Notebook of het R-script te downloaden vanaf de gitlab pagina.

Geef een reactie

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