Componente de alocação de Dirichlet latente
Este artigo descreve como usar o componente Alocação de Dirichlet Latente no designer do Azure Machine Learning para agrupar texto não classificado em categorias.
A Alocação de Dirichlet Latente (LDA) é frequentemente usada no processamento de linguagem natural para encontrar textos semelhantes. Outro termo comum é modelagem de tópicos.
Este componente pega uma coluna de texto e gera estas saídas:
O texto de partida, juntamente com uma pontuação para cada categoria
Uma matriz de recursos que contém termos e coeficientes extraídos para cada categoria
Uma transformação, que você pode salvar e reaplicar ao novo texto usado como entrada
Este componente usa a biblioteca scikit-learn. Para obter mais informações sobre scikit-learn, consulte o repositório GitHub, que inclui tutoriais e uma explicação do algoritmo.
Mais sobre Alocação de Dirichlet Latente
LDA geralmente não é um método de classificação. Mas ele usa uma abordagem generativa, então você não precisa fornecer rótulos de classe conhecidos e, em seguida, inferir os padrões. Em vez disso, o algoritmo gera um modelo probabilístico que é usado para identificar grupos de tópicos. Você pode usar o modelo probabilístico para classificar casos de treinamento existentes ou novos casos que você fornece ao modelo como entrada.
Você pode preferir um modelo generativo porque ele evita fazer suposições fortes sobre a relação entre o texto e as categorias. Ele usa apenas a distribuição de palavras para modelar matematicamente tópicos.
A teoria é discutida neste artigo, disponível para download em PDF: Latent Dirichlet Allocation: Blei, Ng e Jordan.
A implementação neste componente é baseada na biblioteca scikit-learn para LDA.
Para obter mais informações, consulte a seção Notas técnicas.
Como configurar a alocação de Dirichlet latente
Este componente requer um conjunto de dados que contém uma coluna de texto, bruto ou pré-processado.
Adicione o componente Alocação de Dirichlet latente ao seu pipeline.
Na lista de ativos em Análise de texto, arraste e solte o componente Alocação de Dirichlet latente na tela.
Como entrada para o componente, forneça um conjunto de dados que contenha uma ou mais colunas de texto.
Em Colunas de destino, escolha uma ou mais colunas que contenham texto para analisar.
Você pode escolher várias colunas, mas elas devem ser do tipo de dados de cadeia de caracteres .
Como o LDA cria uma matriz de recursos grande a partir do texto, você normalmente analisará uma única coluna de texto.
Em Número de tópicos a modelar, insira um número inteiro entre 1 e 1000 que indique quantas categorias ou tópicos você deseja derivar do texto de entrada.
Por padrão, 5 tópicos são criados.
Para N-gramas, especifique o comprimento máximo de N-gramas gerados durante o hashing.
O padrão é 2, o que significa que bigramas e unigramas são gerados.
Selecione a opção Normalizar para converter valores de saída em probabilidades.
Em vez de representar os valores transformados como inteiros, os valores no conjunto de dados de saída e recurso serão transformados da seguinte maneira:
Os valores no conjunto de dados serão representados como uma probabilidade onde
P(topic|document)
.Os valores na matriz de tópicos do recurso serão representados como uma probabilidade onde
P(word|topic)
.
Nota
No designer do Azure Machine Learning, a biblioteca scikit-learn não suporta mais a saída de doc_topic_distr não normalizada da versão 0.19. Neste componente, o parâmetro Normalize só pode ser aplicado à saída da matriz Topic do recurso. A saída do conjunto de dados transformado é sempre normalizada.
Selecione a opção Mostrar todas as opções e, em seguida, defina-a como TRUE se quiser definir os seguintes parâmetros avançados.
Estes parâmetros são específicos para a implementação scikit-learn do LDA. Existem alguns bons tutoriais sobre LDA em scikit-learn, bem como o documento oficial scikit-learn.
Parâmetro Rho. Fornecer uma probabilidade prévia para a parsidade de distribuições de tópicos. Este parâmetro corresponde ao parâmetro sklearn
topic_word_prior
. Use o valor 1 se você espera que a distribuição das palavras seja plana, ou seja, todas as palavras são consideradas equipáveis. Se você acha que a maioria das palavras aparece esparsamente, você pode defini-lo para um valor mais baixo.Parâmetro alfa. Especifique uma probabilidade prévia para a parsidade de pesos de tópico por documento. Este parâmetro corresponde ao parâmetro sklearn
doc_topic_prior
.Número estimado de documentos. Insira um número que represente sua melhor estimativa do número de documentos (linhas) que serão processados. Este parâmetro permite que o componente aloque uma tabela de hash de tamanho suficiente. Corresponde ao
total_samples
parâmetro em scikit-learn.Tamanho do lote. Insira um número que indique quantas linhas incluir em cada lote de texto enviado para o modelo LDA. Este parâmetro corresponde ao
batch_size
parâmetro em scikit-learn.Valor inicial da iteração usada no cronograma de atualização de aprendizagem. Especifique o valor inicial que reduz a taxa de aprendizagem para iterações iniciais na aprendizagem online. Este parâmetro corresponde ao
learning_offset
parâmetro em scikit-learn.Alimentação aplicada à iteração durante as atualizações. Indique o nível de potência aplicado à contagem de iterações para controlar a taxa de aprendizagem durante as atualizações online. Este parâmetro corresponde ao
learning_decay
parâmetro em scikit-learn.Número de passagens sobre os dados. Especifique o número máximo de vezes que o algoritmo percorrerá os dados. Este parâmetro corresponde ao
max_iter
parâmetro em scikit-learn.
Selecione a opção Construir dicionário de ngramas ou Construir dicionário de ngramas antes do LDA, se quiser criar a lista de n-gramas em uma passagem inicial antes de classificar o texto.
Se você criar o dicionário inicial previamente, poderá usá-lo posteriormente ao revisar o modelo. Ser capaz de mapear resultados para texto em vez de índices numéricos é geralmente mais fácil de interpretar. No entanto, salvar o dicionário levará mais tempo e usará armazenamento adicional.
Em Tamanho máximo do dicionário ngram, insira o número total de linhas que podem ser criadas no dicionário n-gramas.
Esta opção é útil para controlar o tamanho do dicionário. Mas se o número de ngramas na entrada exceder esse tamanho, podem ocorrer colisões.
Envie o pipeline. O componente LDA usa o teorema de Bayes para determinar quais tópicos podem ser associados a palavras individuais. As palavras não estão exclusivamente associadas a quaisquer tópicos ou grupos. Em vez disso, cada n-grama tem uma probabilidade aprendida de estar associado a qualquer uma das classes descobertas.
Resultados
O componente tem duas saídas:
Conjunto de dados transformado: esta saída contém o texto de entrada, um número especificado de categorias descobertas e as pontuações para cada exemplo de texto para cada categoria.
Matriz de tópicos do recurso: A coluna mais à esquerda contém o recurso de texto extraído. Uma coluna para cada categoria contém a pontuação para esse recurso nessa categoria.
Transformação LDA
Este componente também produz a transformação LDA que aplica LDA ao conjunto de dados.
Você pode salvar essa transformação e reutilizá-la para outros conjuntos de dados. Esta técnica pode ser útil se você treinou em um corpus grande e deseja reutilizar os coeficientes ou categorias.
Para reutilizar essa transformação, selecione o ícone Registrar conjunto de dados no painel direito do componente Alocação de Dirichlet latente para manter o componente na categoria Conjuntos de dados na lista de componentes. Em seguida, você pode conectar esse componente ao componente Aplicar transformação para reutilizar essa transformação.
Refinando um modelo ou resultados LDA
Normalmente, não é possível criar um único modelo LDA que atenda a todas as necessidades. Mesmo um modelo projetado para uma tarefa pode exigir muitas iterações para melhorar a precisão. Recomendamos que experimente todos estes métodos para melhorar o seu modelo:
- Alterando os parâmetros do modelo
- Usando a visualização para entender os resultados
- Obter o feedback de especialistas no assunto para determinar se os tópicos gerados são úteis
Medidas qualitativas também podem ser úteis para avaliar os resultados. Para avaliar os resultados da modelagem de tópicos, considere:
- Precisão. Itens semelhantes são realmente semelhantes?
- Diversidade. O modelo pode discriminar entre itens semelhantes quando necessário para o problema de negócios?
- Escalabilidade. Ele funciona em uma ampla gama de categorias de texto ou apenas em um domínio de destino restrito?
Muitas vezes, você pode melhorar a precisão de modelos baseados em LDA usando processamento de linguagem natural para limpar, resumir e simplificar ou categorizar texto. Por exemplo, as seguintes técnicas, todas suportadas no Azure Machine Learning, podem melhorar a precisão da classificação:
Parar remoção de palavras
Normalização de casos
Lemmatização ou engace
Reconhecimento de entidades nomeadas
Para obter mais informações, consulte Pré-processar texto.
No designer, você também pode usar bibliotecas R ou Python para processamento de texto: Execute R Script, Execute Python Script.
Notas técnicas
Esta seção contém detalhes de implementação, dicas e respostas para perguntas frequentes.
Detalhes da implementação
Por padrão, as distribuições de saídas para um conjunto de dados transformado e matriz de tópico-recurso são normalizadas como probabilidades:
O conjunto de dados transformado é normalizado como a probabilidade condicional de tópicos dados a um documento. Neste caso, a soma de cada linha é igual a 1.
A matriz característica-tópico é normalizada como a probabilidade condicional de palavras dadas a um tópico. Neste caso, a soma de cada coluna é igual a 1.
Gorjeta
Ocasionalmente, o componente pode retornar um tópico vazio. Na maioria das vezes, a causa é a inicialização pseudoaleatória do algoritmo. Se isso acontecer, você pode tentar alterar os parâmetros relacionados. Por exemplo, altere o tamanho máximo do dicionário de N-gramas ou o número de bits a utilizar no hashing de funcionalidades.
LDA e modelagem de tópicos
A alocação latente de Dirichlet é frequentemente usada para modelagem de tópicos baseada em conteúdo, o que basicamente significa aprender categorias a partir de texto não classificado. Na modelagem de tópicos baseada em conteúdo, um tópico é uma distribuição sobre palavras.
Por exemplo, suponha que você forneceu um corpus de avaliações de clientes que inclui muitos produtos. O texto das avaliações enviadas pelos clientes ao longo do tempo contém muitos termos, alguns dos quais são usados em vários tópicos.
Um tópico que o processo LDA identifica pode representar avaliações de um produto individual ou pode representar um grupo de avaliações de produtos. Para a LDA, o tópico em si é apenas uma distribuição de probabilidade ao longo do tempo para um conjunto de palavras.
Os termos raramente são exclusivos de um produto. Podem referir-se a outros produtos, ou ser termos gerais que se aplicam a tudo ("ótimo", "horrível"). Outros termos podem ser palavras de ruído. No entanto, o método LDA não tenta capturar todas as palavras do universo ou entender como as palavras estão relacionadas, além das probabilidades de coocorrência. Ele só pode agrupar palavras que são usadas no domínio de destino.
Depois que os índices de termos são calculados, uma medida de semelhança baseada em distância compara linhas individuais de texto para determinar se duas partes de texto são semelhantes. Por exemplo, você pode achar que o produto tem vários nomes que estão fortemente correlacionados. Ou, você pode achar que termos fortemente negativos são geralmente associados a um determinado produto. Você pode usar a medida de semelhança para identificar termos relacionados e criar recomendações.
Parâmetros dos componentes
Nome | Tipo | Intervalo | Opcional | Predefinido | Description |
---|---|---|---|---|---|
Coluna(s) de destino | Seleção de coluna | Necessário | StringFeature | Nome ou índice da coluna de destino. | |
Número de tópicos a modelar | Número inteiro | [1; 1000] | Necessário | 5 | Modele a distribuição do documento em relação a N tópicos. |
N-gramas | Número inteiro | [1; 10] | Necessário | 2 | Ordem de N-gramas gerada durante o hashing. |
Normalizar | Boolean | Verdadeiro ou Falso | Necessário | verdadeiro | Normalize a saída para probabilidades. O conjunto de dados transformado será P(topic|document) e a matriz de tópicos do recurso será P(word|topic). |
Mostrar todas as opções | Boolean | Verdadeiro ou Falso | Necessário | False | Apresenta parâmetros adicionais específicos para scikit-learn online LDA. |
Parâmetro Rho | Float | [0.00001; 1.0] | Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada | 0,01 | Distribuição prévia da palavra do tópico. |
Parâmetro alfa | Float | [0.00001; 1.0] | Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada | 0,01 | Tópico do documento distribuição prévia. |
Número estimado de documentos | Número inteiro | [1; int. ValorMáximo] | Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada | 1000 | Número estimado de documentos. Corresponde ao total_samples parâmetro. |
Tamanho do lote | Número inteiro | [1; 1024] | Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada | 32 | Tamanho do lote. |
Valor inicial da iteração usada no cronograma de atualização da taxa de aprendizagem | Número inteiro | [0; int. ValorMáximo] | Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada | 0 | Valor inicial que reduz a taxa de aprendizagem para iterações iniciais. Corresponde ao learning_offset parâmetro. |
Potência aplicada à iteração durante as atualizações | Float | [0.0; 1.0] | Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada | 0.5 | Potência aplicada à contagem de iterações para controlar a taxa de aprendizagem. Corresponde ao learning_decay parâmetro. |
Número de iterações de treinamento | Número inteiro | [1; 1024] | Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada | 25 | Número de iterações de treinamento. |
Construir dicionário de ngramas | Boolean | Verdadeiro ou Falso | Aplica-se quando a caixa de seleção Mostrar todas as opções não está marcada | True | Cria um dicionário de ngramas antes de calcular o LDA. Útil para inspeção e interpretação de modelos. |
Tamanho máximo do dicionário ngram | Número inteiro | [1; int. ValorMáximo] | Aplica-se quando a opção Build dictionary of ngrams é True | 20 000 | Tamanho máximo do dicionário ngramas. Se o número de tokens na entrada exceder esse tamanho, podem ocorrer colisões. |
Número de bits a utilizar no hashing de funcionalidades. | Número inteiro | [1; 31] | Aplica-se quando a caixa de seleção Mostrar todas as opções não está marcada e Criar dicionário de ngramas é Falso | 12 | Número de bits a utilizar no hashing de funcionalidades. |
Construir dicionário de ngramas antes de LDA | Boolean | Verdadeiro ou Falso | Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada | True | Cria um dicionário de ngramas antes do LDA. Útil para inspeção e interpretação de modelos. |
Número máximo de ngramas no dicionário | Número inteiro | [1; int. ValorMáximo] | Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada e a opção Criar dicionário de ngramas é True | 20 000 | Tamanho máximo do dicionário. Se o número de tokens na entrada exceder esse tamanho, podem ocorrer colisões. |
Número de bits hash | Número inteiro | [1; 31] | Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada e a opção Criar dicionário de ngramas é Falso | 12 | Número de bits a utilizar durante o hashing de funcionalidades. |
Próximos passos
Consulte o conjunto de componentes disponíveis para o Azure Machine Learning.
Para obter uma lista de erros específicos para os componentes, consulte Exceções e códigos de erro para o designer.