5.4 Um corpus da BBC

Vamos analisar um corpus de documentos com notícias da BBC (http://mlg.ucd.ie/datasets/bbc.htm). Os documentos foram pré-classificados pela BBC por assunto (tópico). Para examinar o potencial de uma aprendizagem não supervisionada com estes dados, iremos “esquecer” os tópicos originais e tentar recuperá-los.

Dizemos que uma matriz é esparsa quando esta possui muitos elementos nulos; tenham estes elementos o valor \(0\), ou sejam apenas valores ausentes NA. Uma matriz esparsa é representada de maneira que tais valores nulos não sejam armazenados na memória.

O armazenamento dos documentos da BBC está estruturado em torno de uma matriz esparsa, no formato MatrixMarket, que conecta as listas de termos e documentos do corpus. Para ler esta matriz esparsa utilizamos a função readMM() da biblioteca Matrix.

A partir dessa matriz esparsa mtx, construímos a matriz documento-termo utilizando as funções da biblioteca tm.

Conforme discutido na seção anterior, cada linha da matriz dtm corresponde a um documento do corpus e cada coluna corresponde a um termo; e esta matriz armazena as frequências de ocorrências dos termos nos documentos. Podemos examinar a classe de dtm e seus atributos.

## [1] "DocumentTermMatrix"    "simple_triplet_matrix"
## $names
## [1] "i"        "j"        "v"        "nrow"     "ncol"     "dimnames"
## 
## $class
## [1] "DocumentTermMatrix"    "simple_triplet_matrix"
## 
## $weighting
## [1] "term frequency" "tf"

As dimensões de dtm quantificam o tamanho do corpus que estamos examinando: documentos e termos.

Não podemos inspecionar os valores da matriz dtm diretamente, devido à forma como esta matriz é armazenada. A biblioteca tm fornece as facilidades para acessarmos os elementos de dtm. Por exemplo, estes são os primeiros \(5\) documentos e as frequências de \(10\) de seus termos.

## <<DocumentTermMatrix (documents: 5, terms: 10)>>
## Non-/sparse entries: 19/31
## Sparsity           : 62%
## Maximal term length: 9
## Weighting          : term frequency (tf)
## Sample             :
##               Terms
## Docs           ad boost giant jump media profit quarterli sale time warner
##   business.001  1     2     1    1     1     10         1    5    3      4
##   business.002  0     1     0    0     0      0         0    0    2      0
##   business.003  0     0     1    0     0      0         0    4    0      0
##   business.004  0     0     0    0     0      4         1    1    0      0
##   business.005  0     0     1    0     0      0         0    0    1      0

Usando as conversões de tipos adequadas, podemos listar todos os termos de um documento, por exemplo, o documento business.007.

##  [1] 000        133        146        157        190        2001      
##  [7] 2004       52         ad         administr  albeit     amount    
## [13] analyst    boost      bush       celebr     chief      clearview 
## [19] condit     continu    creat      creation   decemb     depart    
## [25] deputi     dollar     econom     economi    economist  elect     
## [31] employ     end        environ    expand     expect     fall      
## [37] favour     fewer      figur      financi    fine       firm      
## [43] first      gain       get        given      got        group     
## [49] growth     herbert    interest   issu       januari    job       
## [55] kei        ken        labor      level      limit      low       
## [61] lowest     margin     market     mayland    mean       moder     
## [67] net        novemb     number     offic      opportun   pace      
## [73] payrol     posit      presid     presidenti produc     push      
## [79] rate       record     rel        result     revis      rick      
## [85] satisfi    septemb    slow       strong     suggest    term      
## [91] territori  three      unemploy   valu       worker     year

Observando a convenção utilizada para nomear os documentos, podemos extrair os tópicos correspondentes e calcular a quantidade de documentos existentes em cada tópico.

## document_topic
##      business entertainment      politics         sport          tech 
##           510           386           417           511           401

Explorando o corpus, podemos procurar, por exemplo, todos os termos que ocorrem mais do que \(1300\) vezes.

## [1] time  on    year  peopl game

Estes são os \(7\) termos com ocorrência mais frequente no corpus.

##      year     peopl        on      game      time     first    govern 
##      2830      2044      1838      1640      1487      1283      1246

Podemos representar graficamente as frequências de ocorrências dos termos nesse corpus da BBC por uma nuvem de palavras, lembrando que nessa nuvem o tamanho da fonte de cada termo é proporcional à sua frequência de ocorrência no corpus.

Note que as palavras desse corpus já foram submetidas ao processo de stemming. Por exemplo, as palavras company e companies foram reduzidas ao termo compani.

Para cada tópico, esses são os termos mais frequentes.

## business:
##      year   compani      firm    market      bank      sale 
##       884       627       557       539       459       414 
## entertainment:
##      film      year      best     music     award      star 
##       964       594       590       540       522       429 
## politics:
##    labour    govern     parti     elect     peopl     blair 
##       760       759       709       670       623       575 
## sport:
##      game      plai       win    player   england   against 
##       648       624       590       474       459       454 
## tech:
##     peopl      game technolog     mobil     phone        on 
##       960       875       631       595       540       519

Agora, suponha que “perdemos” a informação sobre os tópicos originais a que pertencem os documentos desse corpus da BBC.

Utilizando a biblioteca topicmodels, vamos treinar um modelo LDA com \(5\) tópicos.

Estes são os \(10\) termos com maior probabilidade de ocorrência em cada tópico formado pelo modelo LDA.

##       Topic 1 Topic 2 Topic 3   Topic 4 Topic 5
##  [1,] year    film    peopl     plai    govern 
##  [2,] compani year    game      game    labour 
##  [3,] market  best    servic    win     parti  
##  [4,] sale    show    technolog england elect  
##  [5,] firm    award   mobil     against peopl  
##  [6,] share   includ  phone     first   plan   
##  [7,] expect  on      on        back    minist 
##  [8,] bank    music   get       player  sai    
##  [9,] month   top     work      two     told   
## [10,] price   star    user      time    blair

Estes são os tópicos mais prováveis para os cinco primeiros documentos do corpus.

##      business.001 business.002 business.003 business.004 business.005
## [1,]            1            1            1            1            1
## [2,]            3            5            5            4            5
## [3,]            2            3            4            3            2

Note que para o modelo LDA os tópicos são apenas rótulos (Topic 1, Topic 2 etc), sem nenhum significado especial. No entanto, voltando as tópicos originais definidos pela BBC, conseguimos estabelecer uma correspondência entre os rótulos do modelo LDA e os tópicos reais.

##                True Topic
## Predicted Topic business entertainment politics sport tech
##   business           475             4        9     2    7
##   entertainment        3           363        5     2   12
##   politics            24            14      400     1    9
##   sport                0             0        2   506    3
##   tech                 8             5        1     0  370

Desse modo, conseguimos responder a questão crucial: quantos documentos foram alocados corretamente nos tópicos originais? O percentual de alocação correta é impressionante.

## [1] "Correct alocation: 95.01%\n"

Em qualquer análise de clusters, determinar o número adequado de clusters é sempre uma questão delicada. Em geral, é necessário examinar os clusters obtidos para decidir se o número é adequado.

Em certos problemas, o número de clusters é definido por questões de natureza prática: por exemplo, o número de especialistas que irão analisar os documentos dos clusters criados.

Uma técnica comum que ampara a decisão sobre o número de cluster é treinar vários modelos LDA com números de tópicos distintos e procurar um “cotovelo” na curva definida pelas log-verossimilhanças dos modelos LDA treinados.

No gráfico acima, parece razoável encontrar o “cotovelo” por volta de \(5\) ou \(6\) tópicos.

Finalizamos com a observação de que o Modelo de Tópicos também é utilizado quando os tokens não correspondem a palavras de uma linguagem natural. Por exemplo, há aplicações do Modelo de Tópicos em Genética, na identificação de clusters de genes que são marcadores de alterações fisiológicas.