Bom dia e bem-vindos e bem-vindas ao episódio de número 2066 do Spin de Notícias em forma te texto. Aqui é o Marcel Ribeiro-Dantas, falando de Natal, e hoje iremos falar sobre inteligência artificial e classificação de textos.

A classificação de texto é uma das tarefas mais básicas em processamento de linguagem natural (NLP), que melhorou substancialmente com o desenvolvimento das redes neurais artificiais, principalmente das redes neurais profundas. No entanto, as redes neurais são conhecidas por serem data-hungry, o que significa que requerem uma grande quantidade de dados de treinamento, cujo grau aumenta com o número de parâmetros.

As redes neurais profundas têm como característica justamente uma maior profundidade nas camadas escondidas, que costumam representar uma boa parte dos parâmetros de uma rede neural. Além disso, hiperparâmetros, variáveis que descrevem a estrutura da rede, como o número de unidades escondidas, devem ser cuidadosamente ajustados para diferentes conjuntos de dados e o pré-processamento de dados de texto (por exemplo, tokenização, remoção de palavras de parada, etc) precisa ser adaptado para o modelo específico e conjunto de dados.

Apesar da capacidade das redes neurais profundas de capturar correlações latentes e reconhecer padrões implícitos, elas podem ser um exagero para tarefas simples, como classificação de textos e tarefas mais leves. Nesses casos, as alternativas geralmente são boas o suficiente.

Imagine que você tenha um número de documentos e gostaria de adicionar rótulos a cada um deles: literatura infantil, ficção, matemática básica, autor estrangeiro, autoajuda, etc. Será que precisamos de redes neurais profundas complexas com milhões de parâmetros, custando uma fortuna para serem treinadas? 🤔

Em 2021, em um post de blog, o Max Halford decidiu brincar um pouco com essa reflexão. Ao ler o Artificial Intelligence: A Modern Approach, famoso livro da área de Inteligência Artificial, ele topou com uma ideia meio maluca: classificar textos utilizando… Adivinha! Algoritmos de compressão.

Lembra do WinRAR ou WinZIP que você usava para diminuir o tamanho de arquivos e enviar por e-mail? Esses programas tem um algoritmo que consegue manter a informação, em algum grau, em uma versão que ocupa menos espaço em disco. Não é muito diferente de algoritmos de compressão encontrados em formatos de arquivos de imagens digitais como PNG e JPEG.

Esses algoritmos de compressão podem ser com perdas ou sem perdas. Nos algoritmos com perdas, a diminuição em espaço de armazenamento ocorre ao custo de se perder parte da informação que, em muitos casos, não é perceptível ao olho humano. Uma imagem com menos detalhes, mas que nossos olhos não conseguem perceber, por exemplo. Os sem perda conseguem reduzir em algum grau o tamanho do arquivo, e ainda assim retornar a informação original quando descomprimido.

Bem, não é novidade que algoritmos de compressão comprimam arquivos. O que deve ser novidade para você é que algoritmos de compressão possam ser utilizados para classificar textos 🤯

De acordo com essa subseção do livro, os autores sugerem que algoritmos de compressão na verdade criam modelos de linguagem. Ou seja, um algoritmo de compressão, quando aplicado a um conjunto de dados, adquire um modelo que, em algum grau, contém conhecimento sobre a distribuição dos dados (tokens, palavras) dos textos comprimidos. E, por isso, pode ser utilizado para classificar textos.

Como isso seria feito? Se você conhece aprendizado de máquina supervisionado, sabe que nesse caso teríamos um passo de treinamento, com rótulos, e um passo de classificação.

No primeiro passo, nós teríamos vários textos já rotulados, ou seja, que já sabemos sua classificação. Nesse primeiro momento, concatenaríamos todos os textos com rótulo A (ficção, por exemplo) e os comprimiríamos, gerando um arquivo comprimido.

E aqui entra a parte interessante: o tamanho desse arquivo comprimido final pode funcionar como uma chave, uma espécie de CPF, para identificar textos com esse rótulo. Se eu quisesse classificar um novo texto aleatório, eu poderia concatená-lo aos textos do rótulo A, comprimir novamente, e ver se houve mudança no tamanho do arquivo final. E ao fazer isso para todos os grupos de textos com rótulo, eu iria encontrar quais os rótulos dos agrupamentos que tiveram menor variação no tamanho do arquivo comprimido.

A ideia aqui é que textos muito parecidos permitirão ao algoritmo de compressão se aproveitar dessa similaridade para usar menos espaço em disco para representar esses textos. Um texto com muitas palavras que não existem nos anteriores, faria o algoritmo de compressão performar de maneira menos eficiente, o que geraria um aumento claro no tamanho do arquivo comprimido, sugerindo que esse texto pertence a uma outra classe.

É evidente que não há um passe de mágica aqui: nem sempre isso irá funcionar. Nos testes do Max Halford (você pode encontrar todos os códigos e resultados aqui) ele conseguiu um F1-Score, que é uma média harmônica entre precisão e revocação, de mais de 80% em algumas categorias de texto. Ainda assim, existem outros algoritmos simples como Naïve Bayes que conseguiriam resultados melhores.

Esse experimento do Halford em 2021 não era nada de novo, afinal, o próprio livro já brincava que isso era possível, e o Huffman Coding, técnica chave nos algoritmos de compressão, é da década de 50. O impressionante é o que foi alcançado há poucos dias por pesquisadores da Universidade de Waterloo.

Uutilizando algoritmos de compressão, o famoso gzip, em um script em Python de 14 linhas (14 linhas!!!! 😱), eles conseguiram classificar textos melhor do que grandes modelos de linguagem (Large Language Models, no inglês) de centenas de milhões de parâmetros. Não apenas isso, mas tiveram também melhor desempenho para classificar textos muito diferentes dos utilizados para treinamento do modelo.

Clicando aqui você pode ter acesso a um vídeo apresentando de forma mais técnica e detalhada como o algoritmo Gzip funciona, já que entrar em detalhes sobre ele aqui fugiria do escopo desse texto.

Outro detalhe bastante interessante é que por ser livre de parâmetros, é possível treinar o modelo com o algoritmo de compressão usando unidades de processamento normal, diferente das redes neurais que utilizam GPU, e um gasto energético muito maior, com impacto negativo ao meio ambiente. Chega a ser hilário como algo várias ordens de grandeza mais simples oferece tantas vantagens, substanciais, mas é evidente que classificação de texto é uma tarefa relativamente simples quando comparada a outras tarefas que esses grandes modelos de linguagem são capazes de fazer.

Talvez a principal lição dessa saga é que existem diversos problemas que podem ser resolvidos, às vezes até melhor, mais rápido e mais barato, com algoritmos simples e antigos, em vez de algoritmos complexos, super modernos, e que precisam de uma infraestrutura gigante para treiná-los.