Condividi tramite


Componente di allocazione Dirichlet latente

Questo articolo descrive come usare il componente Dirichlet Allocation latente nella finestra di progettazione di Azure Machine Learning per raggruppare testo non classificato in categorie.

LDA (Latent Dirichlet Allocation) viene spesso usato nell'elaborazione del linguaggio naturale per trovare testi simili. Un altro termine comune è la modellazione degli argomenti.

Questo componente accetta una colonna di testo e genera questi output:

  • Testo di origine, insieme a un punteggio per ogni categoria

  • Matrice di funzionalità che contiene termini e coefficienti estratti per ogni categoria

  • Trasformazione, che è possibile salvare e riapplicare al nuovo testo usato come input

Questo componente usa la libreria scikit-learn. Per altre informazioni su scikit-learn, vedere il repository GitHub, che include esercitazioni e una spiegazione dell'algoritmo.

Altre informazioni sull'allocazione Latent Dirichlet

LDA non è in genere un metodo per la classificazione. Ma usa un approccio generativo, quindi non è necessario fornire etichette di classe note e quindi dedurre i modelli. L'algoritmo genera invece un modello probabilistico usato per identificare i gruppi di argomenti. È possibile usare il modello probabilistico per classificare i case di training esistenti o i nuovi case forniti al modello come input.

È possibile preferire un modello generativo perché evita di fare ipotesi forti sulla relazione tra il testo e le categorie. Usa solo la distribuzione delle parole negli argomenti matematici del modello.

La teoria è descritta in questo documento, disponibile come download PDF: Latent Dirichlet Allocation: Blei, Ng e Jordan.

L'implementazione in questo componente si basa sulla libreria scikit-learn per LDA.

Per altre informazioni, vedere la sezione Note tecniche .

Come configurare l'allocazione Latent Dirichlet

