Latent Dirichlet-allokeringskomponent

Den här artikeln beskriver hur du använder komponenten Latent Dirichlet Allocation i Azure Mašinsko učenje designer för att gruppera annars oklassificerad text i kategorier.

Latent Dirichlet Allocation (LDA) används ofta i bearbetning av naturligt språk för att hitta liknande texter. En annan vanlig term är ämnesmodellering.

Den här komponenten tar en textkolumn och genererar följande utdata:

  • Källtexten, tillsammans med en poäng för varje kategori

  • En funktionsmatris som innehåller extraherade termer och koefficienter för varje kategori

  • En transformering som du kan spara och återanvända till ny text som används som indata

Den här komponenten använder scikit-learn-biblioteket. Mer information om scikit-learn finns i GitHub-lagringsplatsen, som innehåller självstudier och en förklaring av algoritmen.

Mer om Latent Dirichlet-allokering

LDA är vanligtvis inte en klassificeringsmetod. Men den använder en generativ metod, så du behöver inte ange kända klassetiketter och sedan härleda mönstren. I stället genererar algoritmen en probabilistisk modell som används för att identifiera grupper av ämnen. Du kan använda den probabilistiska modellen för att klassificera befintliga träningsfall eller nya fall som du anger för modellen som indata.

Du kanske föredrar en generativ modell eftersom den undviker att göra starka antaganden om relationen mellan texten och kategorierna. Den använder endast fördelningen av ord för att matematiskt modellera ämnen.

Teorin diskuteras i denna artikel, tillgänglig som en PDF-nedladdning: Latent Dirichlet Allocation: Blei, Ng och Jordan.

Implementeringen i den här komponenten baseras på scikit-learn-biblioteket för LDA.

Mer information finns i avsnittet Tekniska anteckningar .

Så här konfigurerar du Latent Dirichlet-allokering

