Componente de Alocação de Dirichlet Latente

Este artigo descreve como utilizar o componente Delocação de Dirichlet Latente no estruturador do Azure Machine Learning, para agrupar texto não classificado em categorias.

A Alocação De Dirichlet Latente (LDA) é frequentemente utilizada no processamento de linguagem natural para encontrar textos semelhantes. Outro termo comum é a modelação de tópicos.

Este componente utiliza uma coluna de texto e gera estas saídas:

  • O texto de origem, juntamente com uma classificação para cada categoria

  • Uma matriz de funcionalidades que contém termos e coeficientes extraídos para cada categoria

  • Uma transformação, que pode guardar e voltar a aplicar ao novo texto utilizado como entrada

Este componente utiliza a biblioteca scikit-learn. Para obter mais informações sobre o scikit-learn, consulte o repositório do GitHub, que inclui tutoriais e uma explicação do algoritmo.

Mais informações sobre a Alocação de Dirichlet Latente

Geralmente, o LDA não é um método de classificação. No entanto, utiliza uma abordagem geradora, pelo que não precisa de fornecer etiquetas de classe conhecidas e, em seguida, inferir os padrões. Em vez disso, o algoritmo gera um modelo probabilístico que é utilizado para identificar grupos de tópicos. Pode utilizar o modelo probabilístico para classificar casos de preparação existentes ou novos casos que forneça ao modelo como entrada.

Pode preferir um modelo gerador porque evita fazer suposições fortes sobre a relação entre o texto e as categorias. Utiliza apenas a distribuição de palavras para modelar tópicos matematicamente.

A teoria é discutida neste artigo, disponível como uma transferência de PDF: Latent Dirichlet Allocation: Blei, Ng e Jordan.

A implementação neste componente baseia-se na biblioteca scikit-learn para LDA.

Para obter mais informações, consulte a secção Notas técnicas .

Como configurar a Alocação de Dirichlet Latente

Este componente requer um conjunto de dados que contenha uma coluna de texto, não processado ou pré-processado.

  1. Adicione o componente de Alocação de Dirichlet Latente ao pipeline.

    Na lista de recursos em Análise de Texto, arraste e largue o componente Alocação de Dirichlet Latente na tela.

  2. Como entrada para o componente, forneça um conjunto de dados que contenha uma ou mais colunas de texto.

  3. Para Colunas de destino, escolha uma ou mais colunas que contenham texto a analisar.

    Pode escolher múltiplas colunas, mas estas têm de ser do tipo de dados de cadeia .

    Uma vez que o LDA cria uma matriz de funcionalidades grande a partir do texto, normalmente irá analisar uma única coluna de texto.

  4. Para Número de tópicos a modelar, introduza um número inteiro entre 1 e 1000 que indique quantas categorias ou tópicos pretende derivar do texto de entrada.

    Por predefinição, são criados 5 tópicos.

  5. Para N-gramas, especifique o comprimento máximo de N-gramas gerados durante o hashing.

    A predefinição é 2, o que significa que são gerados bigrams e unigramas.

  6. Selecione a opção Normalizar para converter valores de saída em probabilidades.

    Em vez de representar os valores transformados como números inteiros, os valores no conjunto de dados de saída e funcionalidade serão transformados da seguinte forma:

    • Os valores no conjunto de dados serão representados como uma probabilidade em que P(topic|document).

    • Os valores na matriz do tópico de funcionalidade serão representados como uma probabilidade em que P(word|topic).

    Nota

    No estruturador do Azure Machine Learning, a biblioteca scikit-learn já não suporta doc_topic_distr saída não normalizada da versão 0.19. Neste componente, o parâmetro Normalizar só pode ser aplicado à saída da matriz de tópicos de funcionalidade . A saída do conjunto de dados transformado é sempre normalizada.

  7. Selecione a opção Mostrar todas as opções e, em seguida, defina-a como VERDADEIRO se quiser definir os seguintes parâmetros avançados.

    Estes parâmetros são específicos da implementação scikit-learn do LDA. Existem alguns bons tutoriais sobre o LDA no scikit-learn, bem como o documento oficial scikit-learn.

    • Parâmetro Rho. Indique uma probabilidade anterior para a paridade das distribuições de tópicos. Este parâmetro corresponde ao parâmetro sklearn topic_word_prior . Utilize o valor 1 se esperar que a distribuição de palavras seja simples; ou seja, todas as palavras são assumidas como equiparáveis. Se achar que a maioria das palavras aparece de forma escassa, poderá defini-la para um valor mais baixo.

    • Parâmetro alfa. Especifique uma probabilidade anterior para a paridade de pesos de tópicos por documento. Este parâmetro corresponde ao parâmetro sklearn doc_topic_prior .

    • Número estimado de documentos. Introduza um número que represente a sua melhor estimativa do número de documentos (linhas) que serão processados. Este parâmetro permite ao componente alocar uma tabela hash de tamanho suficiente. Corresponde ao total_samples parâmetro no scikit-learn.

    • Tamanho do lote. Introduza um número que indique quantas linhas deve incluir em cada lote de texto enviado para o modelo LDA. Este parâmetro corresponde ao batch_size parâmetro no scikit-learn.

    • Valor inicial da iteração utilizada na agenda de atualizações de aprendizagem. Especifique o valor inicial que reduz a taxa de aprendizagem das iterações iniciais na aprendizagem online. Este parâmetro corresponde ao learning_offset parâmetro no scikit-learn.

    • Energia aplicada à iteração durante as atualizações. Indique o nível de energia aplicado à contagem de iteração para controlar a taxa de aprendizagem durante as atualizações online. Este parâmetro corresponde ao learning_decay parâmetro no scikit-learn.

    • Número de passes sobre os dados. Especifique o número máximo de vezes que o algoritmo irá percorrer os dados. Este parâmetro corresponde ao max_iter parâmetro no scikit-learn.

  8. Selecione a opção Criar dicionário de ngramas ou Criar dicionário de ngramas antes de LDA, se quiser criar a lista de n-gramas num passe inicial antes de classificar o texto.

    Se criar o dicionário inicial de antemão, pode utilizar posteriormente o dicionário ao rever o modelo. Geralmente, é mais fácil mapear resultados para texto em vez de índices numéricos. No entanto, guardar o dicionário demorará mais tempo e utilizará armazenamento adicional.

  9. Para o Tamanho máximo do dicionário de ngramas, introduza o número total de linhas que podem ser criadas no dicionário n-grama.

    Esta opção é útil para controlar o tamanho do dicionário. No entanto, se o número de ngramas na entrada exceder este tamanho, poderão ocorrer colisões.

  10. Submeta o pipeline. O componente LDA utiliza o teorema Bayes para determinar que tópicos podem estar associados a palavras individuais. As palavras não estão exclusivamente associadas a tópicos ou grupos. Em vez disso, cada n-grama tem uma probabilidade aprendida de estar associado a qualquer uma das classes detetadas.

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 detetadas e as classificações para cada exemplo de texto para cada categoria.

  • Matriz de tópico de funcionalidade: a coluna mais à esquerda contém a funcionalidade de texto extraído. Uma coluna para cada categoria contém a classificação dessa funcionalidade nessa categoria.

