将单词播种到R中的LDA主题模型中

时间:2016-06-09 13:02:34

标签: r lda quanteda topicmodels

我有一个新闻文章的数据集,这些新闻文章是根据他们使用术语" euroscepticism"的标准收集的。或" eurosceptic"。我一直在使用lda包(dfm内置quanteda矩阵)来运行主题模型,以便确定这些文章的主要主题;但是,我感兴趣的词语没有出现在任何主题中。因此,我想将这些词语植入模型,我不确定该怎么做。

我看到包topicmodels允许一个名为seedwords的参数,其中"可以指定为matrixsimple_triplet_matrix"的对象类,但没有其他指示。似乎simple_triplet_matrix只取整数,而不是字符串 - 有人知道我会播下“欧洲怀疑主义”这个词吗?和' 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)

1 个答案:

答案 0 :(得分:0)

topicmodels包中的“种子”单词是一个不同的过程,因为它允许您在通过折叠的Gibbs采样器进行估算时附加单词的先前权重。 (参见例如Jagarlamudi,J.,Daumé,H.,III,&amp; Udupa,R。(2012)。Incorporating lexical priors into topic models(pp.204-213)。计算语言学协会。)但这是主题的估算策略,而非确保关键词仍保留在适合的主题中的方法。除非您根据稀疏度设置了删除它们的阈值,否则在调用lad::lda.collapsed.gibbs.sampler(), then *every* term in your UKlda2 $ vocab`之前,将为主题分配概率。

这里发生的事情可能是你的话语频率很低,很难找到你们任何主题的顶部。阻塞也可能改变它们,例如:

quanteda::char_wordstem("euroscepticism")
## [1] "eurosceptic"

我建议你先确保你的单词存在于dfm中,通过:

colSums(UKdfm2)["eurosceptic"]

然后你可以在拟合的主题模型对象中查看这个单词和其他主题比例的拟合分布。