Partilhar via


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.

  1. 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.

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

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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.