在潜在狄利克雷分配后获得重复项
Posted
技术标签:
【中文标题】在潜在狄利克雷分配后获得重复项【英文标题】:Getting repeated terms after Latent Dirichlet allocation 【发布时间】:2016-06-25 14:33:36 【问题描述】:我正在为潜在狄利克雷分配实现尝试此方法,但得到重复的术语。我如何才能从 LDA 中获得独特的术语?
图书馆(tm) 加载所需的包:NLP myCorpus myCorpus removeURL ", "", x) myCorpus removeNumPunct ", "", x) myCorpus myStopwords myStopwords myCorpus myCorpus myCorpusCopy myCorpus 库('SnowballC') myCorpus dtm 库("RTextTools", lib.loc="~/R/win-library/3.2") 库("topicmodels", lib.loc="~/R/win-library/3.2") om1 条款(om1)
【问题讨论】:
欢迎来到 SO。tweets$text
是什么?请提供一个可重现的最小示例。
我之前使用过该代码,并且 text.csv 包含 500 条推文 text > tweets = read.csv("text.csv")
【参考方案1】:
根据https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation 在LDA 中,每个文档都被视为各种主题的混合体。也就是说,对于每个文档(推文),我们得到推文属于每个主题的概率。概率总和为 1。
同样,每个主题都被视为各种术语(单词)的混合体。也就是说,对于每个主题,我们得到每个单词属于该主题的概率。概率总和为 1。
因此,对于每个单词主题组合,都分配了一个概率。代码terms(om1)
获取每个主题中概率最高的单词。
因此,在您的情况下,您会发现同一个词在多个主题中的概率最高。这不是错误。
以下代码将创建 TopicTermdf 数据集,其中包含每个主题的所有单词的分布。查看数据集,将有助于您更好地理解。
以下代码基于以下LDA with topicmodels, how can I see which topics different documents belong to? 帖子。
代码:
# Reproducible data - From Coursera.org John Hopkins Data Science Specialization Capstone project, SwiftKey Challange dataset
tweets <- c("How are you? Btw thanks for the RT. You gonna be in DC anytime soon? Love to see you. Been way, way too long.",
"When you meet someone special... you'll know. Your heart will beat more rapidly and you'll smile for no reason.",
"they've decided its more fun if I don't.",
"So Tired D; Played Lazer Tag & Ran A LOT D; Ughh Going To Sleep Like In 5 Minutes ;)",
"Words from a complete stranger! Made my birthday even better :)",
"First Cubs game ever! Wrigley field is gorgeous. This is perfect. Go Cubs Go!",
"i no! i get another day off from skool due to the wonderful snow (: and THIS wakes me up...damn thing",
"I'm coo... Jus at work hella tired r u ever in cali",
"The new sundrop commercial ...hehe love at first sight",
"we need to reconnect THIS WEEK")
library(tm)
myCorpus <- Corpus(VectorSource(tweets))
myCorpus <- tm_map(myCorpus, content_transformer(tolower))
removeURL <- function(x) gsub("http[^[:space:]]", "", x)
myCorpus <- tm_map(myCorpus, content_transformer(removeURL))
removeNumPunct <- function(x) gsub("[^[:alpha:][:space:]]", "", x)
myCorpus <- tm_map(myCorpus, content_transformer(removeNumPunct))
myStopwords <- c(stopwords('english'), "available", "via")
myStopwords <- setdiff(myStopwords, c("r", "big"))
myCorpus <- tm_map(myCorpus, removeWords, myStopwords)
myCorpus <- tm_map(myCorpus, stripWhitespace)
myCorpusCopy <- myCorpus
myCorpus <- tm_map(myCorpus, stemDocument)
library('SnowballC')
myCorpus <- tm_map(myCorpus, stemDocument)
dtm<-DocumentTermMatrix(myCorpus)
library(RTextTools)
library(topicmodels)
om1<-LDA(dtm,3)
输出:
> # Get the top word for each topic
> terms(om1)
Topic 1 Topic 2 Topic 3
"youll" "cub" "anoth"
>
> #Top word for each topic
> colnames(TopicTermdf)[apply(TopicTermdf,1,which.max)]
[1] "youll" "cub" "anoth"
>
【讨论】:
很高兴它有帮助。如果它回答了您的问题,请接受答案。 如果你能帮我多一点,我很高兴。实际上我正在研究一个项目,并且是 R 的新手。我需要对带有 twitter 特定变量和 LDA 文本预测器的数据应用逻辑回归(主效应和逐步)。你能帮我解决这个问题吗...?? 你为什么不问一个单独的问题。 SO 的工作方式是您提供一些可重现的数据并展示您尝试过的内容。在发布问题之前,请确保在 SO 上搜索可能的答案。我明天去看看,看看能不能帮上忙。【参考方案2】:尝试找到最佳主题数量。为此,您需要构建多个具有不同主题数量的 LDA 模型,并选择其中一个具有最高一致性得分的模型。 如果您看到在多个主题中重复使用相同的关键字(术语),则可能表明 k(主题数)的值太大。虽然它是用 python 编写的,但这里是link to LDA topic modeling,您将找到网格搜索方法来找到最佳值(决定要选择的主题数量)。
【讨论】:
以上是关于在潜在狄利克雷分配后获得重复项的主要内容,如果未能解决你的问题,请参考以下文章
潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型
潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型