主题建模:LDA,每个主题中的词频和Wordcloud

时间:2017-08-08 08:25:13

标签: r text latent-semantic-indexing tidytext latent-semantic-analysis

问题:如何计算和编码每个主题中单词的频率? 我的目标是从每个主题创建“Word Cloud”。

P.S.>我对wordcloud没有任何问题。

从代码中

  burnin <- 4000  #We do not collect this.
  iter <- 4000
  thin <- 500
  seed <-list(2017,5,63,100001,765)
  nstart <- 5
  best <- TRUE
  #Number of topics: 
  k <- 4
  LDA_results <-LDA(DTM,k, method="Gibbs", control=list(nstart=nstart,
                           seed = seed, best=best, 
                           burnin = burnin, iter = iter, thin=thin))

谢谢 (我尽量使问题尽可能简洁,所以如果你需要更多细节,我可以添加更多。)

2 个答案:

答案 0 :(得分:3)

如果您想为每个主题创建一个wordcloud,您想要的是每个主题的首要术语,即从每个主题生成的最可能的单词。这个概率称为beta;它是每个主题的每个词的概率。 β概率越高,该词从该主题生成的概率就越高。

您可以使用tidytext中的beta从LDA主题模型中获取整齐数据框中的tidy概率。让我们看一个示例数据集,并使用两个主题拟合模型。

library(tidyverse)
library(tidytext)
library(topicmodels)

data("AssociatedPress")
ap_lda <- LDA(AssociatedPress, k = 2, control = list(seed = 1234))

你现在适合这个模特!现在,我们可以了解概率。

ap_topics <- tidy(ap_lda, matrix = "beta")

ap_topics
#> # A tibble: 20,946 x 3
#>    topic       term         beta
#>    <int>      <chr>        <dbl>
#>  1     1      aaron 1.686917e-12
#>  2     2      aaron 3.895941e-05
#>  3     1    abandon 2.654910e-05
#>  4     2    abandon 3.990786e-05
#>  5     1  abandoned 1.390663e-04
#>  6     2  abandoned 5.876946e-05
#>  7     1 abandoning 2.454843e-33
#>  8     2 abandoning 2.337565e-05
#>  9     1     abbott 2.130484e-06
#> 10     2     abbott 2.968045e-05
#> # ... with 20,936 more rows

他们都在那里混在一起。让我们使用dplyr来获取每个主题的最可能的术语。

ap_top_terms <- ap_topics %>%
  group_by(topic) %>%
  top_n(200, beta) %>%
  ungroup() %>%
  arrange(topic, -beta)

您现在可以使用它来制作wordcloud(进行一些重塑)。 beta概率是你想要对应的单词大小的概率。

library(wordcloud)
library(reshape2)

ap_top_terms %>%
  mutate(topic = paste("topic", topic)) %>%
  acast(term ~ topic, value.var = "beta", fill = 0) %>%
  comparison.cloud(colors = c("#F8766D", "#00BFC4"),
                   max.words = 100)

答案 1 :(得分:1)

根据每个主题的单词(public class FirebaseInstanceIDService extends FirebaseInstanceIdService { private static final String TAG = "FIIDService"; @Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); sendRegistrationToServer(refreshedToken); } private void sendRegistrationToServer(String token) { //TODO } } )获取getCompositeDisposable() .add(productManager.getProductList(authToken)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<List<Product>>() { @Override public void accept(@NonNull List<Product> products) throws Exception { onProductsLoaded(products); } }, new Consumer<Throwable>() { @Override public void accept(@NonNull Throwable throwable) throws Exception { if (!isViewAttached()) return; getMvpView().hideAlertDialog(); getMvpView().showErrorAlertDialog(); } })); 的子集,并获取子集文档术语矩阵的列总和(DTM)。 E.g:

dtm[,topterms]