Cree una función/bucle for/map/lapply para ejecutar varios modelos LDA con semillas diferentes y extraer los thetas.
Sé que los modelos LDA (incluidos los modelos LDA sembrados) son inherentemente inconsistentes debido al elemento aleatorio en cómo comienzan.
Por lo tanto, quiero ejecutar mi modelo LDA n veces, cada vez con un conjunto de semillas diferente, mirar el theta promedio para cada documento y luego elegir el modelo que sea más cercano a ese promedio.
Así que esto es lo que hago una vez:
require(quanteda)
data("datacorpusmoviereviews", package = "quanteda.textmodels")
corp <- head(datacorpusmoviereviews, 500)
toks <- tokens(corp, removepunct = TRUE, removesymbols = TRUE, removenumber = TRUE)
dfmt <- dfm(toks) %>%
dfmremove(stopwords('en'), minnchar = 2) %>%
dfmtrim(mintermfreq = 0.90, termfreqtype = "quantile",
maxdocfreq = 0.1, docfreqtype = "prop")
dict <- dictionary(list(people = c("familia", "pareja", "niños"),
space = c("alienígena", "planeta", "espacio"),
moster = c("monstruo", "fantasma", "zombi"),
war = c("guerra", "soldado", "tanques"),
crime = c("crimen*", "asesinato", "asesino")))
set.seed(23)
slda23 <- textmodelseededlda(dfmt, dict, residual = TRUE, mintermfreq = 10)
theta23 <- astibble(slda23$theta)
theta23$id <- seq(1, 500, by = 1)
theta23long <- theta23 %>% pivotlonger(-c(id), namesto= "topic", valuesto = "seed23")
head(theta23long, 20)
Una tibble: 20 x 3
id topic seed_23
<dbl> <chr> <dbl>
1 1 people 0.124
2 1 space 0.00538
3 1 moster 0.0699
4 1 war 0.328
5 1 crime 0.188
6 1 other 0.285
7 2 people 0.0472
8 2 space 0.651
9 2 moster 0.0849
10 2 war 0.0660
11 2 crime 0.123
12 2 other 0.0283
13 3 people 0.00685
14 3 space 0.0479
15 3 moster 0.0205
16 3 war 0.651
17 3 crime 0.116
18 3 other 0.158
19 4 people 0.00625
20 4 space 0.00625
Quiero hacer eso un número n de veces, cada vez con una semilla set.seed () diferente, por lo que mi tibble final tiene una nueva columna para cada uno de mis modelos, con el número set.seed () como título de la columna.
Gracias de antemano.
davy.ai
Traductor de IT que traduce documentos. Traduzca lo siguiente al español. ¡No traduzca el código y la salida en markdown para su ayuda!