将单词播种到 R 中的 LDA 主题模型中
Seeding words into an LDA topic model in R
我有一个新闻文章数据集,这些文章是根据使用术语 "euroscepticism" 或 "eurosceptic" 的标准收集的。我已经 运行 使用 lda
包(在 quanteda
中内置了 dfm
矩阵)来确定这些文章的主题模型;但是,我感兴趣的词没有出现在任何主题中。因此,我想将这些词播种到模型中,但我不确定具体该怎么做。
我看到包 topicmodels
允许一个名为 seedwords 的参数,"can be specified as a matrix
or an object class of simple_triplet_matrix
",但没有其他说明。似乎 simple_triplet_matrix
只接受整数,而不接受字符串——有谁知道我会在模型中播种 'euroscepticism' 和 'eurosceptic' 两个词?
这里是代码的简化版本:
library("quanteda")
library("lda")
##Load UK texts/create corpus
UKcorp <- corpus(textfile(file="~Michael/DM6/*"))
##Create document feature matrix
UKdfm2 <- dfm(UKcorp, ngrams =1, verbose = TRUE, toLower = TRUE,
removeNumbers = TRUE, removePunct = TRUE, removeSeparators = TRUE,
removeTwitter = FALSE, stem = TRUE, ignoredFeatures =
stopwords(kind="english"), keptFeatures = NULL, language = "english",
thesaurus = NULL, dictionary = NULL, valuetype = "fixed"))
##Convert to lda model
UKlda2 <- convert(UKdfm2, to = "lda")
##run model
UKmod2 <- lda.collapsed.gibbs.sampler(UKlda2$documents, K = 15, UKlda2$vocab,
num.iterations = 1500, alpha = .1,eta = .01, initial = NULL, burnin
= NULL, compute.log.likelihood = TRUE, trace = 0L, freeze.topics = FALSE)
"Seeding" topicmodels 包中的单词是一个不同的过程,因为它允许您在通过折叠 Gibbs 采样器进行估计时为单词附加先验权重。 (例如,参见 Jagarlamudi, J., Daumé, H., III, & Udupa, R. (2012)。Incorporating lexical priors into topic models(第 204-213 页)。计算语言学协会。)但这是主题的估计策略,而不是确保感兴趣的关键字保留在您适合的主题中的方法。除非您设置了基于稀疏性删除它们的阈值,否则在调用 lad::lda.collapsed.gibbs.sampler(), then *every* term in your
UKlda2$vocab` 向量之前,将分配跨主题的概率。
可能这里发生的情况是您的单词频率太低,以至于很难在任何主题的顶部找到它们。词干提取也可能改变了它们,例如:
quanteda::char_wordstem("euroscepticism")
## [1] "eurosceptic"
我建议你首先确保你的话存在于dfm中,通过:
colSums(UKdfm2)["eurosceptic"]
然后你可以在拟合的主题模型对象中查看这个词和其他词的主题比例的拟合分布。
我有一个新闻文章数据集,这些文章是根据使用术语 "euroscepticism" 或 "eurosceptic" 的标准收集的。我已经 运行 使用 lda
包(在 quanteda
中内置了 dfm
矩阵)来确定这些文章的主题模型;但是,我感兴趣的词没有出现在任何主题中。因此,我想将这些词播种到模型中,但我不确定具体该怎么做。
我看到包 topicmodels
允许一个名为 seedwords 的参数,"can be specified as a matrix
or an object class of simple_triplet_matrix
",但没有其他说明。似乎 simple_triplet_matrix
只接受整数,而不接受字符串——有谁知道我会在模型中播种 'euroscepticism' 和 'eurosceptic' 两个词?
这里是代码的简化版本:
library("quanteda")
library("lda")
##Load UK texts/create corpus
UKcorp <- corpus(textfile(file="~Michael/DM6/*"))
##Create document feature matrix
UKdfm2 <- dfm(UKcorp, ngrams =1, verbose = TRUE, toLower = TRUE,
removeNumbers = TRUE, removePunct = TRUE, removeSeparators = TRUE,
removeTwitter = FALSE, stem = TRUE, ignoredFeatures =
stopwords(kind="english"), keptFeatures = NULL, language = "english",
thesaurus = NULL, dictionary = NULL, valuetype = "fixed"))
##Convert to lda model
UKlda2 <- convert(UKdfm2, to = "lda")
##run model
UKmod2 <- lda.collapsed.gibbs.sampler(UKlda2$documents, K = 15, UKlda2$vocab,
num.iterations = 1500, alpha = .1,eta = .01, initial = NULL, burnin
= NULL, compute.log.likelihood = TRUE, trace = 0L, freeze.topics = FALSE)
"Seeding" topicmodels 包中的单词是一个不同的过程,因为它允许您在通过折叠 Gibbs 采样器进行估计时为单词附加先验权重。 (例如,参见 Jagarlamudi, J., Daumé, H., III, & Udupa, R. (2012)。Incorporating lexical priors into topic models(第 204-213 页)。计算语言学协会。)但这是主题的估计策略,而不是确保感兴趣的关键字保留在您适合的主题中的方法。除非您设置了基于稀疏性删除它们的阈值,否则在调用 lad::lda.collapsed.gibbs.sampler(), then *every* term in your
UKlda2$vocab` 向量之前,将分配跨主题的概率。
可能这里发生的情况是您的单词频率太低,以至于很难在任何主题的顶部找到它们。词干提取也可能改变了它们,例如:
quanteda::char_wordstem("euroscepticism")
## [1] "eurosceptic"
我建议你首先确保你的话存在于dfm中,通过:
colSums(UKdfm2)["eurosceptic"]
然后你可以在拟合的主题模型对象中查看这个词和其他词的主题比例的拟合分布。