Share via


Componente de Alocação de Dirichlet Latente

Este artigo descreve como usar o componente de Alocação de Dirichlet Latente no designer do Azure Machine Learning para agrupar o texto não classificado em categorias.

Geralmente, a Alocação de Dirichlet Latente (LDA) é usada no processamento de linguagem natural para encontrar textos semelhantes. Outro termo comum é modelagem de tópico.

Esse componente usa uma coluna de texto e gera estas saídas:

  • O texto de origem, junto com uma pontuação para cada categoria

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

  • Uma transformação, que você pode salvar e reaplicar ao novo texto usado como entrada

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

Saiba mais sobre a Alocação de Dirichlet Latente

Geralmente, a LDA não é um método de classificação. Mas ela usa uma abordagem generativa, portanto, 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 os casos de treinamento existentes ou os novos casos que você fornecer 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 os tópicos.

A teoria é discutida neste artigo, disponível para download em PDF: Alocação de Dirichlet Latente: Blei, Ng, e Jordan.

A implementação neste componente é baseada na biblioteca scikit-learn para a LDA.

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

Como configurar a Alocação de Dirichlet Latente

Este componente requer um conjunto de dados que contém uma coluna de texto, seja 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. Para Colunas de destino, escolha uma ou mais colunas que contenham texto a ser analisado.

    Você pode escolher várias colunas, mas elas devem ser do tipo de dados de cadeia de caracteres.

    Como a LDA cria uma grande matriz de recursos a partir do texto, você normalmente analisará uma única coluna de texto.

  4. Para Número de tópicos a serem modelados, insira um número inteiro entre 1 e 1000 que indica quantas categorias ou tópicos você deseja derivar do texto de entrada.

    Por padrão, são criados 5 tópicos.

  5. Para N-grams, especifique o comprimento máximo de N-grams 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 de recurso serão transformados da seguinte forma:

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

    • Os valores na matriz de tópicos de recursos serão representados como uma probabilidade onde P(word|topic).

    Observação

    No designer do Azure Machine Learning, a biblioteca scikit-learn não oferece mais suporte à saída doc_topic_distr não normalizada a partir da versão 0.19. Neste componente, o parâmetro Normalizar pode ser aplicado apenas à saída Matriz de tópico de recurso. A saída Conjunto de dados transformado é sempre normalizada.

  7. Selecione a opção Mostrar todas as opções e defina-a como VERDADEIRA se desejar definir os parâmetros avançados a seguir.

    Esses parâmetros são específicos para a implementação scikit-learn da LDA. Há alguns bons tutoriais sobre LDA na scikit-learn, bem como o documento oficial da scikit-learn.

    • Parâmetro Rho. Forneça uma probabilidade anterior para a dispersão de distribuições de tópico. Esse parâmetro corresponde ao parâmetro de sklearn topic_word_prior. Use o valor 1 se você espera que a distribuição de palavras seja uniforme; ou seja, todas as palavras sejam consideradas equiprováveis. Se você acha que a maioria das palavras aparece esparsamente, defina um valor mais baixo.

    • Parâmetro Alfa. Especifique uma probabilidade anterior para a dispersão de pesos de tópico por documento. Esse parâmetro corresponde ao parâmetro de sklearn doc_topic_prior.

    • Número estimado de documentos. Insira um número que represente a melhor estimativa do número de documentos (linhas) que será processado. Esse parâmetro permite que o componente aloque uma tabela de hash de tamanho suficiente. Ele corresponde ao parâmetro total_samples na scikit-learn.

    • O tamanho do lote. Insira um número que indica quantas linhas incluir em cada lote de texto enviado ao modelo de LDA. Esse parâmetro corresponde ao parâmetro batch_size na scikit-learn.

    • Valor inicial da iteração usada no agendamento da atualização de aprendizagem. Especifique o valor inicial que reduz a taxa de aprendizagem para as primeiras iterações na aprendizagem online. Esse parâmetro corresponde ao parâmetro learning_offset na 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. Esse parâmetro corresponde ao parâmetro learning_decay na scikit-learn.

    • Número de passagens sobre os dados. Especifique o número máximo de vezes que o algoritmo passará pelos dados. Esse parâmetro corresponde ao parâmetro max_iter na scikit-learn.

  8. Selecione a opção Criar dicionário de n-grams ou Criar dicionário de n-grams antes da LDA, se você quiser criar a lista de n-grams em uma passagem inicial antes de classificar o texto.

    Se você criar o dicionário inicial antecipadamente, poderá usar posteriormente o dicionário ao revisar o modelo. Ser capaz de mapear os 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. Para Tamanho máximo do dicionário de n-grams, insira o número total de linhas que podem ser criadas no dicionário de n-grams.

    Essa opção é útil para controlar o tamanho do dicionário. Mas se o número de n-grams na entrada exceder esse tamanho, poderão 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 são associadas exclusivamente a nenhum tópico ou grupo. Em vez disso, cada n-gram tem uma probabilidade aprendida de ser associada a qualquer uma das classes descobertas.

Resultados

O componente tem duas saídas:

  • Conjunto de dados transformado: Essa 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 de recursos: 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 da LDA

Esse componente também gera a Transformação da LDA que aplica a LDA ao conjunto de dados.

Você pode salvar essa transformação e reutilizá-la para outros conjuntos de dados. Essa técnica pode ser útil se você treinou em um grande corpus 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 de LDA ou resultados