Transformação LDA

Este componente também produz a transformação LDA que aplica LDA ao conjunto de dados.

Pode guardar esta transformação e reutilizá-la para outros conjuntos de dados. Esta técnica poderá ser útil se tiver preparado um corpus grande e quiser reutilizar os coeficientes ou categorias.

Para reutilizar esta transformação, selecione o ícone Registar 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, pode ligar este componente ao componente Aplicar Transformação para reutilizar esta transformação.

Refinar um modelo ou resultados LDA

Normalmente, não pode criar um único modelo LDA que satisfaça todas as necessidades. Mesmo um modelo concebido 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:

  • Alterar os parâmetros do modelo
  • Utilizar a visualização para compreender os resultados
  • Obter o feedback dos especialistas do assunto para determinar se os tópicos gerados são úteis

As medidas qualitativas também podem ser úteis para avaliar os resultados. Para avaliar os resultados da modelação de tópicos, considere:

  • Precisão. Os itens semelhantes são realmente semelhantes?
  • A diversidade. O modelo pode discriminar entre itens semelhantes quando necessário para o problema empresarial?
  • Escalabilidade. Funciona numa vasta gama de categorias de texto ou apenas num domínio de destino estreito?

Muitas vezes, pode melhorar a precisão dos modelos com base no LDA ao utilizar o 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 desaprovisionamento

  • Reconhecimento de entidades nomeadas

Para obter mais informações, consulte Texto de Pré-processamento.

No estruturador, também pode utilizar bibliotecas R ou Python para processamento de texto: Executar Script R, Executar Script python.

Notas técnicas

Esta secção contém detalhes de implementação, sugestões e respostas a perguntas mais frequentes.

Detalhes de implementação

Por predefinição, as distribuições de saídas para um conjunto de dados transformado e matriz de tópicos de funcionalidades são normalizadas como probabilidades:

  • O conjunto de dados transformado é normalizado como a probabilidade condicional de tópicos fornecidos por um documento. Neste caso, a soma de cada linha é igual a 1.

  • A matriz feature-topic é normalizada como a probabilidade condicional de palavras fornecidas por um tópico. Neste caso, a soma de cada coluna é igual a 1.

Dica

Ocasionalmente, o componente pode devolver um tópico vazio. Na maioria das vezes, a causa é a inicialização pseudo-aleatória do algoritmo. Se isto acontecer, 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.

Modelação de tópicos e LDA

A Alocação de Dirichlet Latent é frequentemente utilizada para modelação de tópicos baseada em conteúdo, o que significa basicamente aprender categorias a partir de texto não classificado. Na modelação de tópicos baseados em conteúdos, um tópico é uma distribuição por palavras.