Den här komponenten kräver en datauppsättning som innehåller en textkolumn, antingen rå eller förbearbetad.

  1. Lägg till komponenten Latent Dirichlet Allocation i pipelinen.

    I listan över tillgångar under Textanalys drar och släpper du komponenten Latent Dirichlet Allocation på arbetsytan.

  2. Som indata för komponenten anger du en datauppsättning som innehåller en eller flera textkolumner.

  3. För Målkolumner väljer du en eller flera kolumner som innehåller text att analysera.

    Du kan välja flera kolumner, men de måste vara av strängdatatypen .

    Eftersom LDA skapar en stor funktionsmatris från texten analyserar du vanligtvis en enda textkolumn.

  4. För Antal ämnen som ska modelleras anger du ett heltal mellan 1 och 1 000 som anger hur många kategorier eller ämnen du vill härleda från indatatexten.

    Som standard skapas 5 ämnen.

  5. För N-gram anger du den maximala längden på N-gram som genereras under hashning.

    Standardvärdet är 2, vilket innebär att både bigrams och unigram genereras.

  6. Välj alternativet Normalisera för att konvertera utdatavärden till sannolikheter.

    I stället för att representera transformerade värden som heltal omvandlas värden i datauppsättningen för utdata och funktioner på följande sätt:

    • Värden i datamängden representeras som en sannolikhet där P(topic|document).

    • Värden i funktionsämnesmatrisen representeras som en sannolikhet där P(word|topic).

    Kommentar

    I Azure Mašinsko učenje designer stöder scikit-learn-biblioteket inte längre onormaliserade doc_topic_distr utdata från version 0.19. I den här komponenten kan parametern Normalisera endast tillämpas på funktionen Ämnesmatrisutdata . Transformerade datamängdsutdata normaliseras alltid.

  7. Välj alternativet Visa alla alternativ och ställ sedan in det på SANT om du vill ange följande avancerade parametrar.

    Dessa parametrar är specifika för scikit-learn-implementeringen av LDA. Det finns några bra självstudier om LDA i scikit-learn, samt det officiella scikit-learn-dokumentet.

    • Rho-parameter. Ange en tidigare sannolikhet för glesheten för ämnesfördelningar. Den här parametern motsvarar sklearns topic_word_prior parameter. Använd värdet 1 om du förväntar dig att fördelningen av ord är platt, det vill säga att alla ord antas vara equiprobable. Om du tror att de flesta ord visas sparsamt kan du ställa in det på ett lägre värde.

    • Alfaparameter. Ange en tidigare sannolikhet för glesheten för ämnesvikter per dokument. Den här parametern motsvarar sklearns doc_topic_prior parameter.

    • Uppskattat antal dokument. Ange ett tal som representerar din bästa uppskattning av antalet dokument (rader) som ska bearbetas. Med den här parametern kan komponenten allokera en hash-tabell med tillräcklig storlek. Den motsvarar parametern total_samples i scikit-learn.

    • Batchens storlek. Ange ett tal som anger hur många rader som ska inkluderas i varje batch med text som skickas till LDA-modellen. Den här parametern motsvarar parametern batch_size i scikit-learn.

    • Initialt värde för iteration som används i utbildningsuppdateringsschemat. Ange det startvärde som nedviktar inlärningsfrekvensen för tidiga iterationer i onlineinlärning. Den här parametern motsvarar parametern learning_offset i scikit-learn.

    • Ström som tillämpas på iterationen under uppdateringar. Ange vilken effektnivå som tillämpas på antalet iterationer för att kontrollera inlärningshastigheten under onlineuppdateringar. Den här parametern motsvarar parametern learning_decay i scikit-learn.

    • Antal passeringar över data. Ange det maximala antalet gånger som algoritmen ska växla över data. Den här parametern motsvarar parametern max_iter i scikit-learn.

  8. Välj alternativet Skapa ordlista för ngram eller Skapa ordlista för ngram före LDA, om du vill skapa n-gram-listan i ett första pass innan du klassificerar text.

    Om du skapar den första ordlistan i förväg kan du senare använda ordlistan när du granskar modellen. Att kunna mappa resultat till text i stället för numeriska index är vanligtvis enklare för tolkning. Det tar dock längre tid att spara ordlistan och ytterligare lagringsutrymme.

  9. För Maximal storlek på ngram-ordlistan anger du det totala antalet rader som kan skapas i ordlistan n-gram.

    Det här alternativet är användbart för att styra storleken på ordlistan. Men om antalet ngram i indata överskrider den här storleken kan kollisioner inträffa.

  10. Skicka pipelinen. LDA-komponenten använder Bayes-sats för att avgöra vilka ämnen som kan associeras med enskilda ord. Ord är inte uteslutande associerade med några ämnen eller grupper. I stället har varje n-gram en inlärd sannolikhet att associeras med någon av de identifierade klasserna.

Resultat

Komponenten har två utdata:

  • Transformerad datauppsättning: Dessa utdata innehåller indatatexten, ett angivet antal identifierade kategorier och poängen för varje textexempel för varje kategori.

  • Funktionsämnesmatris: Kolumnen längst till vänster innehåller den extraherade textfunktionen. En kolumn för varje kategori innehåller poängen för den funktionen i den kategorin.

LDA-transformering

Den här komponenten matar också ut den LDA-transformering som tillämpar LDA på datauppsättningen.

Du kan spara den här omvandlingen och återanvända den för andra datauppsättningar. Den här tekniken kan vara användbar om du har tränat på en stor korpus och vill återanvända koefficienterna eller kategorierna.

Om du vill återanvända den här omvandlingen väljer du ikonen Registrera datauppsättning i den högra panelen i komponenten Latent Dirichlet-allokering för att behålla komponenten under kategorin Datauppsättningar i komponentlistan. Sedan kan du ansluta den här komponenten till apply transformation-komponenten för att återanvända den här omvandlingen.

Förfina en LDA-modell eller resultat

