Latentní Dirichlet Allocation – komponenta

Tento článek popisuje, jak použít komponentu Latent Dirichlet Allocation v návrháři služby Azure Machine Learning k seskupení jinak neklasifikovaných textů do kategorií.

Latentní Dirichlet Allocation (LDA) se často používá při zpracování přirozeného jazyka k vyhledání podobných textů. Dalším běžným termínem je modelování témat.

Tato komponenta vezme sloupec textu a vygeneruje tyto výstupy:

  • Zdrojový text spolu se skóre pro každou kategorii

  • Matice prvků, která obsahuje extrahované termíny a koeficienty pro každou kategorii

  • Transformace, kterou můžete uložit a znovu použít na nový text použitý jako vstup

Tato komponenta používá knihovnu scikit-learn. Další informace o scikit-learn najdete v úložišti GitHub, které obsahuje kurzy a vysvětlení algoritmu.

Latent Dirichlet Allocation – podrobnější informace

LDA obecně není metoda klasifikace. Používá ale generativní přístup, takže nemusíte zadávat známé popisky tříd a pak odvozovat vzory. Místo toho algoritmus vygeneruje pravděpodobnostní model, který slouží k identifikaci skupin témat. Pravděpodobnostní model můžete použít ke klasifikaci existujících trénovacích případů nebo nových případů, které modelu poskytnete jako vstup.

Můžete upřednostňovat generativní model, protože se vyhýbá silným předpokladům o vztahu mezi textem a kategoriemi. K matematickému modelování témat používá pouze rozdělení slov.

Teorie je popsána v tomto dokumentu, který je k dispozici ve formátu PDF ke stažení: Latent Dirichlet Allocation: Blei, Ng a Jordan.

Implementace v této komponentě je založená na knihovně scikit-learn pro LDA.

Další informace najdete v části Technické poznámky .

Postup konfigurace latentního přidělení Dirichletu