Questo componente richiede un set di dati contenente una colonna di testo, non elaborata o pre-elaborata.

  1. Aggiungere il componente Dirichlet Allocation latente alla pipeline.

    Nell'elenco di asset sotto Analisi del testo trascinare e rilasciare il componente Dirichlet Allocation latente nell'area di disegno.

  2. Come input per il componente, specificare un set di dati contenente una o più colonne di testo.

  3. Per Colonne di destinazione scegliere una o più colonne che contengono testo da analizzare.

    È possibile scegliere più colonne, ma devono essere del tipo di dati stringa .

    Poiché LDA crea una matrice di funzionalità di grandi dimensioni dal testo, in genere si analizzerà una singola colonna di testo.

  4. Per Numero di argomenti da modellare immettere un numero intero compreso tra 1 e 1000 che indica il numero di categorie o argomenti da derivare dal testo di input.

    Per impostazione predefinita, vengono creati 5 argomenti.

  5. Per N-grammi, specificare la lunghezza massima di N-grammi generati durante l'hashing.

    Il valore predefinito è 2, ovvero vengono generati sia bigram che unigrammi.

  6. Selezionare l'opzione Normalize (Normalizza ) per convertire i valori di output in probabilità.

    Anziché rappresentare i valori trasformati come numeri interi, i valori nel set di dati di output e di funzionalità verranno trasformati come segue:

    • I valori nel set di dati verranno rappresentati come probabilità in cui P(topic|document).

    • I valori nella matrice dell'argomento di funzionalità verranno rappresentati come probabilità in cui P(word|topic).

    Nota

    Nella finestra di progettazione di Azure Machine Learning, la libreria scikit-learn non supporta più l'output nonmalizzato doc_topic_distr dalla versione 0.19. In questo componente il parametro Normalize può essere applicato solo all'output della matrice dell'argomento . L'output del set di dati trasformato viene sempre normalizzato.

  7. Selezionare l'opzione Mostra tutte le opzioni e quindi impostarla su TRUE se si desidera impostare i parametri avanzati seguenti.

    Questi parametri sono specifici dell'implementazione scikit-learn di LDA. Ci sono alcune esercitazioni valide su LDA in scikit-learn, nonché il documento ufficiale scikit-learn.

    • Parametro Rho. Specificare una probabilità precedente per la spaziatura delle distribuzioni di argomenti. Questo parametro corrisponde al parametro di topic_word_prior sklearn. Usare il valore 1 se si prevede che la distribuzione delle parole sia flat; cioè, si presuppone che tutte le parole siano equipaggiabili. Se si ritiene che la maggior parte delle parole venga visualizzata in modo sparse, è possibile impostarla su un valore inferiore.

    • Parametro alfa. Specificare una probabilità precedente per la spaziatura dei pesi per argomento per documento. Questo parametro corrisponde al parametro di doc_topic_prior sklearn.

    • Numero stimato di documenti. Immettere un numero che rappresenta la stima migliore del numero di documenti (righe) che verranno elaborati. Questo parametro consente al componente di allocare una tabella hash di dimensioni sufficienti. Corrisponde al total_samples parametro in scikit-learn.

    • Dimensioni del batch. Immettere un numero che indica il numero di righe da includere in ogni batch di testo inviato al modello LDA. Questo parametro corrisponde al batch_size parametro in scikit-learn.

    • Valore iniziale dell'iterazione usata nella pianificazione degli aggiornamenti di apprendimento. Specificare il valore iniziale che riduce la frequenza di apprendimento per le iterazioni iniziali nell'apprendimento online. Questo parametro corrisponde al learning_offset parametro in scikit-learn.

    • Potenza applicata all'iterazione durante gli aggiornamenti. Indicare il livello di potenza applicato al conteggio delle iterazioni per controllare la frequenza di apprendimento durante gli aggiornamenti online. Questo parametro corrisponde al learning_decay parametro in scikit-learn.

    • Numero di passaggi sui dati. Specificare il numero massimo di volte in cui l'algoritmo scorrerà i dati. Questo parametro corrisponde al max_iter parametro in scikit-learn.

  8. Selezionare l'opzione Compila dizionario di ngram oCompila dizionario di ngrammi prima di LDA, se si vuole creare l'elenco n-gram in un passaggio iniziale prima di classificare il testo.

    Se in precedenza si crea il dizionario iniziale, sarà possibile usare il dizionario in un secondo momento durante la revisione del modello. La possibilità di eseguire il mapping dei risultati al testo anziché agli indici numerici è in genere più semplice per l'interpretazione. Tuttavia, il salvataggio del dizionario richiederà più tempo e userà spazio di archiviazione aggiuntivo.

  9. Per Dimensioni massime del dizionario ngram immettere il numero totale di righe che è possibile creare nel dizionario n-gram.

    Questa opzione è utile per controllare le dimensioni del dizionario. Tuttavia, se il numero di ngram nell'input supera questa dimensione, possono verificarsi conflitti.

  10. Inviare la pipeline. Il componente LDA usa il teorema Bayes per determinare quali argomenti possono essere associati a singole parole. Le parole non sono associate esclusivamente ad argomenti o gruppi. Ogni n-gram ha invece una probabilità appresa di essere associata a una delle classi individuate.

Risultati

Il componente ha due output:

  • Set di dati trasformato: questo output contiene il testo di input, un numero specificato di categorie individuate e i punteggi per ogni esempio di testo per ogni categoria.

  • Matrice dell'argomento di funzionalità: la colonna più a sinistra contiene la funzionalità di testo estratta. Una colonna per ogni categoria contiene il punteggio per tale funzionalità in tale categoria.

Trasformazione LDA

Questo componente restituisce anche la trasformazione LDA che applica LDA al set di dati.

È possibile salvare questa trasformazione e riutilizzarla per altri set di dati. Questa tecnica può essere utile se è stato eseguito il training su un corpus di grandi dimensioni e si vogliono riutilizzare i coefficienti o le categorie.

Per riutilizzare questa trasformazione, selezionare l'icona Registra set di dati nel pannello destro del componente Dirichlet Allocation latente per mantenere il componente nella categoria Set di dati nell'elenco dei componenti. È quindi possibile connettere questo componente al componente Applica trasformazione per riutilizzare questa trasformazione.

Ridefinizione di un modello o di risultati LDA

