library(tidyverse)
data("germeval_train", package = "pradadata")
data("germeval_test", package = "pradadata")
germeval03-sent-wordvec-xgb
Aufgabe
Erstellen Sie ein prädiktives Modell für Textdaten. Nutzen Sie Sentiments und TextFeatures im Rahmen von Feature-Engineering. Nutzen Sie außerdem deutsche Word-Vektoren für das Feature-Engineering.
Als Lernalgorithmus verwenden Sie XGB.
Verwenden 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
sentiws
Lexikon. - ❗ Achten Sie darauf, die Variable
c2
zu entfernen bzw. nicht zu verwenden.
Lösung
<-
d_train |>
germeval_train select(id, c1, text)
library(tictoc)
library(tidymodels)
library(syuzhet)
library(beepr)
library(lobstr) # object size
data("sentiws", package = "pradadata")
Eine Vorlage für ein Tidymodels-Pipeline findet sich hier.
Learner/Modell
<-
mod boost_tree(mode = "classification",
learn_rate = .01,
tree_depth = 5
)
Rezept
Pfad zu den Wordvecktoren:
<- "/Users/sebastiansaueruser/datasets/word-embeddings/wikipedia2vec/part-0.arrow" path_wordvec
source("https://raw.githubusercontent.com/sebastiansauer/Datenwerk2/main/funs/def_recipe_wordvec_senti.R")
<- def_recipe_wordvec_senti(data_train = d_train,
rec path_wordvec = path_wordvec)
Workflow
source("https://raw.githubusercontent.com/sebastiansauer/Datenwerk2/main/funs/def_df.R")
<- def_wf()
wf
wf
Check
tic()
<- prep(rec)
rec_prepped toc()
rec_prepped
obj_size(rec_prepped)
Groß!
tidy(rec_prepped)
<- bake(rec_prepped, new_data = NULL)
d_rec_baked
head(d_rec_baked)
sum(is.na(d_rec_baked))
obj_size(d_rec_baked)
Fit
tic()
<-
fit_wordvec_senti_xgb fit(wf,
data = d_train)
toc()
beep()
fit_wordvec_senti_xgb
Objekt-Größe:
::obj_size(fit_wordvec_senti_xgb) lobstr
Groß!
Wie wir gesehen haben, ist das Rezept riesig.
library(butcher)
<- butcher(fit_wordvec_senti_xgb)
out ::obj_size(out) lobstr
Test-Set-Güte
Vorhersagen im Test-Set:
tic()
<-
preds predict(fit_wordvec_senti_xgb, 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))
<- metric_set(accuracy, f_meas)
my_metrics my_metrics(d_test,
truth = c1,
estimate = .pred_class)