Tato komponenta vyžaduje datovou sadu, která obsahuje sloupec textu, buď nezpracovaný, nebo předzpracovaný.

  1. Přidejte do kanálu komponentu Latent Dirichlet Allocation .

    V seznamu prostředků v části Analýza textu přetáhněte komponentu Latent Dirichlet Allocation na plátno.

  2. Jako vstup pro komponentu zadejte datovou sadu, která obsahuje jeden nebo více textových sloupců.

  3. V části Cílové sloupce vyberte jeden nebo více sloupců obsahujících text, který chcete analyzovat.

    Můžete zvolit více sloupců, ale musí být datového typu řetězec .

    Vzhledem k tomu, že LDA vytvoří z textu velkou matici funkcí, budete obvykle analyzovat jeden textový sloupec.

  4. Do pole Počet témat, která se mají modelovat, zadejte celé číslo od 1 do 1000, které označuje, kolik kategorií nebo témat chcete odvodit ze vstupního textu.

    Ve výchozím nastavení se vytvoří 5 témat.

  5. Pro N-gramy zadejte maximální délku N-gramů vygenerovaných během hashování.

    Výchozí hodnota je 2, což znamená, že se generují bigramy i unigramy.

  6. Výběrem možnosti Normalizovat převeďte výstupní hodnoty na pravděpodobnosti.

    Místo reprezentace transformovaných hodnot jako celých čísel se hodnoty ve výstupní a funkční datové sadě transformují následujícím způsobem:

    • Hodnoty v datové sadě budou reprezentovány jako pravděpodobnost, kde P(topic|document).

    • Hodnoty v matici témat funkce budou reprezentovány jako pravděpodobnost kde P(word|topic).

    Poznámka

    V návrháři Azure Machine Learning už knihovna scikit-learn nepodporuje nenormalizované doc_topic_distr výstup z verze 0.19. V této komponentě lze parametr Normalizovat použít pouze pro výstup matice funkce Téma . Výstup transformované datové sady se vždy normalizuje.

  7. Pokud chcete nastavit následující upřesňující parametry, vyberte možnost Zobrazit všechny možnosti a nastavte ji na TRUE .

    Tyto parametry jsou specifické pro implementaci LDA scikit-learn. K dispozici jsou některé dobré kurzy o LDA v scikit-learn, stejně jako oficiální dokument scikit-learn.

    • Rho parametr. Zadejte předchozí pravděpodobnost pro hustotu rozdělení témat. Tento parametr odpovídá parametru topic_word_prior sklearn. Pokud očekáváte, že rozdělení slov je ploché, použijte hodnotu 1 . to znamená, že všechna slova jsou považována za vybavenou. Pokud si myslíte, že se většina slov zobrazuje řídce, můžete je nastavit na nižší hodnotu.

    • Parametr Alfa. Zadejte předchozí pravděpodobnosti pro hmotnost jednotlivých témat dokumentu. Tento parametr odpovídá parametru doc_topic_prior sklearn.

    • Odhadovaný počet dokumentů Zadejte číslo, které představuje nejlepší odhad počtu dokumentů (řádků), které se budou zpracovávat. Tento parametr umožňuje komponentě přidělit tabulku hash s dostatečnou velikostí. Odpovídá parametru total_samples v scikit-learn.

    • Velikost dávky. Zadejte číslo, které určuje, kolik řádků se má zahrnout do každé dávky textu odeslaného do modelu LDA. Tento parametr odpovídá parametru batch_size v scikit-learn.

    • Počáteční hodnota iterace použitá v plánu aktualizace učení Zadejte počáteční hodnotu, která snižuje rychlost učení pro počáteční iterace v online výuce. Tento parametr odpovídá parametru learning_offset v scikit-learn.

    • Napájení použité na iteraci během aktualizací. Uveďte úroveň výkonu použitou na počet iterací, abyste mohli řídit rychlost učení během online aktualizací. Tento parametr odpovídá parametru learning_decay v scikit-learn.

    • Počet průchodů dat. Zadejte maximální počet cyklů, kolikrát bude algoritmus přecházet na data. Tento parametr odpovídá parametru max_iter v scikit-learn.

  8. Pokud chcete vytvořit seznam n-gramů v počátečním průchodu před klasifikací textu, vyberte možnost Build dictionary of ngrams nebo Build dictionary of ngrams before to LDA (Vytvořit slovník ngramů před LDA).

    Pokud počáteční slovník vytvoříte předem, můžete ho později použít při kontrole modelu. Schopnost mapovat výsledky na text místo číselných indexů je obecně pro interpretaci jednodušší. Uložení slovníku ale bude trvat déle a použije se další úložiště.

  9. Do pole Maximální velikost slovníku ngram zadejte celkový počet řádků, které lze vytvořit ve slovníku n-gram.

    Tato možnost je užitečná pro řízení velikosti slovníku. Pokud ale počet ngramů ve vstupu tuto velikost překročí, může dojít ke kolizím.

  10. Odešlete kanál. Komponenta LDA používá Bayesovou větu k určení témat, která mohou být přidružena k jednotlivým slovům. Slova nejsou přidružená výhradně k žádným tématům ani skupinám. Místo toho má každý n-gram naučenou pravděpodobnost, že je přidružen k některé ze zjištěných tříd.

Výsledky

Komponenta má dva výstupy:

  • Transformovaná datová sada: Tento výstup obsahuje vstupní text, zadaný počet zjištěných kategorií a skóre pro jednotlivé příklady textu pro každou kategorii.

  • Matice témat funkce: Sloupec úplně vlevo obsahuje extrahovaný text. Sloupec pro každou kategorii obsahuje skóre pro danou funkci v dané kategorii.

Transformace LDA

Tato komponenta také vypíše transformaci LDA , která použije LDA na datovou sadu.

Tuto transformaci můžete uložit a znovu ji použít pro jiné datové sady. Tato technika může být užitečná, pokud jste trénovali na velkém korpusu a chcete znovu použít koeficienty nebo kategorie.

Pokud chcete tuto transformaci znovu použít, vyberte ikonu Registrovat datovou sadu na pravém panelu komponenty Latent Dirichlet Allocation a ponechte ji v seznamu komponent v kategorii Datové sady . Pak můžete tuto komponentu připojit k komponentě Použít transformaci a tuto transformaci znovu použít.

Upřesnění modelu LDA nebo výsledků

