Delen via


Latent Dirichlet Allocation-onderdeel

In dit artikel wordt beschreven hoe u het onderdeel Latent Dirichlet Allocation in Azure Machine Learning Designer gebruikt om anders niet-geclassificeerde tekst in categorieën te groeperen.

Latent Dirichlet Allocation (LDA) wordt vaak gebruikt in natuurlijke taalverwerking om teksten te vinden die vergelijkbaar zijn. Een andere veelgebruikte term is het modelleren van onderwerpen.

Dit onderdeel gebruikt een kolom met tekst en genereert deze uitvoer:

  • De brontekst, samen met een score voor elke categorie

  • Een functiematrix met geëxtraheerde termen en coëfficiënten voor elke categorie

  • Een transformatie die u kunt opslaan en opnieuw kunt toepassen op nieuwe tekst die wordt gebruikt als invoer

Dit onderdeel maakt gebruik van de scikit-learn-bibliotheek. Zie de GitHub-opslagplaats, waaronder zelfstudies en een uitleg van het algoritme voor meer informatie over scikit-learn.

Meer informatie over latente Dirichlet-toewijzing

LDA is over het algemeen geen methode voor classificatie. Maar er wordt gebruikgemaakt van een generatieve benadering, dus u hoeft geen bekende klasselabels op te geven en vervolgens de patronen af te stellen. In plaats daarvan genereert het algoritme een probabilistisch model dat wordt gebruikt om groepen onderwerpen te identificeren. U kunt het probabilistische model gebruiken om bestaande trainingscases of nieuwe cases die u aan het model opgeeft als invoer te classificeren.

Misschien geeft u de voorkeur aan een generatief model, omdat er geen sterke veronderstellingen over de relatie tussen de tekst en categorieën worden gemaakt. Het gebruikt alleen de verdeling van woorden om wiskundige modelonderwerpen te modelleren.

De theorie wordt besproken in dit document, beschikbaar als pdf-download: Latent Dirichlet Allocation: Blei, Ng en Jordan.

De implementatie in dit onderdeel is gebaseerd op de scikit-learn-bibliotheek voor LDA.

Zie de sectie Technische notities voor meer informatie.

Latent Dirichlet-toewijzing configureren

