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 di argomenti.
Questo componente accetta una colonna di testo e genera questi output:
Testo di origine, insieme a un punteggio per ogni categoria
Matrice di caratteristiche 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 di Dirichlet latenti
LDA in genere non è 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 del modello matematico.
La teoria è discussa in questo documento, disponibile come download PDF: Latent Dirichlet Allocation: Blei, Ng e Jordan.
L'implementazione in questo componente è basata sulla libreria scikit-learn per LDA.
Per altre informazioni, vedere la sezione Note tecniche.
Come configurare l'allocazione di Dirichlet latente
Questo componente richiede un set di dati contenente una colonna di testo, non elaborata o pre-elaborata.
Aggiungere il componente Dirichlet Allocation latente alla pipeline.
Nell'elenco degli asset in Analisi del testo trascinare e rilasciare il componente Dirichlet Allocation latente nell'area di disegno.
Come input per il componente, specificare un set di dati contenente una o più colonne di testo.
In Colonne di destinazione scegliere una o più colonne contenenti 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.
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.
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.
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 della 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ù doc_topic_distr output nonmalizzato della versione 0.19. In questo componente, il parametro Normalize può essere applicato solo all'output della matrice argomento della funzionalità. L'output del set di dati trasformato è sempre normalizzato.
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 buone esercitazioni su LDA in scikit-learn, nonché il documento ufficiale scikit-learn.
Parametro Rh. Fornire 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 piatta, ovvero tutte le parole vengono considerate equiprobable. 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 il tasso 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 numero di 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.
Selezionare l'opzione Compila dizionario di ngram o Compila dizionario di ngrammi prima di LDA, se si vuole creare l'elenco n-gram in un passaggio iniziale prima di classificare il testo.
Se si crea in anticipo il dizionario iniziale, è 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.
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.
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 qualsiasi 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 di argomenti di funzionalità: la colonna all'estrema 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.
Affinamento di un modello o dei 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:
- Precisione. 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 ristretto?
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 maiuscole/minuscole
Lemmatizzazione o stemming
Riconoscimento di entità denominate
Per altre informazioni, vedere Pre-elaborare il testo.
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 informazioni dettagliate sull'implementazione, suggerimenti e risposte alle domande frequenti.
Dettagli sull'implementazione
Per impostazione predefinita, le distribuzioni di output per un set di dati trasformato e una matrice di argomenti 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 delle parole date a un argomento. In questo caso, la somma di ogni colonna è uguale a 1.
Suggerimento
In alcuni casi 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'hashing delle funzionalità.
Modellazione di argomenti e LDA
L'allocazione di Dirichlet latente viene spesso usata per la modellazione di argomenti basata su contenuto, che fondamentalmente significa imparare categorie da testo non classificato. Nella modellazione di argomenti basati sul contenuto, un argomento è una distribuzione rispetto alle parole.
Si supponga, ad esempio, di aver fornito un insieme di recensioni dei clienti che includono molti prodotti. Il testo delle recensioni inviate dai clienti nel corso del tempo contiene molti termini, alcuni dei quali vengono usati in più argomenti.
Un argomento identificato dal processo LDA potrebbe rappresentare le recensioni per un singolo prodotto o potrebbe rappresentare un gruppo di recensioni di 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 non significative. Tuttavia, il metodo LDA non cerca di acquisire tutte le parole nell'universo o di comprendere come le parole sono correlate, a parte le probabilità di co-occorrenza. Può raggruppare solo le parole usate nel dominio di destinazione.
Dopo aver calcolato gli 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 strettamente correlati. In alternativa, si potrebbe notare 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 | Type | Intervallo | Facoltativo | Default | Descrizione |
---|---|---|---|---|---|
Colonne di destinazione | Selezione colonne | Richiesto | StringFeature | Nome o indice della colonna di destinazione. | |
Numero di argomenti da modellare | Intero | [1; 1000] | Richiesto | 5 | Modellare la distribuzione dei documenti in base agli argomenti N. |
N-grammi | Intero | [1; 10] | Richiesto | 2 | Ordine di N-grammi generati durante l'hashing. |
Normalizza | Booleano | True o False | Richiesto | true | Normalizzare l'output per le 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 | Booleano | True o False | Richiesto | Falso | Presenta parametri aggiuntivi specifici per scikit-learn online LDA. |
Parametro Rh | Float | [0.00001; 1.0] | Si applica quando è selezionata la casella di controllo Mostra tutte le opzioni | 0.01 | Parola dell'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 del documento prima della distribuzione. |
Numero stimato di documenti | Intero | [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 | Intero | [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 | Intero | [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 . |
Numero di iterazioni di training | Intero | [1; 1024] | Si applica quando è selezionata la casella di controllo Mostra tutte le opzioni | 25 | Numero di iterazioni di training. |
Dizionario di compilazione di ngram | Booleano | True o False | Si applica quando la casella di controllo Mostra tutte le opzioni non è 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 | Intero | [1; Int. MaxValue] | Si applica quando l'opzione Compila dizionario di ngrams è True | 20000 | Dimensione massima del dizionario ngrams. Se il numero di token nell'input supera questa dimensione, potrebbero verificarsi conflitti. |
Numero di bit da usare per l'hash delle funzionalità. | Intero | [1; 31] | Si applica quando la casella di controllo Mostra tutte le opzioni non è selezionata e Il dizionario di compilazione di ngram è False | 12 | Numero di bit da usare per l'hash delle funzionalità. |
Creare un dizionario di ngram prima di LDA | Booleano | 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 | Intero | [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 | Intero | [1; 31] | Si applica quando la casella di controllo Mostra tutte le opzioni è selezionata e l'opzione Compila dizionario di ngram è 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 dei componenti, vedere Eccezioni e codici di errore per la finestra di progettazione.