Latent Dirichlet-allokeringskomponent
I den här artikeln beskrivs hur du använder latent dirichlet-allokeringskomponenten i Azure Machine Learning-designern 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 biblioteket scikit-learn. Mer information om scikit-learn finns på GitHub-lagringsplatsen, som innehåller självstudier och en förklaring av algoritmen.
Mer om Latent Dirichlet Allocation
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 tillhandahåller 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 bara 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å biblioteket scikit-learn 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.
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.
Som indata för komponenten anger du en datauppsättning som innehåller en eller flera textkolumner.
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.
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.
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.
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 utdata- och funktionsdatauppsättningen på följande sätt:
Värden i datauppsättningen representeras som en sannolikhet där
P(topic|document)
.Värden i funktionsämnesmatrisen representeras som en sannolikhet där
P(word|topic)
.
Anteckning
I Azure Machine Learning-designern stöder scikit-learn-biblioteket inte längrenormaliserade doc_topic_distr utdata från version 0.19. I den här komponenten kan parametern Normalize endast tillämpas på funktionen Ämnesmatrisutdata . Transformerade datauppsättningsutdata normaliseras alltid.
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 parametern sklearn
topic_word_prior
. Använd värdet 1 om du förväntar dig att ordfördelningen är platt. det vill säga, alla ord antas 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 parametern sklearn
doc_topic_prior
.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 startvärdet som nedviktar inlärningshastigheten för tidiga iterationer i onlineinlärning. Den här parametern motsvarar parametern
learning_offset
i scikit-learn.Energi 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 passer ö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.
Välj alternativet Skapa ordlista med ngram eller skapa en ordlista med 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.
För Maximal storlek på ngramordlistan 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 uppstå.
Skicka pipelinen. LDA-komponenten använder Bayes-satsen för att avgöra vilka ämnen som kan associeras med enskilda ord. Ord är inte uteslutande kopplade till ä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.
Matris för funktionsämne: Kolumnen längst till vänster innehåller funktionen extraherad text. 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 Allocation 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 ett LDA-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å resultatet
- 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 bedöma resultaten. Om du vill utvärdera resultatet av ämnesmodellering kan du överväga:
- Noggrannhet. Är liknande objekt verkligen 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 Machine Learning, kan till exempel förbättra klassificeringsprecisionen:
Stoppa borttagning av ord
Skiftlägesnormalisering
Lemmatisering eller ordstamsigenkänning
Igenkänning av namngiven enhet
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 fördelningarna av utdata för en transformerad datamängd och matris för funktionsämne 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 anges i ett ämne. I det här fallet är summan av varje kolumn lika med 1.
Tips
Ibland kan komponenten returnera ett tomt ämne. Oftast är orsaken pseudo-slumpmässig initiering av algoritmen. Om detta inträffar 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 att lära sig kategorier från oklassificerad text. I innehållsbaserad ämnesmodellering är ett ämne en fördelning över ord.
Anta till exempel att du har tillhandahållit en uppsättning kundrecensioner som innehåller många produkter. Den granskningstext som har skickats 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 med 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å textdelar är likartade. 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 kopplade till 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 | Typ | Intervall | Valfritt | Standardvärde | Beskrivning |
---|---|---|---|---|---|
Målkolumner | Kolumnmarkering | Obligatorisk | StringFeature | Målkolumnnamn eller index. | |
Antal ämnen att modellera | Integer | [1;1000] | Obligatorisk | 5 | Modellera dokumentdistributionen mot N-ämnen. |
N-gram | Integer | [1;10] | Obligatorisk | 2 | Ordningen på N-gram som genereras under hashning. |
Normalisera | Boolesk | Sant eller falskt | Obligatorisk | true | Normalisera utdata till sannolikheter. Den transformerade datauppsättningen blir P(topic|document) och funktionsämnesmatrisen är P(word|topic). |
Visa alla alternativ | Boolesk | Sant eller falskt | Obligatorisk | Falskt | Presenterar ytterligare parametrar som är specifika för scikit-learn online-LDA. |
Rho-parameter | Float | [0.00001;1.0] | Gäller när kryssrutan Visa alla alternativ är markerad | 0,01 | Ämnesord före distribution. |
Alfaparameter | Float | [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 nedviktar inlärningshastigheten för tidiga iterationer. Motsvarar parametern learning_offset . |
Energi som tillämpas på iterationen under uppdateringar | Float | [0.0;1.0] | Gäller när kryssrutan Visa alla alternativ är markerad | 0,5 | Den effekt som tillämpas på antalet iterationer för att styra inlärningshastigheten. Motsvarar parametern learning_decay . |
Antal tränings iterationer | 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 | Boolesk | Sant eller falskt | Gäller när kryssrutan Visa alla alternativinte är markerad | Sant | Skapar en ordlista med ngram innan LDA beräknas. Användbart för modellgranskning och tolkning. |
Maximal storlek på ngramordlistan | Integer | [1;int. MaxValue] | Gäller när alternativet Skapa ordlista för ngram är Sant | 20000 | Maximal storlek för 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 alternativinte ä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 | Boolesk | 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 Falskt | 12 | Antal bitar som ska användas under funktionshashing. |
Nästa steg
Se den uppsättning komponenter som är tillgängliga för Azure Machine Learning.
En lista över fel som är specifika för komponenterna finns i Undantag och felkoder för designern.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för