Voor dit onderdeel is een gegevensset vereist die een kolom met tekst bevat, onbewerkt of vooraf verwerkt.

  1. Voeg het toewijzingsonderdeel Latent Dirichlet toe aan uw pijplijn.

    Sleep in de lijst met assets onder Text Analytics het onderdeel Latent Dirichlet Allocation naar het canvas.

  2. Geef als invoer voor het onderdeel een gegevensset op die een of meer tekstkolommen bevat.

  3. Kies voor doelkolommen een of meer kolommen die tekst bevatten die u wilt analyseren.

    U kunt meerdere kolommen kiezen, maar ze moeten van het gegevenstype tekenreeks zijn.

    Omdat LDA een grote functiematrix maakt op basis van de tekst, analyseert u doorgaans één tekstkolom.

  4. Voer een geheel getal in tussen 1 en 1000 voor het aantal te modelleren onderwerpen dat aangeeft hoeveel categorieën of onderwerpen u wilt afleiden van de invoertekst.

    Standaard worden er vijf onderwerpen gemaakt.

  5. Geef voor N-grammen de maximale lengte op van N-grammen die tijdens hashing worden gegenereerd.

    De standaardwaarde is 2, wat betekent dat zowel bigrams als unigrammen worden gegenereerd.

  6. Selecteer de optie Normaliseren om uitvoerwaarden te converteren naar waarschijnlijkheden.

    In plaats van de getransformeerde waarden als gehele getallen weer te geven, worden waarden in de uitvoer- en functiegegevensset als volgt getransformeerd:

    • Waarden in de gegevensset worden weergegeven als een kans waar P(topic|document).

    • Waarden in de functieonderwerpmatrix worden weergegeven als een kans waar P(word|topic).

    Notitie

    In de Azure Machine Learning-ontwerpfunctie biedt de scikit-learn-bibliotheek geen ondersteuning meer voor niet-genormaliseerde doc_topic_distr uitvoer van versie 0.19. In dit onderdeel kan de parameter Normaliseren alleen worden toegepast op de functieonderwerpmatrixuitvoer . De uitvoer van getransformeerde gegevenssets wordt altijd genormaliseerd.

  7. Selecteer de optie Alle opties weergeven en stel deze in op TRUE als u de volgende geavanceerde parameters wilt instellen.

    Deze parameters zijn specifiek voor de scikit-learn-implementatie van LDA. Er zijn enkele goede zelfstudies over LDA in scikit-learn, evenals het officiële scikit-learn-document.

    • Rho-parameter. Geef een eerdere kans op de spaarzaamheid van onderwerpdistributies. Deze parameter komt overeen met de parameter van topic_word_prior sklearn. Gebruik de waarde 1 als u verwacht dat de verdeling van woorden vlak is, dat wil zeggen dat alle woorden worden aangenomen dat ze kunnen worden uitgerust. Als u denkt dat de meeste woorden parserend worden weergegeven, kunt u deze instellen op een lagere waarde.

    • Alfaparameter. Geef een eerdere waarschijnlijkheid op voor de spaarzaamheid van gewichten per documentonderwerp. Deze parameter komt overeen met de parameter van doc_topic_prior sklearn.

    • Geschat aantal documenten. Voer een getal in dat uw beste schatting vertegenwoordigt van het aantal documenten (rijen) dat wordt verwerkt. Met deze parameter kan het onderdeel een hash-tabel van voldoende grootte toewijzen. Deze komt overeen met de total_samples parameter in scikit-learn.

    • Grootte van de batch. Voer een getal in dat aangeeft hoeveel rijen moeten worden opgenomen in elke batch tekst die naar het LDA-model wordt verzonden. Deze parameter komt overeen met de batch_size parameter in scikit-learn.

    • Initiële waarde van iteratie die wordt gebruikt in het trainingsupdateschema. Geef de beginwaarde op waarmee de leersnelheid voor vroege iteraties in online learning omlaag wordt gewogen. Deze parameter komt overeen met de learning_offset parameter in scikit-learn.

    • De stroom die is toegepast op de iteratie tijdens updates. Geef het machtsniveau aan dat is toegepast op het aantal iteraties om de leersnelheid te bepalen tijdens online updates. Deze parameter komt overeen met de learning_decay parameter in scikit-learn.

    • Het aantal passeert de gegevens. Geef het maximum aantal keren op dat het algoritme over de gegevens wordt gecyclusd. Deze parameter komt overeen met de max_iter parameter in scikit-learn.

  8. Selecteer de optie Build dictionary of ngrams or Build dictionary of ngrams before LDA, if you want to create the n-gram list in an initial pass before classifying text.

    Als u de eerste woordenlijst vooraf maakt, kunt u de woordenlijst later gebruiken bij het controleren van het model. Het is over het algemeen eenvoudiger om resultaten toe te wijzen aan tekst in plaats van numerieke indexen. Het opslaan van de woordenlijst duurt echter langer en gebruikt extra opslag.

  9. Voer voor De maximale grootte van de ngramwoordenlijst het totale aantal rijen in dat kan worden gemaakt in de n-gramwoordenlijst.

    Deze optie is handig voor het beheren van de grootte van de woordenlijst. Maar als het aantal ngrammen in de invoer deze grootte overschrijdt, kunnen er conflicten optreden.

  10. Verzend de pijplijn. Het LDA-onderdeel maakt gebruik van Bayes-theorema om te bepalen welke onderwerpen kunnen worden gekoppeld aan afzonderlijke woorden. Woorden zijn niet uitsluitend gekoppeld aan onderwerpen of groepen. In plaats daarvan heeft elke n-gram een geleerde kans dat deze is gekoppeld aan een van de gedetecteerde klassen.

Resultaten

Het onderdeel heeft twee uitvoerwaarden:

  • Getransformeerde gegevensset: deze uitvoer bevat de invoertekst, een opgegeven aantal gedetecteerde categorieën en de scores voor elk tekstvoorbeeld voor elke categorie.

  • Functieonderwerpmatrix: De meest linkse kolom bevat de functie geëxtraheerde tekst. Een kolom voor elke categorie bevat de score voor die functie in die categorie.

LDA-transformatie

Dit onderdeel voert ook de LDA-transformatie uit die LDA toepast op de gegevensset.

U kunt deze transformatie opslaan en opnieuw gebruiken voor andere gegevenssets. Deze techniek kan nuttig zijn als u hebt getraind op een groot corpus en de coëfficiënten of categorieën opnieuw wilt gebruiken.

Als u deze transformatie opnieuw wilt gebruiken, selecteert u het pictogram Gegevensset registreren in het rechterdeelvenster van het onderdeel Latent Dirichlet Allocation om het onderdeel onder de categorie Gegevenssets in de lijst met onderdelen te houden. Vervolgens kunt u dit onderdeel verbinden met het onderdeel Transformatie toepassen om deze transformatie opnieuw te gebruiken.