Normalmente, você não pode criar um único modelo de LDA que atenderá a todas as necessidades. Até mesmo um modelo projetado para uma tarefa pode exigir muitas iterações para melhorar a precisão. Recomendamos que você experimente todos estes métodos para melhorar seu modelo:

  • Alterar os parâmetros do modelo
  • Usar a visualização para entender os resultados
  • Obter os comentários de especialistas no 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 modelagem do tópico, considere:

  • Exatidão. Os itens semelhantes são realmente semelhantes?
  • Diversidade. O modelo pode discriminar entre itens semelhantes quando necessário para o problema comercial?
  • Escalabilidade. Funciona em uma ampla gama de categorias de texto ou apenas em um domínio de destino restrito?

Geralmente, você pode melhorar a precisão dos modelos com base em LDA usando o processamento de linguagem natural para limpar, resumir e simplificar ou categorizar texto. Por exemplo, as técnicas a seguir, todas com suporte no Azure Machine Learning, podem melhorar a precisão da classificação:

  • Remoção de palavra irrelevante (stop word)

  • Normalização de caso

  • Lematização

  • Reconhecimento de entidade nomeada

Para obter mais informações, consulte Pré-processar texto.

No designer, você também pode usar as bibliotecas R ou Python para processamento de texto: Executar script R, Executar script Python.

Observações técnicas

Esta seção contém detalhes de implementação, dicas e respostas para perguntas frequentes.

Detalhes de implementação

Por padrão, as distribuições de resultados para um conjunto de dados transformado e matriz de tópico de recursos são normalizadas como probabilidades:

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

  • A matriz de tópico de recursos é normalizada como a probabilidade condicional de palavras em um tópico. Nesse caso, a soma de cada coluna é igual a 1.

Dica

Ocasionalmente, o componente pode retornar um tópico vazio. Na maioria das vezes, a causa é a inicialização pseudo-aleató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-grams ou o número de bits a serem usados para o hashing de recursos.

LDA e modelagem de tópico

Em geral, a Alocação de Dirichlet Latente é usada para modelagem de tópico com base em conteúdo, o que basicamente significa categorias de aprendizado a partir de texto não classificado. Na modelagem de tópicos baseada em conteúdo, um tópico é uma distribuição de palavras.

Por exemplo, suponha que você tenha fornecido um corpus de análises de clientes que inclui muitos produtos. O texto das análises que foram 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 análises para um produto individual ou pode representar um grupo de análises 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. Eles podem se referir 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 se relacionam, 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 termo são computados, uma medida de similaridade 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 talvez você ache que termos fortemente negativos geralmente são associados a um produto específico. Você pode usar a medida de similaridade para identificar termos relacionados e criar recomendações.

Parâmetros do componente

Nome Tipo Intervalo Opcional Padrão Descrição
Coluna(s) de destino Seleção de coluna Obrigatório StringFeature Nome ou índice da coluna de destino.
Número de tópicos a serem modelados Integer [1;1000] Obrigatório 5 Modele a distribuição de documentos em relação a N tópicos.
N-grams Integer [1;10] Obrigatório 2 Ordem de N-grams gerados durante o hashing.
Normalizar Boolean Verdadeiro ou Falso Obrigatório true Normalize a saída para probabilidades. O conjunto de dados transformado será P(topic|document) e a matriz do tópico do recurso será P(word|topic).
Mostrar todas as opções Boolean Verdadeiro ou Falso Obrigatório Falso Apresenta parâmetros adicionais específicos à LDA online da scikit-learn.
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 Distribuição prévia do tópico do documento.
Número estimado de documentos Integer [1;int.MaxValue] Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada 1000 Número estimado de documentos. Corresponde ao parâmetro total_samples.
O tamanho do lote Integer [1;1024] Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada 32 O tamanho do lote.
Valor inicial da iteração usada no agendamento da atualização da taxa de aprendizagem Integer [0;int.MaxValue] 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 as iterações iniciais. Corresponde ao parâmetro learning_offset.
Energia 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 Energia aplicada à contagem de iteração para controlar a taxa de aprendizagem. Corresponde ao parâmetro learning_decay.
Número de iterações de treinamento Integer [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.
Criar dicionário de n-grams Boolean Verdadeiro ou Falso Aplica-se quando a caixa de seleção Mostrar todas as opçõesnão está marcada Verdadeiro Cria um dicionário de n-grams antes de computar a LDA. Útil para inspeção e interpretação de modelo.
Tamanho máximo do dicionário de n-grams Integer [1;int.MaxValue] Aplica-se quando a opção Criar dicionário de n-grams é Verdadeiro 20000 Tamanho máximo do dicionário de n-grams. Se o número de tokens na entrada exceder esse tamanho, poderão ocorrer colisões.
Número de bits a serem usados para o hashing de recurso. Integer [1;31] Aplica-se quando a caixa de seleção Mostrar todas as opçõesnão está marcada e Criar dicionário de n-grams é Falso 12 Número de bits a serem usados para o hashing de recurso.
Criar dicionário de n-grams antes da LDA Boolean Verdadeiro ou Falso Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada Verdadeiro Cria um dicionário de n-grams antes da LDA. Útil para inspeção e interpretação de modelo.
Número máximo de n-grams no dicionário Integer [1;int.MaxValue] Aplica-se quando a caixa de seleção Mostrar todas as opções está marcada e a opção Criar dicionário de n-grams é Verdadeiro 20000 Tamanho máximo do dicionário. Se o número de tokens na entrada exceder esse tamanho, poderão ocorrer colisões.
Número de bits de hash Integer [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 n-grams é Falso 12 Número de bits a serem usados para o hashing de recurso.

Próximas etapas

Confira o conjunto de componentes disponíveis no Azure Machine Learning.

Para obter uma lista de erros específicos aos componentes, confira Exceções e códigos de erro para o designer.