In genere, non è possibile creare un singolo modello LDA che soddisfi tutte le esigenze. Anche un modello progettato per un'attività potrebbe richiedere molte iterazioni per migliorare l'accuratezza. È consigliabile provare tutti questi metodi per migliorare il modello:

  • Modifica dei parametri del modello
  • Uso della visualizzazione per comprendere i risultati
  • Ottenere il feedback degli esperti in materia per determinare se gli argomenti generati sono utili

Le misure qualitative possono essere utili anche per valutare i risultati. Per valutare i risultati della modellazione degli argomenti, prendere in considerazione:

  • Accuratezza. Gli elementi simili sono davvero simili?
  • Diversità. Il modello può distinguere tra elementi simili quando necessario per il problema aziendale?
  • Scalabilità. Funziona su un'ampia gamma di categorie di testo o solo su un dominio di destinazione limitato?

È spesso possibile migliorare l'accuratezza dei modelli basati su LDA usando l'elaborazione del linguaggio naturale per pulire, riepilogare e semplificare o classificare il testo. Ad esempio, le tecniche seguenti, tutte supportate in Azure Machine Learning, possono migliorare l'accuratezza della classificazione:

  • Eliminazione parole vuote

  • Normalizzazione delle maiuscole e minuscole

  • Lemmatizzazione o stemming

  • Riconoscimento di entità denominate

Per altre informazioni, vedere Testo pre-elaborazione.

Nella finestra di progettazione è anche possibile usare librerie R o Python per l'elaborazione del testo: Esegui script R, Esegui script Python.

Note tecniche

Questa sezione contiene i dettagli, i suggerimenti e le risposte all'implementazione alle domande frequenti.

Dettagli dell'implementazione

Per impostazione predefinita, le distribuzioni di output per un set di dati trasformato e una matrice argomento di funzionalità vengono normalizzate come probabilità:

  • Il set di dati trasformato viene normalizzato come probabilità condizionale degli argomenti forniti da un documento. In questo caso, la somma di ogni riga è uguale a 1.

  • La matrice dell'argomento di funzionalità viene normalizzata come probabilità condizionale di parole date a un argomento. In questo caso, la somma di ogni colonna è uguale a 1.

Suggerimento

Occasionalmente il componente potrebbe restituire un argomento vuoto. La causa più spesso è l'inizializzazione pseudo-casuale dell'algoritmo. In questo caso, è possibile provare a modificare i parametri correlati. Ad esempio, modificare le dimensioni massime del dizionario N-gram o il numero di bit da usare per l'hash delle funzionalità.

Modellazione di argomenti e LDA

L'allocazione di Dirichlet latente viene spesso usata per la modellazione degli argomenti basata su contenuto, che significa fondamentalmente imparare le categorie dal testo non classificato. Nella modellazione degli argomenti basati sul contenuto, un argomento è una distribuzione rispetto alle parole.

Si supponga, ad esempio, di aver fornito un corpus di recensioni dei clienti che includono molti prodotti. Il testo delle revisioni inviate dai clienti nel tempo contiene molti termini, alcuni dei quali vengono usati in più argomenti.

Un argomento che il processo LDA identifica può rappresentare le recensioni per un singolo prodotto oppure potrebbe rappresentare un gruppo di recensioni dei prodotti. Per LDA, l'argomento stesso è solo una distribuzione di probabilità nel tempo per un set di parole.

I termini sono raramente esclusivi per qualsiasi prodotto. Possono fare riferimento ad altri prodotti o essere termini generali che si applicano a tutto ("grande", "terribile"). Altri termini potrebbero essere parole di rumore. Tuttavia, il metodo LDA non tenta di acquisire tutte le parole nell'universo o di comprendere come le parole sono correlate, oltre alle probabilità di co-occorrenza. Può raggruppare solo le parole usate nel dominio di destinazione.

Dopo aver calcolato i termini indici, una misura di somiglianza basata sulla distanza confronta singole righe di testo per determinare se due parti di testo sono simili. Ad esempio, è possibile che il prodotto abbia più nomi fortemente correlati. In alternativa, potresti trovare che i termini fortemente negativi sono in genere associati a un determinato prodotto. È possibile usare la misura di somiglianza sia per identificare i termini correlati che per creare raccomandazioni.

Parametri del componente