Obvykle nemůžete vytvořit jeden model LDA, který bude splňovat všechny potřeby. Dokonce i model navržený pro jeden úkol může vyžadovat mnoho iterací, aby se zlepšila přesnost. Ke zlepšení modelu doporučujeme vyzkoušet všechny tyto metody:

  • Změna parametrů modelu
  • Vysvětlení výsledků pomocí vizualizace
  • Získání zpětné vazby odborníků na danou problematiku, aby zjistili, jestli jsou vygenerovaná témata užitečná

Kvalitativní opatření mohou být také užitečná pro posouzení výsledků. Pokud chcete vyhodnotit výsledky modelování témat, zvažte následující:

  • Přesnost. Jsou podobné položky opravdu podobné?
  • Rozmanitosti. Může model rozlišovat podobné položky, pokud to vyžaduje obchodní problém?
  • Škálovatelnost Funguje to u široké škály textových kategorií, nebo jenom v úzké cílové doméně?

Často můžete zvýšit přesnost modelů založených na LDA pomocí zpracování přirozeného jazyka k vyčištění, shrnutí a zjednodušení nebo kategorizaci textu. Například následující techniky podporované ve službě Azure Machine Learning můžou zlepšit přesnost klasifikace:

  • Zastavit odebírání slov

  • Normalizace velkých a malých písmen

  • Lemmatizace nebo stemming

  • Rozpoznávání pojmenovaných entit

Další informace najdete v tématu Předzpracování textu.

V návrháři můžete pro zpracování textu použít také knihovny jazyka R nebo Python: Spustit skript jazyka R, Spustit skript Jazyka Python.

Technické poznámky

Tato část obsahuje podrobnosti o implementaci, tipy a odpovědi na nejčastější dotazy.

Podrobnosti o implementaci

Ve výchozím nastavení se rozdělení výstupů transformované datové sady a matice témat funkce normalizují jako pravděpodobnosti:

  • Transformovaná datová sada se normalizuje jako podmíněná pravděpodobnost témat daného dokumentu. V tomto případě se součet každého řádku rovná 1.

  • Matice témat funkcí je normalizována jako podmíněná pravděpodobnost slov zadaných v tématu. V tomto případě se součet každého sloupce rovná 1.

Tip

V některých případech může komponenta vrátit prázdné téma. Nejčastěji je příčinou pseudonáhodná inicializace algoritmu. Pokud k tomu dojde, můžete zkusit změnit související parametry. Můžete například změnit maximální velikost N-gramového slovníku nebo počet bitů, které se mají použít pro hashování prvků.

LDA a modelování témat

Latent Dirichlet Allocation se často používá k modelování témat založených na obsahu, což v podstatě znamená učení kategorií z neklasifikovaného textu. Při modelování témat založených na obsahu je téma rozdělením slov.

Předpokládejme například, že jste poskytli korpus recenzí zákazníků, který zahrnuje mnoho produktů. Text recenzí odeslaných zákazníky v průběhu času obsahuje mnoho termínů, z nichž některé se používají ve více tématech.

Téma, které proces LDA identifikuje, může představovat recenze jednotlivých produktů nebo skupinu recenzí produktů. Pro LDA je samotné téma jen rozdělení pravděpodobnosti v průběhu času pro sadu slov.

Podmínky se zřídkakdy vylučují na jeden produkt. Mohou odkazovat na jiné produkty nebo obecné termíny, které platí pro všechno ("skvělé", "hrozné"). Jiné termíny můžou být šumová slova. Metoda LDA se ale nepokouší zachytit všechna slova ve vesmíru ani porozumět tomu, jak spolu slova souvisejí, kromě pravděpodobností výskytu. Může seskupovat jenom slova, která se používají v cílové doméně.

Po výpočtu indexů termínů míra podobnosti na základě vzdálenosti porovná jednotlivé řádky textu a určí, jestli jsou si dva části textu podobné. Můžete například zjistit, že produkt má více názvů, které silně korelují. Nebo můžete zjistit, že silně negativní termíny jsou obvykle spojené s konkrétním produktem. Míru podobnosti můžete použít jak k identifikaci souvisejících termínů, tak k vytvoření doporučení.

Parametry komponent