Vanligtvis kan du inte skapa en enda LDA-modell som uppfyller alla behov. Även en modell som är utformad för en uppgift kan kräva många iterationer för att förbättra noggrannheten. Vi rekommenderar att du provar alla dessa metoder för att förbättra din modell:

  • Ändra modellparametrarna
  • Använda visualisering för att förstå resultaten
  • Få feedback från ämnesexperter för att avgöra om de genererade ämnena är användbara

Kvalitativa mått kan också vara användbara för att utvärdera resultaten. Om du vill utvärdera resultatet av ämnesmodellering bör du tänka på:

  • Noggrannhet. Är liknande objekt riktigt lika?
  • Mångfald. Kan modellen skilja mellan liknande objekt när det krävs för affärsproblemet?
  • Skalbarhet. Fungerar det på en mängd olika textkategorier eller bara på en smal måldomän?

Du kan ofta förbättra noggrannheten för modeller baserat på LDA genom att använda bearbetning av naturligt språk för att rensa, sammanfatta och förenkla eller kategorisera text. Följande tekniker, som alla stöds i Azure Mašinsko učenje, kan till exempel förbättra klassificeringsprecisionen:

  • Stoppa ordborttagning

  • Skiftlägesnormalisering

  • Lemmatisering eller härstamning

  • Igenkänning av namngiven entitet

Mer information finns i Förbearbeta text.

I designern kan du också använda R- eller Python-bibliotek för textbearbetning: Kör R-skript, Kör Python-skript.

Tekniska anteckningar

Det här avsnittet innehåller implementeringsinformation, tips och svar på vanliga frågor.

Implementeringsdetaljer

Som standard normaliseras distributionerna av utdata för en transformerad datauppsättning och funktionsämnesmatris som sannolikheter:

  • Den transformerade datamängden normaliseras som villkorsstyrd sannolikhet för ämnen som ges i ett dokument. I det här fallet är summan av varje rad lika med 1.

  • Matrisen för funktionsämne normaliseras som villkorsstyrd sannolikhet för ord som ges ett ämne. I det här fallet är summan av varje kolumn lika med 1.

Dricks

Ibland kan komponenten returnera ett tomt ämne. Oftast är orsaken pseudo-slumpmässig initiering av algoritmen. Om detta händer kan du prova att ändra relaterade parametrar. Ändra till exempel den maximala storleken på N-gram-ordlistan eller antalet bitar som ska användas för funktionshashing.

LDA och ämnesmodellering

Latent Dirichlet-allokering används ofta för innehållsbaserad ämnesmodellering, vilket i princip innebär inlärningskategorier från oklassificerad text. I innehållsbaserad ämnesmodellering är ett ämne en fördelning över ord.

Anta till exempel att du har angett en uppsättning kundgranskningar som innehåller många produkter. Texten med granskningar som har skickats in av kunder över tid innehåller många termer, varav några används i flera ämnen.

Ett ämne som LDA-processen identifierar kan representera granskningar för en enskild produkt, eller så kan det representera en grupp produktgranskningar. För LDA är själva ämnet bara en sannolikhetsfördelning över tid för en uppsättning ord.

Villkoren är sällan exklusiva för någon produkt. De kan referera till andra produkter eller vara allmänna termer som gäller för allt ("bra", "hemskt"). Andra termer kan vara brusord. LDA-metoden försöker dock inte fånga alla ord i universum eller förstå hur ord är relaterade, förutom sannolikheter för samförekomst. Det kan bara gruppera ord som används i måldomänen.

När termindexen har beräknats jämför ett avståndsbaserat likhetsmått enskilda rader med text för att avgöra om två textstycken är liknande. Du kan till exempel upptäcka att produkten har flera namn som är starkt korrelerade. Eller så kanske du upptäcker att starkt negativa termer vanligtvis är associerade med en viss produkt. Du kan använda likhetsmåttet både för att identifiera relaterade termer och för att skapa rekommendationer.

Komponentparametrar