Een LDA-model of -resultaten verfijnen

Normaal gesproken kunt u geen enkel LDA-model maken dat aan alle behoeften voldoet. Zelfs een model dat is ontworpen voor één taak, vereist mogelijk veel iteraties om de nauwkeurigheid te verbeteren. We raden u aan om al deze methoden uit te proberen om uw model te verbeteren:

  • De modelparameters wijzigen
  • Visualisatie gebruiken om inzicht te verkrijgen in de resultaten
  • De feedback van deskundigen op het gebied van onderwerpen krijgen om te bepalen of de gegenereerde onderwerpen nuttig zijn

Kwalitatieve maatregelen kunnen ook nuttig zijn voor het beoordelen van de resultaten. Als u resultaten van onderwerpmodellering wilt evalueren, kunt u het volgende overwegen:

  • Nauwkeurigheid. Zijn vergelijkbare items echt vergelijkbaar?
  • Diversiteit. Kan het model onderscheid maken tussen vergelijkbare items wanneer dit nodig is voor het bedrijfsprobleem?
  • Schaalbaarheid. Werkt het voor een breed scala aan tekstcategorieën of alleen voor een smal doeldomein?

U kunt de nauwkeurigheid van modellen vaak verbeteren op basis van LDA door natuurlijke taalverwerking te gebruiken om tekst op te schonen, samen te vatten en te vereenvoudigen of te categoriseren. De volgende technieken, die allemaal worden ondersteund in Azure Machine Learning, kunnen bijvoorbeeld de nauwkeurigheid van de classificatie verbeteren:

  • Woordverwijdering stoppen

  • Casenormalisatie

  • Lemmatisatie of stam

  • Herkenning van genoemde entiteiten

Zie Tekst vooraf verwerken voor meer informatie.

In de ontwerpfunctie kunt u ook R- of Python-bibliotheken gebruiken voor tekstverwerking: R-script uitvoeren, Python-script uitvoeren.

Technische notities

Deze sectie bevat implementatiedetails, tips en antwoorden op veelgestelde vragen.

Implementatiedetails

Standaard worden de distributies van uitvoer voor een getransformeerde gegevensset en functieonderwerpmatrix genormaliseerd als waarschijnlijkheden:

  • De getransformeerde gegevensset wordt genormaliseerd als de voorwaardelijke waarschijnlijkheid van onderwerpen in een document. In dit geval is de som van elke rij gelijk aan 1.

  • De functieonderwerpmatrix wordt genormaliseerd als de voorwaardelijke waarschijnlijkheid van woorden in een onderwerp. In dit geval is de som van elke kolom gelijk aan 1.

Tip

Af en toe kan het onderdeel een leeg onderwerp retourneren. Meestal is de oorzaak pseudo-willekeurige initialisatie van het algoritme. Als dit gebeurt, kunt u proberen gerelateerde parameters te wijzigen. Wijzig bijvoorbeeld de maximale grootte van de N-gramwoordenlijst of het aantal bits dat moet worden gebruikt voor functie-hashing.

LDA en onderwerpmodellering

Latent Dirichlet Allocation wordt vaak gebruikt voor het modelleren van inhoudsonderwerp, wat in feite betekent dat u categorieën leert van niet-geclassificeerde tekst. Bij het modelleren van inhoudsonderwerp is een onderwerp een distributie over woorden.

Stel dat u een verzameling klantbeoordelingen hebt verstrekt die veel producten bevat. De tekst van beoordelingen die in de loop van de tijd door klanten zijn ingediend, bevat veel termen, waarvan sommige in meerdere onderwerpen worden gebruikt.

Een onderwerp dat door het LDA-proces wordt geïdentificeerd, kan beoordelingen voor een afzonderlijk product vertegenwoordigen of een groep productbeoordelingen vertegenwoordigen. Voor LDA is het onderwerp zelf slechts een waarschijnlijkheidsverdeling in de loop van de tijd voor een reeks woorden.

Voorwaarden zijn zelden exclusief voor elk product. Ze kunnen verwijzen naar andere producten of algemene voorwaarden zijn die van toepassing zijn op alles ("geweldig", "vreselijk"). Andere termen kunnen ruiswoorden zijn. De LDA-methode probeert echter niet alle woorden in het universum vast te leggen of te begrijpen hoe woorden gerelateerd zijn, afgezien van waarschijnlijkheden van co-exemplaar. Het kan alleen woorden groeperen die worden gebruikt in het doeldomein.

