Neste projeto será aplicado um modelo de deep learning para classificar se um texto é fake news ou não. Inicialmente será feito uma análise exploratória, em seguida será feito a modelagem com redes neurais artificiais (RNA).
O dataset foi retirado do kaggle que pode ser acessado aqui A partir disso, o tratamento dos dados seguiu a estutura medallion, no qual pode ser acessado aqui, no qual é dividido nas seguintes pastas:
- Bronze: Dataset original que foi extraido
- Prata: Tratamento inicial do dataset
- Ouro: Versão final que será utilizado para a modelagem ou para o dashboard
Se quiser mais informações sobre, clique aqui
Este trabalho do repositório é resultado de um trabalho, se quiser ler um resumo do tema leia o arquivo do notion aqui
O projeto seguiu o seguinte fluxograma que é como vai estar organizado nos tópicos, que será mostrado na imagem abaixo
Temos dois arquivos, um com as noticias verdadeiras e outras com as falsas, nas quais tem-se os seguintes atributos:
- title: Título da noticia
- texto: texto da noticias
- subject: Tópico do que se trata a noticia
- date: data de publicação
Para ser mais fácil a leitura, os vão ser lançado em tópicos e vai se atualizando de acordo com o vai sendo feito
Clique no tópico para acessar
- Análise Inicial
- Análise por Ano
- Análise de Cluster
- Titulo da Noticia
- Conteúdo da Noticia
Além de um pré-processamento feito anteriormente para a pasta prata que foi a remoção de stopwords e lematização, agora vai ser feita os seguintes tratamentos:
- selecionar as noticias dos anos de 2016 e 2017
pois eesse anos tem termos da época e é a maior parte das noticias
- inserindo a label nos dataframes
- juntar os dataframes
Pois veio em dois dataframes diferentes e tem que juntar para fazer a modelagem
- selecionar o campo titulo e label
Pois são apenas esses campos que vão ser utilizados na modelagem
A modelagem vai ser feito primeiro utilizando os modelo de machine learning e usando os modelos como baseline, em seguida será feita a modelagem de redes neurais, sendo aplicado uma rede neural do zero e outro a partir de uma rede neural já existente e retreina-lo
Clique aqui para saber mais
Foi construidio uma rede neural em que foi feito no seguinte esquema:
No qual se obteve as seguintes métricas
- Acuracia: 0.9460992813110352
- Precisão: 0.945361852645874
- Recall: 0.9439864158630371
- F1-score: 0.944673633598654
Foi construidio uma rede neural RNN em que foi feito no seguinte esquema:
No qual se teve as seguintes méricas
- Acuracia: 0.9522458910942078
- Precisão: 0.9503632187843323
- Recall: 0.951745867729187
- F1-score: 0.9510540407308745
Podemos ver que, comparando as métricas no que pode ser visto abaixo na tabela
Extra tree | MLP | RNN | |
---|---|---|---|
Acurácia | 0.9421985815602837 | 0.9460992813110352 | 0.9522458910942078 |
Precisão | 0.9464505035617784 | 0.945361852645874 | 0.9503632187843323 |
Recall | 0.9342870999030067 | 0.9439864158630371 | 0.951745867729187 |
F1-score | 0.9403294691885296 | 0.944673633598654 | 0.9510540407308745 |
As redes neurais teve um desempenho melhor, sobretudo as redes RNN, mas se comparado como o Extra tree classifier, dependo da situação, poderia mais preferência de um e do outro, por exemplo, se for levar em consideração os custos, o Extra tree seria considerado, pois não usa gpu para treinamento, entretanto, se quiser levar as métricas em consideração, poderia usar a rede neural RNN, que foi o melhor nas métricas, logo poderia haver certas mudanças para ver se o desempenho ser melhor,como:
- Usar o método embbeding para vetorizar o texto como word2vec
- Testar outros tipos de arquiteturas (CNN, ou testar outros tipos de RNN, que se mostrou melhor)
- Usar redes pré-treinadas como BERT e RoBerta (não consegui fazer isso neste projeto, pois não consegui fazer isso para esse projeto)
Então poderia fazer esses três caminhosde acordo com o modelo
- Se quiser não tem um custo muito alto de produto e não usar gpu, o Extra Tree deve ser levar em consideração
- No caso do uso da gpu, então o uso de uma rede neural RNN seria melhor já que teoricamente é a mais indicada para este tipo de problema
- Usar uma rede pré-treinada
Se quiser saber mais, esses seguintes tópicos pode ser interessante para se pesquisar
- Método do Cotovelo: acesse a página aqui
- Índice Callinski-Harasbazs: acesse a página aqui
- K-means: acesse a página aqui
- Redução de Dimensionaliddade: acesse a página aqui
- Métricas de classificação: acesse a página aqui
- Base onde fiz de base para cirar o modelo de rede neural: acesse a página aqui
- Rede neural RNN: acesse a página aqui
- TD-IDF vectoryzer: acesse a página aqui
- Sobre a camada embedding do keras/tensorflow: acesse a página aqui