PACOTES

Carregar Bibliotecas

library(torch) library(transformers) library(dplyr) library(tibble)

Preparação do Conjunto de Dados


dados <- tibble(
  texto = c(
    "Meu pai queria que eu ganhasse muito dinheiro",  # Racional com relação a fins
    "Sempre fiz isso porque minha família faz há gerações",  # Tradicional
    "Luto pelo que acredito, não importa o preço",  # Racional com relação a valores
    "Eu sigo meu coração, não importa o que digam"  # Afetiva
  ),
  categoria = c("racional com relação a fins", "tradicional", "racional com relação a valores", "afetiva")
)

# Converter rótulos para números
categorias <- unique(dados$categoria)
dados$categoria_id <- as.integer(factor(dados$categoria, levels = categorias))

Carregando um Modelo Transformer Pré-Treinado


modelo <- hf_load_model("distilbert-base-uncased")
tokenizer <- hf_load_tokenizer("distilbert-base-uncased")

#Tokenização dos Dados


tokens <- tokenizer(dados$texto, padding = TRUE, truncation = TRUE, return_tensors = "pt")

Definição da Função de Treinamento


treinar_modelo <- function(modelo, tokens, labels, epochs = 3) {
  optimizer <- optim_adamw(modelo$parameters(), lr = 5e-5)
  loss_fn <- nn_cross_entropy_loss()

  for (epoch in 1:epochs) {
    optimizer$zero_grad()
    
    # Forward pass
    outputs <- modelo(tokens$input_ids)
    loss <- loss_fn(outputs$logits, labels)
    
    # Backward pass
    loss$backward()
    optimizer$step()
    
    cat("Época", epoch, "- Loss:", loss$item(), "\n")
  }
}

# Executar treinamento
labels <- torch_tensor(dados$categoria_id, dtype = torch_long())
treinar_modelo(modelo, tokens, labels)

#Fazendo Previsões

prever_categoria <- function(texto) {
  tokens <- tokenizer(texto, return_tensors = "pt", padding = TRUE, truncation = TRUE)
  output <- modelo(tokens$input_ids)
  predicted_id <- output$logits$argmax(dim = 2)$item() + 1
  return(categorias[predicted_id])
}

# Testando o modelo
frase_teste <- "Faço isso porque meus pais ensinaram assim"
prever_categoria(frase_teste)