Соотношение тем во времени с использованием Mallet LDA

Я хотел бы знать, как тренировать маллет LDA по предложениям из 130 файлов .txt (ежемесячные данные) в моем корпусе. Поскольку проблема, с которой я сталкиваюсь, когда я оцениваю на уровне документа, заключается в том, что график соотношения тем сверхурочно настолько странный. Например, с течением времени пропорция все еще не меняется, а в некоторых темах пропорция не меняется.

введите здесь описание изображения

Вот сценарий кодирования, который я использую.

dir <- "C:/Users/Dell/desktop/MPSCLEANED"
setwd(dir)
require(mallet)

documents <- mallet.read.dir(dir) 
mallet.instances <- mallet.import(documents$id, documents$text, 
"C:/Users/Dell/desktop/stopwords.txt", token.regexp = "\\p{L}
[\\p{L}\\p{P}]+\\p{L}")

# Before moving on, I just wonder how can I estimate LDA by sentences from 
all documents in my corpus. 

n.topics <- 15
topic.model  <- MalletLDA(n.topics, alpha.sum=3.33, beta=0.2)
topic.model$model$setRandomSeed(19820L)
topic.model$setOptimizeInterval(50L)
topic.model$loadDocuments(mallet.instances)
vocabulary <- topic.model$getVocabulary()
word.freqs <- mallet.word.freqs(topic.model)
topic.model$setAlphaOptimization(1,1000)
topic.model$train(1000)
topic.model$maximize(20)

doc.topics <- mallet.doc.topics(topic.model, smoothed=T, normalized=T)
topic.words <- mallet.topic.words(topic.model, smoothed=T, normalized=T)

topic.docs <- t(doc.topics)
topic.docs <- topic.docs / rowSums(topic.docs)


topics.labels <- rep("", n.topics)
for (topic in 1:n.topics) topics.labels[topic] <- 
paste(mallet.top.words(topic.model, topic.words[topic,], num.top.words=5) 
$words, collapse=" ")

topics.labels

#Topics over time
options(java.parameters="-Xmx2g")
library("dfrtopics")
library("dplyr")
library("ggplot2")
library("lubridate")
library("stringr")
library("mallet")

m <- mallet_model(doc_topics = doc.topics, doc_ids = documents$id, vocab = 
vocabulary, topic_words = topic.words, model = topic.model)

pd <- data.frame(date = list.files(path = "C:/Users/Dell/Desktop/MPS"))

pd <- data.frame(date = lapply(pd, function(x) {gsub(".txt", "", x)}))

meta <- data.frame(id = documents$id, pubdate = as.Date(pd$date, "%Y%m%d"))

metadata(m) <- meta

# Visualize topics over time
theme_update(strip.text=element_text(size=7), 
axis.text=element_text(size=7))
topic_series(m) %>%
plot_series(labels=topic_labels(m, 2))

person Benz M.    schedule 13.02.2018    source источник


Ответы (1)


130 документов - это не очень много для оценки тематической модели. Можно ли разделить документы на более мелкие сегменты?

person David Mimno    schedule 14.02.2018
comment
Точно да. На самом деле, я бы тоже хотел это сделать! Но дело в том, что я не знаю, как это сделать, так как я впервые занимаюсь НЛП. Есть ли у вас какие-либо предложения о том, как я мог бы разбить эти документы на предложения перед обучением MALLET LDA? - person Benz M.; 14.02.2018