Latente dirichlettoewijzingscomponent

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.

Latente Dirichlet Allocation (LDA) wordt vaak gebruikt in natuurlijke taalverwerking om vergelijkbare teksten te vinden. Een andere veelgebruikte term is onderwerpmodellering.

Dit onderdeel gebruikt een kolom met tekst en genereert de volgende 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 bibliotheek scikit-learn. Zie de GitHub-opslagplaats voor meer informatie over scikit-learn, met zelfstudies en een uitleg van het algoritme.

Meer informatie over latente dirichlettoewijzing

LDA is over het algemeen geen methode voor classificatie. Maar er wordt gebruikgemaakt van een generatieve benadering, zodat u geen bekende klasselabels hoeft op te geven en vervolgens de patronen hoeft af te voeren. 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.

Mogelijk geeft u de voorkeur aan een generatief model omdat hiermee geen sterke veronderstellingen worden gemaakt over de relatie tussen de tekst en categorieën. Er wordt alleen gebruikgemaakt van de distributie van woorden om onderwerpen wiskundig te modelleren.

De theorie wordt besproken in dit artikel, 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.

Latente dirichlettoewijzing configureren

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

  1. Voeg het onderdeel Latente Dirichlet-toewijzing 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 deze moeten van het gegevenstype tekenreeks zijn.

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

  4. Voer bij Aantal te modelleren onderwerpen een geheel getal tussen 1 en 1000 in dat aangeeft hoeveel categorieën of onderwerpen u wilt afleiden uit de invoertekst.

    Standaard worden er 5 onderwerpen gemaakt.

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

    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 weer te geven als gehele getallen, worden waarden in de uitvoer- en functiegegevensset als volgt getransformeerd:

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

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

    Notitie

    In azure Machine Learning Designer 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 Normalize alleen worden toegepast op de matrixuitvoer van functieonderwerp . De uitvoer van de getransformeerde gegevensset is 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 waarschijnlijkheid op voor de spaarzaamheid van onderwerpverdelingen. Deze parameter komt overeen met de parameter sklearn topic_word_prior . Gebruik de waarde 1 als u verwacht dat de verdeling van woorden vlak is; dat wil zeggen, alle woorden worden verondersteld toegerust te zijn. Als u denkt dat de meeste woorden schaars worden weergegeven, kunt u deze instellen op een lagere waarde.

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

    • Geschat aantal documenten. Voer een getal in dat de beste schatting weergeeft 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 leren wordt weggewogen. Deze parameter komt overeen met de learning_offset parameter in scikit-learn.

    • Energie toegepast op de iteratie tijdens updates. Geef het krachtniveau aan dat is toegepast op het aantal iteraties om de leersnelheid tijdens online-updates te beheren. Deze parameter komt overeen met de learning_decay parameter in scikit-learn.

    • Aantal passes over de gegevens. Geef het maximum aantal keren op dat het algoritme de gegevens zal doorlopen. Deze parameter komt overeen met de max_iter parameter in scikit-learn.

  8. Selecteer de optie Woordenlijst van ngrammen maken of Woordenlijst van ngrammen bouwen vóór LDA als u de n-gramlijst in een eerste keer wilt maken voordat u tekst classificeert.

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

  9. Voer bij Maximale grootte van ngramwoordenlijst het totale aantal rijen in dat kan worden gemaakt in de n-gram-woordenlijst.

    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 de Bayes-stelling om te bepalen welke onderwerpen aan afzonderlijke woorden kunnen worden gekoppeld. Woorden zijn niet uitsluitend gekoppeld aan onderwerpen of groepen. In plaats daarvan heeft elke n-gram een aangeleerde kans om te worden 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 handig zijn als u hebt getraind op een groot geheel 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 niet één LDA-model maken dat aan alle behoeften voldoet. Zelfs een model dat is ontworpen voor één taak, kan veel iteraties vereisen om de nauwkeurigheid te verbeteren. We raden u aan om al deze methoden te proberen om uw model te verbeteren:

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

Kwalitatieve metingen kunnen ook nuttig zijn voor de beoordeling van de resultaten. Als u de 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 beperkt doeldomein?

U kunt vaak de nauwkeurigheid van modellen op basis van LDA verbeteren 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 tekeneenheden

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 opmerkingen

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

Implementatiegegevens

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 die aan een onderwerp zijn gegeven. In dit geval is de som van elke kolom gelijk aan 1.

Tip

