主题分布的不同维度
Different dimensions of distributions of topics
我想将所有文档分成10个主题,除了主题的分布维度和协方差矩阵之外,它与收敛结果相得益彰。
为什么主题分布是 9 维向量而不是 10 维,它们的协方差矩阵是 9*9 矩阵而不是 10*10?
我已经使用 library(topicmodels)
和函数 CTM()
实现了中文主题模型。
我的代码如下:
library(rJava);
library(Rwordseg);
library(NLP);
library(tm);
library(tmcn)
library(tm)
library(Rwordseg)
library(topicmodels)
installDict("C:\Users\Jeffy\OneDrive\Workplace\R\Law.scel","Law");
installDict("C:\Users\Jeffy\OneDrive\Workplace\R\NationalInstitution.scel","NationalInstitution");
installDict("C:\Users\Jeffy\OneDrive\Workplace\R\Place.scel","Place");
installDict("C:\Users\Jeffy\OneDrive\Workplace\R\Psychology.scel","Psychology");
installDict("C:\Users\Jeffy\OneDrive\Workplace\R\Politics.scel","Politics");
listDict();
#read file
d.vec <- segmentCN("samgovWithoutID.csv", returnType = "tm")
samgov.segment <- read.table("samgovWithoutID.segment.csv", header = TRUE, fill = TRUE, stringsAsFactors = F, sep = ",",fileEncoding='utf-8')
fix(samgov.segment)
# create DTM(document term matrix)
d.corpus <- Corpus(VectorSource(samgov.segment$content))
inspect(d.corpus[1:10])
d.corpus <- tm_map(d.corpus, removeWords, stopwordsCN())
ctrl <- list(removePunctuation = TRUE, removeNumbers= TRUE, wordLengths = c(1, Inf), stopwords = stopwordsCN(), wordLengths = c(2, Inf))
d.dtm <- DocumentTermMatrix(d.corpus, control = ctrl)
inspect(d.dtm[1:10, 110:112])
# impletment topic models
ctm10<-CTM(d.dtm,k=10, control=list(seed=2014012692))
Terms10 <- terms(ctm10, 10)
Terms10[,1:10]
ctm20<-CTM(d.dtm,k=20, control=list(seed=2014012692))
Terms20 <- terms(ctm20, 20)
Terms20[,1:20]
R Studio 中的结果(见高亮部分):
帮助文档:
10 个值的概率分布有 9 个自由参数:一旦我告诉你前 9 个值的概率,最后一个值的概率必须是 1 减去这些概率的总和。
10 维逻辑正态分布相当于从高斯分布中抽取一个 10 维向量,然后 "squashing" 通过对该向量取幂并将其归一化为 1.0。有无数个 10 维向量会取幂并归一化为相同的 10 维概率分布——您只需为每个值添加一个任意常数 c。那是因为高斯均值有 10 个自由参数,比更受约束的分布多一个。
有几种方法可以制作高斯"identifiable"。一种是将均值向量的一个元素固定为0.0。这就是为什么您会看到一个 9 维均值和协方差矩阵:第 10 个值始终为 0,没有方差。
我想将所有文档分成10个主题,除了主题的分布维度和协方差矩阵之外,它与收敛结果相得益彰。
为什么主题分布是 9 维向量而不是 10 维,它们的协方差矩阵是 9*9 矩阵而不是 10*10?
我已经使用 library(topicmodels)
和函数 CTM()
实现了中文主题模型。
我的代码如下:
library(rJava);
library(Rwordseg);
library(NLP);
library(tm);
library(tmcn)
library(tm)
library(Rwordseg)
library(topicmodels)
installDict("C:\Users\Jeffy\OneDrive\Workplace\R\Law.scel","Law");
installDict("C:\Users\Jeffy\OneDrive\Workplace\R\NationalInstitution.scel","NationalInstitution");
installDict("C:\Users\Jeffy\OneDrive\Workplace\R\Place.scel","Place");
installDict("C:\Users\Jeffy\OneDrive\Workplace\R\Psychology.scel","Psychology");
installDict("C:\Users\Jeffy\OneDrive\Workplace\R\Politics.scel","Politics");
listDict();
#read file
d.vec <- segmentCN("samgovWithoutID.csv", returnType = "tm")
samgov.segment <- read.table("samgovWithoutID.segment.csv", header = TRUE, fill = TRUE, stringsAsFactors = F, sep = ",",fileEncoding='utf-8')
fix(samgov.segment)
# create DTM(document term matrix)
d.corpus <- Corpus(VectorSource(samgov.segment$content))
inspect(d.corpus[1:10])
d.corpus <- tm_map(d.corpus, removeWords, stopwordsCN())
ctrl <- list(removePunctuation = TRUE, removeNumbers= TRUE, wordLengths = c(1, Inf), stopwords = stopwordsCN(), wordLengths = c(2, Inf))
d.dtm <- DocumentTermMatrix(d.corpus, control = ctrl)
inspect(d.dtm[1:10, 110:112])
# impletment topic models
ctm10<-CTM(d.dtm,k=10, control=list(seed=2014012692))
Terms10 <- terms(ctm10, 10)
Terms10[,1:10]
ctm20<-CTM(d.dtm,k=20, control=list(seed=2014012692))
Terms20 <- terms(ctm20, 20)
Terms20[,1:20]
R Studio 中的结果(见高亮部分):
帮助文档:
10 个值的概率分布有 9 个自由参数:一旦我告诉你前 9 个值的概率,最后一个值的概率必须是 1 减去这些概率的总和。
10 维逻辑正态分布相当于从高斯分布中抽取一个 10 维向量,然后 "squashing" 通过对该向量取幂并将其归一化为 1.0。有无数个 10 维向量会取幂并归一化为相同的 10 维概率分布——您只需为每个值添加一个任意常数 c。那是因为高斯均值有 10 个自由参数,比更受约束的分布多一个。
有几种方法可以制作高斯"identifiable"。一种是将均值向量的一个元素固定为0.0。这就是为什么您会看到一个 9 维均值和协方差矩阵:第 10 个值始终为 0,没有方差。