>

>
>

Ankur Tomar

Follow

>

25 de novembro, 2018 – 9 min leia-se

Créditos: Christine Doig

Hi todos. Faz muito tempo que não escrevi meu último blog sobre os diferentes tipos de sistemas de recomendação. Desta vez, vou escrever sobre Topic Modelling.

Existem inúmeras fontes por aí onde você pode aprender o que é Topic Modelling, mas acho que a maioria delas são um pouco técnicas e requer um bom conhecimento de matemática e outras técnicas como Markov Chains. Neste artigo, vou tentar explicar a ideia por detrás da Modelação de Tópicos de uma forma muito intuitiva com um mínimo de matemática e tecnicidades. Vou escrever este artigo em duas partes. Na primeira parte, vou tentar explicar o que é modelagem temática e na segunda parte, vou fornecer um tutorial python de como fazer modelagem temática no conjunto de dados do mundo real.

Antes de começar, quero reconhecer que este artigo é fortemente inspirado pela palestra do meu professor de análise exploratória de dados. Edward McFowland, Coursera’s course on Natural Language Processing by Higher School of Economics and Jordan Boyd-Graber explanation of Gibbs sampling.

What is topic modeling?

Topic modeling is a branch of unsupervisioned natural language processing which is used to represent a text document with the help of several topics, that can best explain the underlying information in a particular document. Isto pode ser pensado em termos de clustering, mas com uma diferença. Agora, em vez de recursos numéricos, temos uma coleção de palavras que queremos agrupar de tal forma que cada grupo represente um tópico em um documento.

Por que precisamos de modelagem de tópicos?

Okay, então agora surge a questão: por que precisamos de modelagem de tópicos? Se olharmos à nossa volta, podemos ver uma enorme quantidade de dados textuais à nossa volta num formato não estruturado sob a forma de artigos noticiosos, artigos de pesquisa, posts nas redes sociais, etc. e precisamos de uma forma de compreender, organizar e rotular estes dados para tomar decisões informadas. A modelagem de tópicos é usada em várias aplicações como encontrar perguntas sobre o excesso de pilha que são semelhantes umas às outras, agregação e análise do fluxo de notícias, sistemas de recomendação, etc. Todos estes focam em encontrar a estrutura temática oculta no texto, pois acredita-se que cada texto que escrevemos seja um tweet, post ou um artigo de pesquisa é composto de temas como esportes, física, aeroespacial etc.

Como fazer modelagem de tópicos?

Currentemente, existem muitas maneiras de fazer modelagem de tópicos, mas neste post, estaremos discutindo uma abordagem de modelagem probabilística chamada Latent Dirichlet Allocation (LDA) desenvolvida pelo Prof. David M. Blei em 2003. Esta é uma extensão da Análise Semântica Latente Probabilística (PLSA) desenvolvida em 1999 por Thomas Hoffman com uma diferença muito pequena em termos de como eles tratam a distribuição por-documento. Então vamos saltar diretamente para como a LDA funciona.

Latent Dirichlet Allocation

Comecemos por entender o significado de cada palavra no título, pois acho que ela contém tudo o que precisamos saber para entender como a LDA funciona.

Latent: Isto refere-se a tudo o que não sabemos a priori e que está escondido nos dados. Aqui, os temas ou tópicos que compõem o documento são desconhecidos, mas acredita-se que estejam presentes à medida que o texto é gerado com base nesses tópicos.

Dirichlet: É uma ‘distribuição de distribuições’. Sim, você o leu corretamente. Mas o que isso significa? Vamos pensar nisto com a ajuda de um exemplo. Vamos supor que existe uma máquina que produz dados e podemos controlar se a máquina sempre produzirá um dado com o mesmo peso para todos os lados, ou se haverá algum viés para alguns lados. Portanto, a máquina que produz os dados é uma distribuição, pois está produzindo dados de diferentes tipos. Além disso, sabemos que os dados em si são uma distribuição, pois obtemos múltiplos valores quando lançamos um dado. Isto é o que significa ser uma distribuição de distribuições e isto é o que é o Dirichlet. Aqui, no contexto da modelagem de tópicos, o Dirichlet é a distribuição de tópicos em documentos e distribuição de palavras no tópico. Pode não estar muito claro neste ponto de tempo, mas está bem, já que vamos olhar para ele com mais detalhes daqui a pouco.

