library(tidyverse)
data("germeval_train", package = "pradadata")
data("germeval_test", package = "pradadata")germeval08-schimpf
Aufgabe
Erstellen Sie ein prädiktives Modell für Textdaten. Nutzen Sie Schimpfwörter 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.
Die AV lautet c1. Die (einzige) UV lautet: text.
Hinweise:
- Orientieren Sie sich im Übrigen an den allgemeinen Hinweisen des Datenwerks.
- Nutzen Sie Tidymodels.
- Nutzen Sie das
sentiwsLexikon.
Lösung
d_train <-
germeval_train |>
select(id, c1, text)library(tictoc)
library(tidymodels)
library(tidytext)
library(syuzhet)
library(beepr)
data("schimpfwoerter", package = "pradadata")Um ein Wörterbuch zu erzeugen für syuzhet braucht es eine Spalte value:
schimpfwoerter$value <- 1Eine Vorlage für ein Tidymodels-Pipeline findet sich hier.
Workflow
# model:
mod1 <-
rand_forest(mode = "classification")
# recipe:
rec1 <-
recipe(c1 ~ ., data = d_train) |>
update_role(id, new_role = "id") |>
#update_role(c2, new_role = "ignore") |>
update_role(text, new_role = "ignore") |>
step_mutate(n_schimpf = get_sentiment(text, # aus `syuzhet`
method = "custom",
lexicon = schimpfwoerter)) |>
step_rm(text) # Datensatz verschlanken
# workflow:
wf1 <-
workflow() %>%
add_model(mod1) %>%
add_recipe(rec1)Fit
Ohne Tuning:
tic()
fit1 <-
fit(wf1,
data = d_train)
toc()
#beep()fit1Test-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)Als Check: Das gepreppte/bebackene Rezept:
tic()
rec1_prepped <- prep(rec1)
toc()tic()
d_train_baked <- bake(rec1_prepped, new_data = NULL)
toc()d_train_baked |>
arrange(-n_schimpf) |>
head()d_train |>
filter(id == 707) |>
pull(text)d_train |>
filter(id == 707) |>
select(text) |>
unnest_tokens(output = word, input = text) |>
inner_join(schimpfwoerter)d_train |>
filter(id == 4493) |>
pull(text)d_train |>
filter(id == 4493) |>
select(text) |>
unnest_tokens(output = word, input = text) |>
inner_join(schimpfwoerter)Categories:
- 2023
- textmining
- datawrangling
- germeval
- prediction
- tidymodels
- string