Como Trending Topics são desenvolvidos?
O Bluesky, rede social sucessor do Twitter, liberou para o público geral a sua ferramenta de data streaming chamado "Firehose", onde ele disponibiliza, em tempo real, todas as informações enviadas pelos usuários utilizando o AT Protocol, contanto com informações como novos posts, likes, upload de imagens, vídeos, blocks, seguidores, etc.
O Protocolo AT é uma tentativa da Bluesky de descentralizar as redes sociais baseadas em mini-blogs criando um novo protocólo de rede onde todos possam usar, algo muito parecido como os e-mails funcionam atualmente, abrindo a possibilidade de qualquer um poder dessenvolver a sua própria rede social e dessas redes se comunicarem entre si. Você pode consultar a documentação dessa novo protocólo no site do ATProtocol, da Bluesky API ou no site do SKD do PYTHON mantido pela comunidade (que eu estou usando e recomendo).
Uma recente reclamação referente a essa rede social é a falta do Trending Topics, que já era famoso no X (antigo Twitter), que é uma lista dos assuntos mais comentados do momento.
Acompanhando de perto essa repercursão e vendo uma possibilidade interessante de aprender a como trabalhar com Big Data e explorar essa nova ferramenta, eu decidi descobrir o quão dificil é dessenvolver esse tipo de aplicação e, apesar de ter conseguido chegar a um resultado minimamente funcional, ela não ficou nem um pouco satisfatório.
A minha solução, a princípio, foi armazenar todos as mensagens em português recebidas do Firehose em uma fila e, de tempos em tempos, recuperar essa lista de strings, "limpar" as mensagens, filtrar as palavras e depois contar a frequência em que essas palavras aparecem, como vocês podem ver no fluxograma abaixo. E para isso eu acabei usando a classe Counter
do Python que faz esse trabalho muito bem.
graph TD
Firehose --> Queue --> Processing --> Bot
Apesar dele ter conseguindo identificar bem os assuntos mais comentados, como foi nos meus ultimos testes com as palavras "Twitter", "Bluesky", "Calor", "Namjoon" e vários outros, essa solução de contar as palavras acaba gastando muito recurso computacional e não conseguindo identificar outras palavras de N-grama como "Bom dia", "Felipe Neto" (exemplo) e "Sexta-feira 13", muito menos identificar o contexto em que essas palavras estão sendo utilizadas, que era comum no antigo Twitter.
Para contornar esses problemas eu venho tentando implementar alguns algoritmos de Processamento de Linguagem Natural (NLP) como o TF-IDF (Term Frequency - Inverse Document Frequency) e Keyphrase Extraction com a biblioteca YAKE do Python, mas sem sucesso, meu antigo algoritmo acabava me retornando um trending topics bem mais preciso.
Acho que muitos dos problemas que eu encontrei desenvolvendo essa aplicação foi por causa da minha inexperiência em trabalhar com Big Data e entender como esses algoritmos funcionam de verdade.
E é por isso que eu estou aqui, em busca de dicas, tutoriais, livros ou videos para entender te fato como um Trending Topics são desenvolvidos. Para quem puder compartilhar uma arquitetura, dicas ou ferramentas que possa me ajudar eu agradeço de coração.
E para quem esta curioso para saber como o código ficou, vocês podem dar uma olhada na minha página no GitHub. Mas já vou logo avisando: Está bem simplório. rsrs
Fonte: https://docs.bsky.app