0

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

我看到这个包topicmodels允许一个叫做种子词的参数,它“可以指定为一个matrix或一个对象类simple_triplet_matrix”,但没有其他说明。似乎 asimple_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)
4

1 回答 1

0

在 topicmodels 包中“播种”单词是一个不同的过程,因为它允许您在通过折叠的 Gibbs 采样器进行估计时为单词附加先前的权重。(例如,参见 Jagarlamudi, J., Daumé, H., III, & Udupa, R. (2012)。将词汇先验纳入主题模型(第 204-213 页)。计算语言学协会。)但这是主题的估计策略,而不是确保感兴趣的关键词保留在适合的主题中的方法。除非您设置了基于稀疏性删除它们的阈值,否则在调用lad::lda.collapsed.gibbs.sampler(), then *every* term in yourUKlda2$vocab` 向量之前将分配跨主题的概率。

可能这里发生的情况是,您的单词频率太低,以至于很难在您的任何主题的顶部附近找到它们。词干也可能改变了它们,例如:

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

我建议您首先通过以下方式确保您的单词存在于 dfm 中:

colSums(UKdfm2)["eurosceptic"]

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

于 2016-06-09T13:28:12.323 回答