germeval09-tfidf

textmining
datawrangling
germeval
prediction
tidymodels
string
Published

November 16, 2023

Aufgabe

Erstellen Sie ein prädiktives Modell für Textdaten, nutzen Sie einen Entscheidungsbaum als Modell. Erstellen Sie pro Wort tfIDF-Kennwerte im Rahmen von Feature-Engineering.

Nutzen Sie die GermEval-2018-Daten.

Die Daten sind unter CC-BY-4.0 lizensiert. Author: Wiegand, Michael (Spoken Language Systems, Saarland University (2010-2018), Leibniz Institute for the German Language (since 2019)),

Die Daten sind auch über das R-Paket PradaData zu beziehen.

library(tidyverse)
data("germeval_train", package = "pradadata")
data("germeval_test", package = "pradadata")

Die AV lautet c1. Die (einzige) UV lautet: text.

Hinweise:











Lösung

d_train <-
  germeval_train |> 
  select(id, c1, text)
library(tictoc)
library(tidymodels)
library(tidytext)
library(beepr)
library(textrecipes)  # step_tokenfilter, step_tokenize

Eine Vorlage für ein Tidymodels-Pipeline findet sich hier.

Workflow

# model:
mod1 <-
  decision_tree(mode = "classification")

# recipe:
rec1 <-
  recipe(c1 ~ ., data = d_train) |> 
  update_role(id, new_role = "id")  |> 
  step_tokenize(text) %>%
  step_tokenfilter(text, max_tokens = 1e3) %>%
  step_tfidf(text) %>%
  step_zv(all_predictors()) %>%
  step_normalize(all_numeric_predictors())

# workflow:
wf1 <-
  workflow() %>% 
  add_model(mod1) %>% 
  add_recipe(rec1)

Fit

Ohne Tuning:

tic()
fit1 <-
  fit(wf1,
      data = d_train)
toc()
#beep()
fit1

Test-Set-Güte

Vorhersagen im Test-Set:

tic()
preds <-
  predict(fit1, new_data = germeval_test)
toc()

Und die Vorhersagen zum Test-Set hinzufügen, damit man TRUTH und ESTIMATE vergleichen kann:

d_test <-
  germeval_test |> 
  bind_cols(preds) |> 
  mutate(c1 = as.factor(c1))
my_metrics <- metric_set(accuracy, f_meas)
my_metrics(d_test,
           truth = c1,
           estimate = .pred_class)

Prep/Bake

Als Check: Das gepreppte/bebackene Rezept:

tic()
rec1_prepped <- prep(rec1)
toc()
tic()
d_train_baked <- bake(rec1_prepped, new_data = NULL)
toc()

Sehr viele Spalten

Das Problem ist, dass dieses Rezept sehr viele Spalten erzeugt. Das ist (sehr) rechen- und speicherintensiv.

dim(d_train_baked)
d_train_baked |> 
  head()

Categories:

  • textmining
  • datawrangling
  • germeval
  • prediction
  • tidymodels
  • string