Allocation: Isto significa que assim que tivermos o Dirichlet, iremos alocar tópicos aos documentos e palavras do documento aos tópicos.

É isso. Isto é o que a LDA é em poucas palavras. Agora vamos entender como isso funciona na modelagem de tópicos.

Apenas para recapitular, o que a LDA diz é que cada palavra em cada documento vem de um tópico e o tópico é selecionado a partir de uma distribuição por-documento sobre tópicos. Então temos duas matrizes:

1. ϴtd = P(t|d) que é a distribuição de probabilidade de tópicos em documentos

2. Фwt = P(w|t) que é a distribuição de probabilidade de palavras em tópicos

E, podemos dizer que a probabilidade de uma palavra em um documento i.e. P(w|d) é igual a:

onde T é o número total de tópicos. Além disso, vamos assumir que há W número de palavras em nosso vocabulário para todos os documentos.

Se assumirmos a independência condicional, podemos dizer que

P(w|t,d) = P(w|t)

E portanto P(w|d) é igual a:

>

>

é o produto de pontos de ϴtd e Фwt para cada tópico t.

Isso pode ser representado na forma de uma matriz como esta:

>

Crédito: Higher School of Economics

Então, olhando para isto podemos pensar em LDA semelhante à factorização matricial ou SVD, onde decompomos a matriz de distribuição de probabilidade de palavra em documento em duas matrizes que consistem na distribuição de tópico em um documento e distribuição de palavras em um tópico.

Por isso, o que vamos obter é, por exemplo, isto:

Crédito: David M. Blei

E para ligar ao nosso exemplo de dados, podemos dizer que cada palavra na distribuição de palavras em um tópico é similar a um lado dos dados, e temos o parâmetro Dirichlet para controlar se todas as palavras têm a mesma probabilidade em um tópico ou se esse tópico terá um viés extremo em relação a algumas palavras. A mesma intuição é para distribuição de tópicos em um documento.

Bom. Agora vem a parte importante. Como aprendemos os pesos destas duas matrizes?

Para começar, vamos atribuir pesos aleatórios a ambas as matrizes e assumir que os nossos dados são gerados de acordo com os seguintes passos:

1. Escolha aleatoriamente um tópico a partir da distribuição de tópicos em um documento com base nas suas ponderações atribuídas. No exemplo anterior, digamos que escolhemos tópico rosa

2. Em seguida, baseado na distribuição de palavras para o tópico escolhido, selecione uma palavra ao acaso e coloque-a no documento

3. Repita este passo para todo o documento

Neste processo, se o nosso palpite de pesos estiver errado, então os dados reais que observamos serão muito improváveis sob o nosso suposto processo de geração de pesos e dados. Por exemplo, digamos que temos o documento D1 que consiste no seguinte texto:

“Qualcomm® Adreno™ 630 Visual Processing Subsystem featuring room-scale 6DoF with SLAM, Adreno Foveation”

e digamos que atribuímos pesos altos ao tópico T1 que tem pesos altos para palavras como Colher, Placas, Cebolas, etc. então veremos que, dada a nossa suposição de como os dados são gerados, é muito improvável que T1 pertença a D1 ou que estas palavras pertençam a T1. Portanto, o que estamos a fazer é tentar maximizar a probabilidade dos nossos dados dadas estas duas matrizes.

Para identificar os pesos correctos, vamos usar um algoritmo chamado Gibbs sampling. Vamos agora entender o que é a amostragem de Gibbs e como ela funciona no LDA.

Gibbs Sampling