Por exemplo, suponha que forneceu um corpus de críticas de clientes que inclui muitos produtos. O texto das críticas que foram submetidas pelos clientes ao longo do tempo contém muitos termos, alguns dos quais são utilizados em vários tópicos.

Um tópico que o processo LDA identifica pode representar revisões para um produto individual ou pode representar um grupo de revisões de produtos. Para 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 qualquer produto. Podem referir-se a outros produtos ou ser termos gerais que se aplicam a tudo ("grande", "horrível"). Outros termos podem ser palavras irrelevantes. No entanto, o método LDA não tenta capturar todas as palavras no universo nem compreender como as palavras estão relacionadas, além das probabilidades de co-ocorrência. Só pode agrupar palavras que são utilizadas no domínio de destino.

Depois de calcular o termo índices, uma medida de semelhança baseada na distância compara linhas individuais de texto para determinar se duas partes de texto são semelhantes. Por exemplo, poderá descobrir que o produto tem vários nomes fortemente correlacionados. Em alternativa, poderá considerar que os termos fortemente negativos estão normalmente associados a um produto específico. Pode utilizar a medida de semelhança para identificar termos relacionados e criar recomendações.

Parâmetros do componente

Nome Tipo Intervalo Opcional Predefinição Description
Colunas de destino Seleção de Colunas 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 de documentos em tópicos N.
N-gramas Número inteiro [1;10] Necessário 2 Ordem de N-gramas gerada durante o hashing.
Normalizar Booleano Verdadeiro ou Falso Necessário true Normalizar a saída para probabilidades. O conjunto de dados transformado será P(tópico|documento) e a matriz do tópico da funcionalidade será P(word|tópico).
Mostrar todas as opções Booleano Verdadeiro ou Falso Necessário Falso Apresenta parâmetros adicionais específicos do LDA online scikit-learn.
Parâmetro Rho Float [0.00001;1.0] Aplica-se quando a caixa de verificação Mostrar todas as opções está selecionada 0.01 Distribuição anterior da palavra do tópico.
Parâmetro alfa Float [0.00001;1.0] Aplica-se quando a caixa de verificação Mostrar todas as opções está selecionada 0.01 Distribuição prévia do tópico do documento.
Número estimado de documentos Número inteiro [1;int. MaxValue] Aplica-se quando a caixa de verificação Mostrar todas as opções está selecionada 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 verificação Mostrar todas as opções está selecionada 32 Tamanho do lote.
Valor inicial da iteração utilizada na agenda de atualização da taxa de aprendizagem Número inteiro [0;int. MaxValue] Aplica-se quando a caixa de verificação Mostrar todas as opções está selecionada 0 Valor inicial que reduz a taxa de aprendizagem para iterações iniciais. Corresponde ao learning_offset parâmetro .
Energia aplicada à iteração durante as atualizações Float [0.0;1.0] Aplica-se quando a caixa de verificação Mostrar todas as opções está selecionada 0,5 Energia aplicada à contagem de iteração para controlar a taxa de aprendizagem. Corresponde ao learning_decay parâmetro .
Número de iterações de preparação Número inteiro [1;1024] Aplica-se quando a caixa de verificação Mostrar todas as opções está selecionada 25 Número de iterações de preparação.
Criar dicionário de ngramas Booleano Verdadeiro ou Falso Aplica-se quando a caixa de verificação Mostrar todas as opçõesnão está selecionada Verdadeiro 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 de ngramas Número inteiro [1;int. MaxValue] Aplica-se quando a opção Criar dicionário de ngramas é Verdadeiro 20 000 Tamanho máximo do dicionário de ngramas. Se o número de tokens na entrada exceder este tamanho, poderão ocorrer colisões.
Número de bits a utilizar no hashing de funcionalidades. Número inteiro [1;31] Aplica-se quando a caixa de verificação Mostrar todas as opçõesnão está selecionada e Criar dicionário de ngramas é Falso 12 Número de bits a utilizar no hashing de funcionalidades.
Criar o dicionário de ngramas anteriores ao LDA Booleano Verdadeiro ou Falso Aplica-se quando a caixa de verificação Mostrar todas as opções está selecionada Verdadeiro Cria um dicionário de ngramas anteriores à LDA. Útil para inspeção e interpretação de modelos.
Número máximo de ngramas no dicionário Número inteiro [1;int. MaxValue] Aplica-se quando a caixa de verificação Mostrar todas as opções está selecionada e a opção Criar dicionário de ngramas é Verdadeiro 20 000 Tamanho máximo do dicionário. Se o número de tokens na entrada exceder este tamanho, poderão ocorrer colisões.
Número de bits hash Número inteiro [1;31] Aplica-se quando a caixa de verificação Mostrar todas as opções está selecionada e a opção Criar dicionário de ngramas é Falso 12 Número de bits a utilizar durante o hashing de funcionalidades.

Passos seguintes

Veja o conjunto de componentes disponíveis para o Azure Machine Learning.

Para obter uma lista de erros específicos dos componentes, veja Exceções e códigos de erro para o estruturador.