Nome Tipo Intervallo Facoltativo Predefinito Descrizione
Target column(s) Selezione colonne Necessario StringFeature Nome della colonna di destinazione o indice.
Numero di argomenti da modellare Integer [1;1000] Necessario 5 Modellare la distribuzione del documento rispetto agli argomenti N.
N-grams Integer [1;10] Obbligatoria 2 Ordine di N-grammi generati durante l'hashing.
Normalizzare Boolean true o false Necessario true Normalizzare l'output alle probabilità. Il set di dati trasformato sarà P(topic|document) e la matrice dell'argomento di funzionalità sarà P(word|topic).
Mostra tutte le opzioni Boolean true o false Necessario Falso Presenta parametri aggiuntivi specifici per scikit-learn online LDA.
Parametro Rho Float [0.00001;1.0] Si applica quando è selezionata la casella di controllo Mostra tutte le opzioni 0,01 Parola argomento prima della distribuzione.
Parametro Alfa Float [0.00001;1.0] Si applica quando è selezionata la casella di controllo Mostra tutte le opzioni 0,01 Argomento documento precedente alla distribuzione.
Numero stimato di documenti Integer [1;int.MaxValue] Si applica quando è selezionata la casella di controllo Mostra tutte le opzioni 1000 Numero stimato di documenti. Corrisponde al total_samples parametro .
Dimensioni del batch Integer [1;1024] Si applica quando è selezionata la casella di controllo Mostra tutte le opzioni 32 Dimensioni del batch.
Valore iniziale dell'iterazione usata nella pianificazione degli aggiornamenti della frequenza di apprendimento Integer [0;int. MaxValue] Si applica quando è selezionata la casella di controllo Mostra tutte le opzioni 0 Valore iniziale che riduce la frequenza di apprendimento per le iterazioni iniziali. Corrisponde al learning_offset parametro .
Potenza applicata all'iterazione durante gli aggiornamenti Float [0,0;1,0] Si applica quando è selezionata la casella di controllo Mostra tutte le opzioni 0.5 Potenza applicata al conteggio delle iterazioni per controllare la frequenza di apprendimento. Corrisponde al learning_decay parametro .
Number of training iterations Integer [1;1024] Si applica quando è selezionata la casella di controllo Mostra tutte le opzioni 25 Numero di iterazioni di training.
Creare un dizionario di ngram Boolean true o false Si applica quando la casella di controllo Mostra tutte le opzioninon è selezionata Vero Compila un dizionario di ngram prima di calcolare LDA. Utile per l'ispezione e l'interpretazione dei modelli.
Dimensioni massime del dizionario ngram Integer [1;int.MaxValue] Si applica quando l'opzione Compila dizionario di ngrams è True 20000 Dimensioni massime del dizionario ngrams. Se il numero di token nell'input supera questa dimensione, potrebbero verificarsi conflitti.
Numero di bit da usare per l'hashing delle funzionalità. Integer [1;31] Si applica quando la casella di controllo Mostra tutte le opzioninon è selezionata e il dizionario di compilazione di ngram èFalse 12 Numero di bit da usare per l'hashing delle funzionalità.
Creare un dizionario di ngram prima di LDA Boolean true o false Si applica quando è selezionata la casella di controllo Mostra tutte le opzioni Vero Compila un dizionario di ngram prima di LDA. Utile per l'ispezione e l'interpretazione dei modelli.
Numero massimo di ngram nel dizionario Integer [1;int.MaxValue] Si applica quando la casella di controllo Mostra tutte le opzioni è selezionata e l'opzione Compila dizionario di ngrams è True 20000 Dimensioni massime del dizionario. Se il numero di token nell'input supera questa dimensione, potrebbero verificarsi conflitti.
Numero di bit hash Integer [1;31] Si applica quando è selezionata la casella di controllo Mostra tutte le opzioni e l'opzione Compila dizionario di ngrams è False 12 Numero di bit da usare durante l'hashing delle funzionalità.

Passaggi successivi

Vedere il set di componenti disponibili per Azure Machine Learning.

Per un elenco di errori specifici per i componenti, vedere Eccezioni e codici di errore per la finestra di progettazione.