Gibbs sampling é um algoritmo para amostragem sucessiva de distribuições condicionais de variáveis, cuja distribuição sobre estados converge para a distribuição verdadeira a longo prazo. Este é um conceito um tanto abstrato e precisa de um bom entendimento das cadeias de Monte Carlo Markov e do teorema de Bayes. Estes conceitos e a matemática por trás deles é bastante complexa e está fora do escopo deste blog. Aqui, vou tentar dar uma intuição sobre como Gibbs Sampling trabalha para identificar tópicos nos documentos.

Como mencionei anteriormente, para começar, vamos assumir que conhecemos as matrizes ϴ e Ф. Agora o que vamos fazer é mudar lentamente estas matrizes e chegar a uma resposta que maximize a probabilidade dos dados que temos. Faremos isso com base palavra por palavra, alterando a atribuição de tópico de uma palavra. Assumiremos que não sabemos a atribuição de tópico da palavra dada, mas sabemos a atribuição de todas as outras palavras no texto e tentaremos inferir que tópico será atribuído a esta palavra.

Se olharmos para isto de forma matemática, o que estamos a fazer é tentar encontrar uma distribuição condicional de probabilidade da atribuição de tópico de uma única palavra condicionada ao resto das atribuições de tópico. Ignorando todos os cálculos matemáticos, o que vamos obter é uma equação de probabilidade condicional que se parece com isto para uma única palavra w no documento d que pertence ao tópico k:

>

Crédito: Jordan Boyd-Graber

where:

n(d,k): Número de vezes que o documento d usa o tópico k

v(k,w): Número de vezes que o tópico k usa a palavra dada

αk: Parâmetro Dirichlet para distribuição de documento para tópico

λw: Parâmetro Dirichlet para distribuição de tópico para palavra

>Existem duas partes duas desta equação. A primeira parte nos diz o quanto cada tópico está presente em um documento e a segunda parte nos diz o quanto cada tópico gosta de uma palavra. Note que para cada palavra, vamos obter um vetor de probabilidades que vai explicar o quanto esta palavra pertence a cada um dos tópicos. Na equação acima, pode-se ver que os parâmetros de Dirichlet também atuam como parâmetros de suavização quando n(d,k) ou v(k,w) é zero, o que significa que ainda haverá alguma chance de a palavra escolher um tópico que vá adiante.

Vejamos um exemplo agora:

Para começar, suponha que tenhamos um documento com alguma atribuição aleatória de tópico de palavras, por exemplo, como mostrado abaixo:

>

Temos também a nossa matriz de contagem v(k,w) como se mostra abaixo:

>

>

Agora vamos mudar a atribuição de mundo de palavras no documento.

  • Primeiro, vamos reduzir a contagem do mundo no tópico 1 de 28 para 27, pois não sabemos a que tópico o mundo pertence.
  • Segundo vamos representar a matriz n(d,k) da seguinte forma para mostrar o quanto um documento usa cada tópico

– Terceiro, vamos representar v(k,w) da seguinte forma para mostrar quantas vezes cada tópico é atribuído a esta palavra

>

>>

  • Fourth, multiplicaremos essas duas matrizes para obter nossas probabilidades condicionais

  • Finalmente, escolheremos aleatoriamente qualquer um dos tópicos e designaremos esse tópico para o mundo e repetiremos esses passos para todas as outras palavras também. Intuitivamente, o tópico com maior probabilidade condicional deve ser selecionado, mas como podemos ver, outros tópicos também têm alguma chance de serem selecionados

É isso aí. Isto é o que o algoritmo de amostragem de Gibbs está a fazer debaixo do capô. Embora tenhamos saltado alguns detalhes como o ajuste do hiperparâmetro, mas de uma perspectiva de intuição, é assim que a amostragem de Gibbs funciona para a modelagem de tópicos.

Então, é isto para a teoria da alocação de Dirichlet Latente. Espero que isto tenha sido útil para entender o que é modelagem de tópicos e como usamos LDA com Gibbs para a modelagem de tópicos. No próximo artigo, vou postar a implementação do LDA usando Python.

Obrigado!

admin

Deixe uma resposta

O seu endereço de email não será publicado.

lg