Exercícios 5

Aula 5

1) Workflow

Para esse exercício, será necessário carregar uma base de discursos presidenciais feitos por Dilma Rousseff e Michel Temer em parte de seus mandatos:

link <- "https://github.com/FLS-6497/datasets/raw/main/aula5/discursos_presidenciais.csv"
discursos <- readr::read_csv2(link)
import pandas as pd

link = 'https://github.com/FLS-6497/datasets/raw/main/aula5/discursos_presidenciais.csv'
discursos = pd.read_csv(link, sep=';')

Também precisaremos fazer pré-processamento dos textos:

library(mlr3verse)
library(quanteda)

# 1) Criar um corpus
corpus_disc <- corpus(discursos, docid_field = "id", text_field = "discurso")


# 2) Tokenizacao
tks_disc <- corpus_disc %>%
  tokens(remove_punct = TRUE, remove_numbers = TRUE) %>%
  tokens_tolower()


# 3) Matriz bag-of-words
tks_dfm <- dfm(tks_disc) %>%
  dfm_trim(min_docfreq = 5)
  

# 4) Transforma em tibble e inclui o target
dados <- as.matrix(tks_dfm) %>%
  as_tibble() %>%
  janitor::clean_names()

dados$y <- discursos$presidente
from sklearn.feature_extraction.text import CountVectorizer

vct = CountVectorizer()
X = vct.fit_transform(discursos.discurso)

a) Pré-processamento

Usando ferramentas de processamento de texto, implemente uma pequena pipeline para limpar dados e, quando estiver satisfeito com ela, crie uma função que aplique ela em uma nova lista textos.

b) Modelo

Usando os frameworks de aprendizado de máquina, use a bag of words criada anteriormente para treinar algum modelo de classificação para predizer o nome do ou da presidente que proferiu cada discurso na amostra de teste.

c) Validação

Roda o item pedido em b) 100 vezes e salve os resultados de alguma métrica de validação.

c) Validação II

Repita o exercício c), dessa vez usando a variável planalto, que indica se um discurso foi proferido no Palácio do Planalto, como target.

2) Evitando data leaks

Como vimos, pré-processamento deve ser aplicado antes de fazermos split sample de validação (i.e., criar amostras de teste e de treino). Agora, implemente um workflow que leva isso em conta. Para tanto, você deverá criar uma função que separe textos em treino e teste, que aplique pré-processamento apenas na amostra de treino e que, depois, replique ele na amostra de teste para, então, rodar um algoritmo e calcular alguma métrica de validação.

3) Benchmark

Usando as ferramentas que vimos, experimente com os seguintes pré-processamentos:

    1. Usando apenas palavras maiores do que 4 caracteres;
    1. Removendo palavras que não ocorrem em, pelo menos, 10 documentos;
    1. Removendo palavras que não ocorrem em, pelo menos, 10% dos documentos;
    1. Usando TF-IDF para normalizar os elementos da matriz bag of words;