# Analyse-Daten:
data("germeval_train", package = "pradadata")
data("germeval_test", package = "pradadata")
# Sentiment-Daten
data("sentiws", package = "pradadata")germeval-senti01
tidymodels
textmining
prediction
sentiment
germeval
string
Aufgabe
Führen Sie eine Sentiment-Analyse als Teils eines Tidymodels-Rezept durch. Modellieren Sie dann mit einem einfachen linearen Modell die abhängige Variable.
Verwenden Sie diesen Datensatz:
Die AV ist c1.
Hinweise:
- Orientieren Sie sich im Übrigen an den allgemeinen Hinweisen des Datenwerks.
Lösung
Setup
library(tidyverse)
library(syuzhet) # get_sentiment
library(tidymodels)
library(tictoc)Daten
c2 brauchen wir hier nicht:
d_train <-
germeval_train |>
select(-c2) |>
as_tibble()Rezept
Rezept definieren:
rec <-
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_emo = get_sentiment(text, # aus `syuzhet`
method = "custom",
lexicon = sentiws)) |>
step_rm(text) # Datensatz verschlankenstep_mutate ergänzt für die erzeugte (mutierte) Variable automatisch eine Rolle im Rezept, nimmt sie also als Prädiktor auf.
Mal schauen:
rectidy(rec)Preppen und backen:
tic()
rec_prepped <- prep(rec)
toc()rec_preppedrec_baked <- bake(rec_prepped, new_data = NULL)
head(rec_baked)Model
mod <-
logistic_reg()Workflow
wf <- workflow() |>
add_recipe(rec) |>
add_model(mod)Fit
tic()
fit1 <-
fit(wf,
data = d_train)
toc()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))metrics(d_test,
truth = c1,
estimate = .pred_class)Baseline
Ein einfaches Referenzmodell ist, einfach die häufigste Kategorie vorherzusagen:
d_train |>
count(c1)Categories:
- tidymodels
- textmining
- prediction
- sentimentanalysis
- germeval
- string