Namn Type Intervall Valfritt Standardvärde beskrivning
Målkolumner Kolumnmarkering Obligatoriskt StringFeature Målkolumnnamn eller index.
Antal ämnen som ska modelleras Integer [1; 1000] Obligatoriskt 5 Modellera dokumentdistributionen mot N-ämnen.
N-gram Integer [1; 10] Obligatoriskt 2 Ordningen på N-gram som genereras under hashning.
Normalisera Booleskt Sant eller Falskt Obligatoriskt true Normalisera utdata till sannolikheter. Den transformerade datamängden är P(topic|document) och funktionsämnesmatrisen är P(word|topic).
Visa alla alternativ Booleskt Sant eller Falskt Obligatoriskt Falsk Presenterar ytterligare parametrar som är specifika för scikit-learn online-LDA.
Rho-parameter Flyttal [0.00001; 1.0] Gäller när kryssrutan Visa alla alternativ är markerad 0.01 Ämnesord före distribution.
Alfaparameter Flyttal [0.00001; 1.0] Gäller när kryssrutan Visa alla alternativ är markerad 0.01 Tidigare distribution av dokumentavsnitt.
Uppskattat antal dokument Integer [1; Int. MaxValue] Gäller när kryssrutan Visa alla alternativ är markerad 1000 Uppskattat antal dokument. Motsvarar parametern total_samples .
Batchens storlek Integer [1; 1024] Gäller när kryssrutan Visa alla alternativ är markerad 32 Batchens storlek.
Initialt värde för iteration som används i uppdateringsschemat för inlärningshastighet Integer [0; Int. MaxValue] Gäller när kryssrutan Visa alla alternativ är markerad 0 Initialt värde som minskar inlärningsfrekvensen för tidiga iterationer. Motsvarar parametern learning_offset .
Energi som tillämpas på iterationen under uppdateringar Flyttal [0.0; 1.0] Gäller när kryssrutan Visa alla alternativ är markerad 0,5 Energi som tillämpas på antalet iterationer för att styra inlärningshastigheten. Motsvarar parametern learning_decay .
Antal iterationer för träning Integer [1; 1024] Gäller när kryssrutan Visa alla alternativ är markerad 25 Antal iterationer för träning.
Skapa ordlista för ngram Booleskt Sant eller Falskt Gäller när kryssrutan Visa alla alternativ inte är markerad Sant Skapar en ordlista med ngram innan LDA beräknas. Användbart för modellgranskning och tolkning.
Maximal storlek på ngram-ordlista Integer [1; Int. MaxValue] Gäller när alternativet Skapa ordlista för ngram är Sant 20000 Maximal storlek på ngrams-ordlistan. Om antalet token i indata överskrider den här storleken kan kollisioner inträffa.
Antal bitar som ska användas för funktionshashing. Integer [1; 31] Gäller när kryssrutan Visa alla alternativ inte är markerad och Skapa ordlista för ngram är False 12 Antal bitar som ska användas för funktionshashing.
Skapa ordlista för ngram före LDA Booleskt Sant eller Falskt Gäller när kryssrutan Visa alla alternativ är markerad Sant Skapar en ordlista med ngram före LDA. Användbart för modellgranskning och tolkning.
Maximalt antal ngram i ordlistan Integer [1; Int. MaxValue] Gäller när kryssrutan Visa alla alternativ är markerad och alternativet Skapa ordlista för ngram är Sant 20000 Maximal storlek på ordlistan. Om antalet token i indata överskrider den här storleken kan kollisioner inträffa.
Antal hashbitar Integer [1; 31] Gäller när kryssrutan Visa alla alternativ är markerad och alternativet Skapa ordlista för ngram är False 12 Antal bitar som ska användas under funktionshashing.

Nästa steg

Se den uppsättning komponenter som är tillgängliga för Azure Mašinsko učenje.

En lista över fel som är specifika för komponenterna finns i Undantag och felkoder för designern.