【问题标题】:quanteda convert to topicmodels retaining docvarsquanteda 转换为保留 docvars 的主题模型
【发布时间】:2018-11-08 10:41:18
【问题描述】:

我正在使用很棒的 quanteda 包将我的 dfm 转换为 topicmodels 格式。但是,在此过程中,我丢失了我需要用来确定哪些主题最有可能在我的文档中流行的文档变量。鉴于 topicmodels 包(与 STM 一样)仅选择非零计数,这尤其是一个问题。原始 dfm 中的文档数量和模型输出因此不同。我有什么方法可以正确识别 casu 中的文件吗?

【问题讨论】:

  • 您能为我们创建一个最小的可重现示例吗?您正在使用相同的过程,但可能有一些虚拟文档。
  • 不幸的是,我想不出在将 dfm 转换为 topicmodels 对象时丢失文档的示例数据。
  • 你现在正在失去它们。因此,如果您采用诸如 data_char_ukimmig2010 之类的 quanteda 示例数据集之一并在您的代码中使用它,例如 my_corpus <- corpus(data_char_ukimmig2010, docvars = data.frame(party = names(data_char_ukimmig2010)))。然后按照您的代码查看 docvars 丢失的位置并将其添加到您的帖子中。

标签: r quanteda topicmodels


【解决方案1】:

对不起,这是一个例子。

dfm_speeches <- dfm(data_corpus_irishbudget2010, 
            remove_punct = TRUE, remove_numbers = TRUE, remove = stopwords("english")) %>% 
dfm_trim(min_termfreq = 4, max_docfreq = 10)
dfm_speeches <- dfm_select(dfm_speeches, c("corbyn", "hillary"))

library(topicmodels)
dfmlda <- convert(dfm_speeches, to = "topicmodels") %>% 
dfmlda

如您所见,dfmlda 对象是空的,因为我通过删除特定单词修改了我的 dfm。

【讨论】:

    【解决方案2】:

    我检查了你的结果。由于您的 select 语句,您在 dfm_speeches 中没有任何功能。将其转换为topicmodels 使用的“dtm”格式,您确实会得到一个没有文档也没有术语的文档术语矩阵。

    但是,如果您使用 dfm_select 选择的结果是具有特征的 dfm,然后您将其转换为 dtm 格式,您将看到出现 docvar。

    dfm_speeches <- dfm(data_corpus_irishbudget2010, 
                        remove_punct = TRUE, remove_numbers = TRUE, remove = stopwords("english")) %>% 
      dfm_trim(min_termfreq = 4, max_docfreq = 10)
    
    dfm_speeches <- dfm_select(dfm_speeches, c("Bruton", "Cowen"))
    
    docvars(dfm_speeches)
    
    dfmlda <- convert(dfm_speeches, to = "topicmodels")
    

    这将进一步与主题模型一起工作。我承认,如果您转换为 tm 的 dtm 并且您没有任何功能,您将看到文件出现在 dtm 中。如果没有功能,我不确定转换为主题模型是否会产生意外的副作用。

    【讨论】:

    • 对不起,我选错词了。你说得对。在您的解决方案中,没有。文件的数量也从 14 变为 4,对吧?你的意思是出现了暗名而不是文档变量?
    • 注意:dfm_select() 此处生成的 dfm 只有一个特征“cowen”。转换为 topicmodels 格式会丢弃特征计数为零的文档,因为这些会导致 topicmodels::LDA() 出现问题。正如@phiver 指出的那样,转换to = "tm" 不会丢弃空文档。 (但是,如果您遇到空文档问题,那么如果您尝试拟合主题模型,则会遇到更深层次的问题!)。
    • 感谢您的回复。我没有在自己的代码中使用 dfm_select,但我试图提出一个可重现的示例,该示例在转换为主题模型时会删除文档。你能解释一下你所说的更深层次的问题是什么意思吗?关键是我的数据有空文档。这对于 LDA 包来说不是问题,而对于 topicmodels 是。但是,通过 Kohei 的解决方案,我现在可以确定哪个文档是哪个文档。
    • 通过更深层次的问题,我的意思是你将无法将任何模型拟合到某些“文档”具有零特征的矩阵中。
    【解决方案3】:

    我认为问题描述得不是很清楚,但我相信我理解它是什么。

    主题模型的文档特征矩阵不能包含空文档,因此它们返回没有这些的主题的命名向量。但是,如果您将它们与文档名称匹配,您仍然可以使用它:

    # mx is a quanteda's dfm
    # topic is a named vector for topics from LDA
    
    docvars(mx, "topic") <- topic[match(docnames(mx), names(topic))]
    

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2012-11-23
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 2018-12-05
      相关资源
      最近更新 更多