Soms retourneert het onderdeel een leeg onderwerp. 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-gram-woordenlijst of het aantal bits dat moet worden gebruikt voor functie-hashing.

LDA en onderwerpmodellering

Latente dirichlettoewijzing wordt vaak gebruikt voor inhoudsgebaseerde onderwerpmodellering, wat in feite betekent dat u categorieën leert van niet-geclassificeerde tekst. Bij op inhoud gebaseerde onderwerpmodellering is een onderwerp een verdeling over woorden.

Stel dat u een corpus van klantbeoordelingen hebt opgegeven 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 betrekking hebben op beoordelingen voor een afzonderlijk product of een groep productbeoordelingen. Voor LDA is het onderwerp zelf slechts een waarschijnlijkheidsverdeling in de loop van de tijd voor een reeks woorden.

Voorwaarden zijn zelden exclusief voor één product. Ze kunnen verwijzen naar andere producten, of algemene voorwaarden zijn die op alles van toepassing zijn ('geweldig', 'verschrikkelijk'). Andere termen kunnen ruiswoorden zijn. De LDA-methode probeert echter niet alle woorden in het heelal vast te leggen of te begrijpen hoe woorden zijn gerelateerd, afgezien van de waarschijnlijkheid van gelijktijdig optreden. Het kan alleen woorden groepeer die worden gebruikt in het doeldomein.

Nadat de termindexen zijn berekend, vergelijkt een op afstand gebaseerde overeenkomstmeting afzonderlijke rijen 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 misschien vindt u dat sterk negatieve termen meestal worden geassocieerd met een bepaald product. U kunt de gelijkenismeting gebruiken om gerelateerde termen te identificeren en aanbevelingen te maken.

Onderdeelparameters

Naam Type Bereik Optioneel Standaard 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.
Normalize Booleaans Waar of Niet waar Vereist true Normaliseer de uitvoer naar waarschijnlijkheden. De getransformeerde gegevensset is P(onderwerp|document) en de functieonderwerpmatrix is P(word|topic).
Alle opties weergeven Booleaans Waar of Niet waar Vereist False Bevat aanvullende parameters die specifiek zijn voor scikit-learn online LDA.
Rho-parameter Float [0.00001;1.0] Is van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 0,01 Eerdere distributie van onderwerpwoorden.
Alfaparameter Float [0.00001;1.0] Is van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 0,01 Eerdere distributie van documentonderwerp.
Geschat aantal documenten Geheel getal [1;int. MaxValue] Is 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] Is 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 updateschema voor leersnelheid Geheel getal [0;int. MaxValue] Is van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 0 Initiële waarde die de leersnelheid voor vroege iteraties omlaag gewogen. Komt overeen met de learning_offset parameter .
Energie toegepast op de iteratie tijdens updates Float [0.0;1.0] Is van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 0,5 Macht toegepast op het aantal iteraties om de leersnelheid te regelen. Komt overeen met de learning_decay parameter .
Aantal trainingsiteraties Geheel getal [1;1024] Is van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld 25 Aantal trainingsiteraties.
Woordenlijst van ngrammen maken Booleaans Waar of Niet waar Van toepassing wanneer het selectievakje Alle opties weergevenniet is ingeschakeld Waar Hiermee wordt een woordenlijst van ngrammen gemaakt voordat LDA wordt berekenen. Handig voor modelinspectie en -interpretatie.
Maximale grootte van ngramwoordenlijst Geheel getal [1;int. MaxValue] Is van toepassing wanneer de optie Woordenlijst van ngrammenbouwen Waar is 20.000 Maximale grootte van de woordenlijst ngrammen. Als het aantal tokens in de invoer deze grootte overschrijdt, kunnen er conflicten optreden.
Het aantal bits dat moet worden gebruikt voor functie-hashing. Geheel getal [1;31] Is van toepassing wanneer het selectievakje Alle opties weergevenniet is ingeschakeld en De woordenlijst van ngrammen samenstellen onwaar is 12 Het aantal bits dat moet worden gebruikt voor functie-hashing.
Woordenlijst van ngrammen bouwen vóór LDA Booleaans Waar of Niet waar Is van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld Waar Hiermee wordt een woordenlijst gemaakt van ngrammen vóór 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 Woordenlijst bouwen van ngrammenWaar is 20.000 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] Van toepassing wanneer het selectievakje Alle opties weergeven is ingeschakeld en de optie Woordenlijst bouwen van ngrammenonwaar is 12 Het 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.