Název Typ Rozsah Volitelné Výchozí Popis
Cílové sloupce Výběr sloupce Vyžadováno StringFeature Název cílového sloupce nebo index.
Počet témat k modelování Integer [1;1000] Vyžadováno 5 Modelujte distribuci dokumentu s N tématy.
N-gramy Integer [1;10] Vyžadováno 2 Pořadí N-gramů vygenerovaných během hashování.
Normalizovat Logická hodnota Pravda nebo Nepravda Vyžadováno true Normalizuje výstup na pravděpodobnosti. Transformovaná datová sada bude P(topic|document) a matice témat funkcí bude P(word|topic).
Zobrazit všechny možnosti Logická hodnota Pravda nebo Nepravda Vyžadováno Ne Obsahuje další parametry specifické pro scikit-learn online LDA.
Parametr Rho Float [0.00001;1.0] Platí, když je zaškrtnuté políčko Zobrazit všechny možnosti . 0,01 Předchozí distribuce slova tématu.
Parametr alfa Float [0.00001;1.0] Platí, když je zaškrtnuté políčko Zobrazit všechny možnosti . 0,01 Předchozí distribuce tématu dokumentu
Odhadovaný počet dokumentů Integer [1;int. MaxValue] Platí, když je zaškrtnuté políčko Zobrazit všechny možnosti . 1000 Odhadovaný počet dokumentů Odpovídá parametru total_samples .
Velikost dávky Integer [1;1024] Platí, když je zaškrtnuté políčko Zobrazit všechny možnosti . 32 Velikost dávky
Počáteční hodnota iterace použitá v plánu aktualizace rychlosti učení Integer [0;int. MaxValue] Platí, když je zaškrtnuté políčko Zobrazit všechny možnosti . 0 Počáteční hodnota, která snižuje míru učení pro počáteční iterace. Odpovídá parametru learning_offset .
Napájení použité na iteraci během aktualizací Float [0.0;1.0] Platí, když je zaškrtnuté políčko Zobrazit všechny možnosti . 0,5 Výkon použitý na počet iterací za účelem řízení rychlosti učení Odpovídá parametru learning_decay .
Počet iterací trénování Integer [1;1024] Platí, když je zaškrtnuté políčko Zobrazit všechny možnosti . 25 Počet iterací trénování
Sestavení slovníku ngramů Logická hodnota Pravda nebo Nepravda Platí, když není zaškrtnuté políčko Zobrazit všechny možnosti. Ano Vytvoří slovník ngramů před výpočtem LDA. Užitečné pro kontrolu a interpretaci modelu.
Maximální velikost slovníku ngramů Integer [1;int. MaxValue] Platí, když má možnost Build dictionary of ngramshodnotu True. 20000 Maximální velikost slovníku ngramů. Pokud počet tokenů ve vstupu tuto velikost překročí, může dojít ke kolizím.
Počet bitů, které se mají použít pro hashování prvků Integer [1;31] Platí, když není zaškrtnuté políčko Zobrazit všechny možnosti a možnost Sestavit slovník ngramůhodnotu False. 12 Počet bitů, které se mají použít pro hashování prvků
Sestavení slovníku ngramů před LDA Logická hodnota Pravda nebo Nepravda Platí, když je zaškrtnuté políčko Zobrazit všechny možnosti . Ano Vytvoří slovník ngramů před LDA. Užitečné pro kontrolu a interpretaci modelu.
Maximální počet ngramů ve slovníku Integer [1;int. MaxValue] Platí, když je zaškrtnuté políčko Zobrazit všechny možnosti a možnost Sestavit slovník ngramůhodnotu True. 20000 Maximální velikost slovníku. Pokud počet tokenů ve vstupu tuto velikost překročí, může dojít ke kolizím.
Počet bitů hash Integer [1;31] Platí, když je zaškrtnuté políčko Zobrazit všechny možnosti a možnost Sestavit slovník ngramůhodnotu False. 12 Počet bitů, které se mají použít při hashování prvků

Další kroky

Podívejte se na sadu komponent dostupných pro Azure Machine Learning.

Seznam chyb specifických pro součásti najdete v tématu Výjimky a kódy chyb pro návrháře.