Nadat de termindexen zijn berekend, vergelijkt een op afstand gebaseerde gelijkenismeting afzonderlijke rijen met tekst om te bepalen of twee stukken tekst vergelijkbaar zijn. U kunt bijvoorbeeld merken dat het product meerdere namen heeft die sterk zijn gecorreleerd. Of u kunt merken dat sterk negatieve termen meestal aan een bepaald product zijn gekoppeld. U kunt de overeenkomstmeting gebruiken om gerelateerde termen te identificeren en aanbevelingen te maken.

Onderdeelparameters

Name Type Bereik Optioneel Default Beschrijving
Doelkolom(en) Kolomselectie Vereist StringFeature Doelkolomnaam of -index.
Aantal onderwerpen dat moet worden gemodelleerd Geheel getal [1; 1000] Vereist 5 Modelleer de documentdistributie op basis van N-onderwerpen.
N-grammen Geheel getal [1; 10] Vereist 2 Volgorde van N-grammen gegenereerd tijdens hashing.
Normaliseren Booleaanse waarde True of False Vereist true Normaliseer de uitvoer naar waarschijnlijkheden. De getransformeerde gegevensset is P(onderwerp|document) en de functieonderwerpmatrix is P(word|topic).
Alle opties weergeven Booleaanse waarde True of False Vereist Onwaar Biedt aanvullende parameters die specifiek zijn voor scikit-learn online LDA.
Rho-parameter Float [0.00001; 1.0] Van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 0,01 Onderwerpwoord eerdere distributie.
Alfaparameter Float [0.00001; 1.0] Van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 0,01 Documentonderwerp voorafgaand aan distributie.
Geschat aantal documenten Geheel getal [1; Int. MaxValue] Van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 1000 Geschat aantal documenten. Komt overeen met de total_samples parameter.
Grootte van de batch Geheel getal [1; 1024] Van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 32 Grootte van de batch.
Initiële waarde van iteratie die wordt gebruikt in het schema voor het bijwerken van leerfrequenties Geheel getal [0; Int. MaxValue] Van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 0 Initiële waarde waarmee leersnelheid voor vroege iteraties omlaag wordt gewogen. Komt overeen met de learning_offset parameter.
Stroom toegepast op de iteratie tijdens updates Float [0.0; 1.0] Van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 0,5 De kracht die is toegepast op het aantal iteraties om de leersnelheid te bepalen. Komt overeen met de learning_decay parameter.
Aantal trainingsiteraties Geheel getal [1; 1024] Van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 25 Aantal trainingsiteraties.
Woordenlijst van ngrammen maken Booleaanse waarde True of False Van toepassing wanneer het selectievakje Alle opties weergeven niet is ingeschakeld Waar Bouwt een woordenlijst van ngrammen voorafgaand aan het berekenen van LDA. Handig voor modelinspectie en interpretatie.
Maximale grootte van ngramwoordenlijst Geheel getal [1; Int. MaxValue] Is van toepassing wanneer de optie Opbouwwoordenlijst van ngrammen Waar is 20000 Maximale grootte van de ngramwoordenlijst. Als het aantal tokens in de invoer deze grootte overschrijdt, kunnen er conflicten optreden.
Aantal bits dat moet worden gebruikt voor functie-hashing. Geheel getal [1; 31] Is van toepassing wanneer het selectievakje Alle opties weergeven niet is ingeschakeld en de opbouwwoordenlijst van ngrammen onwaar is 12 Aantal bits dat moet worden gebruikt voor functie-hashing.
Woordenlijst van ngrammen bouwen vóór LDA Booleaanse waarde True of False Van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld Waar Bouwt een woordenlijst van ngrammen voorafgaand aan LDA. Handig voor modelinspectie en interpretatie.
Maximum aantal ngrammen in woordenlijst Geheel getal [1; Int. MaxValue] Is van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld en de optie Opbouwwoordenlijst van ngrammen waar is 20000 Maximale grootte van de woordenlijst. Als het aantal tokens in de invoer deze grootte overschrijdt, kunnen er conflicten optreden.
Aantal hash-bits Geheel getal [1; 31] Is van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld en de optie Opbouwwoordenlijst van ngrammen onwaar is 12 Aantal bits dat moet worden gebruikt tijdens het hashen van functies.

Volgende stappen

Bekijk de set onderdelen die beschikbaar zijn voor Azure Machine Learning.

Zie Uitzonderingen en foutcodes voor de ontwerpfunctie voor een lijst met fouten die specifiek zijn voor de onderdelen.