library(tidyverse)
data("germeval_train", package = "pradadata")
data("germeval_test", package = "pradadata")
germeval10-wordvec-rf
Aufgabe
Erstellen Sie ein prädiktives Modell für Textdaten. Nutzen Sie deutsche Word-Vektoren für das 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 Wikipedia2Vec als Grundlage für die Wordembeddings in deutscher Sprache. Laden Sie die Daten herunter (Achtung: ca. 2.8 GB).
Lösung
<-
d_train |>
germeval_train select(id, c1, text)
library(tictoc)
library(tidymodels)
library(syuzhet)
library(beepr)
library(textrecipes)
Eine Vorlage für ein Tidymodels-Pipeline findet sich hier.
Deutsche Textvektoren importieren
tic()
<- arrow::read_feather(
wiki_de_embeds file = "/Users/sebastiansaueruser/datasets/word-embeddings/wikipedia2vec/part-0.arrow")
toc()
names(wiki_de_embeds)[1] <- "word"
<- as_tibble(wiki_de_embeds) wiki
Workflow
# model:
<-
mod1 rand_forest(mode = "classification",
mtry = tune())
# recipe:
<-
rec1 recipe(c1 ~ ., data = d_train) |>
update_role(id, new_role = "id") |>
#update_role(c2, new_role = "ignore") |>
step_tokenize(text) %>%
step_stopwords(text, language = "de", stopword_source = "snowball") |>
step_word_embeddings(text,
embeddings = wiki,
aggregation = "mean")
# workflow:
<-
wf1 workflow() %>%
add_model(mod1) %>%
add_recipe(rec1)
Preppen/Baken
tic()
<- prep(rec1)
rec1_prepped toc()
<-
d_train_baked bake(rec1_prepped, new_data = NULL)
head(d_train_baked)
Tuninig/Fitting
tic()
<-
wf_fit %>%
wf1 tune_grid(
grid = 5,
resamples = vfold_cv(strata = c1,
v = 5,
data = d_train),
control = control_grid(save_pred = TRUE,
verbose = TRUE,
save_workflow = FALSE))
toc()
beep()
Oder das schon in grauer Vorzeit berechnete Objekt importieren:
<- read_rds("/Users/sebastiansaueruser/github-repos/rexams-exercises/objects/germeval10-wordvec-rf.rds") wf_fit
Plot performance
autoplot(wf_fit)
show_best(wf_fit)
Finalisieren
<- select_best(wf_fit)
best_params tic()
<- finalize_workflow(wf1, best_params)
wf_finalized <- fit(wf_finalized, data = d_train)
lastfit1 toc()
Test-Set-Güte
tic()
<-
preds predict(lastfit1, new_data = germeval_test)
toc()
<-
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)
Fazit
wikipedia2vec
ist für die deutsche Sprache vorgekocht. Das macht Sinn für einen deutschsprachigen Corpus.
Das Modell braucht doch ganz schön viel Rechenzeit.
Achtung: Mit dem Parameter save_pred = TRUE
wird der Workflow größer als 3 GB.
Categories:
- textmining
- datawrangling
- germeval
- prediction
- tidymodels
- string