文本的主题聚类

数据挖掘 聚类 文本分类
2022-02-25 06:07:22

请就与文本主题聚类相关的起点、研究(论文、框架)提出建议。特别是在具有两级聚类的系统上,其中第二级具有时间性质。谢谢!

更新:

对不起,我最初的问题模棱两可。我需要澄清一下,对于在向量空间中使用 TFIDF、词嵌入(word2vec、Glove 和 BERT 句子嵌入)的文本,我有一般聚类和文档聚类的经验。

我的问题源于一些提到“第二级具有时间性质的文本的两级主题聚类”的文本。只是想了解这种技术,特别是聚类中使用的“时间性质”。

2个回答

你的问题很含糊。你尝试了什么,你想详细实现什么。但是,请在下面找到一些如何处理主题建模的 R 示例。这本书也可能会有所帮助:Text Mining with R

library(topicmodels)
data("AssociatedPress")
AssociatedPress

# LDA (Latent Dirichlet Allocation)
ap_lda <- LDA(AssociatedPress, k = 2, control = list(seed = 1234))
ap_lda

# Get "topics"
library(tidytext)
ap_topics <- tidy(ap_lda, matrix = "beta")
ap_topics

library(ggplot2)
library(dplyr)

# Plot topics
ap_top_terms <- ap_topics %>%
  group_by(topic) %>%
  top_n(10, beta) %>%
  ungroup() %>%
  arrange(topic, -beta)

ap_top_terms %>%
  mutate(term = reorder(term, beta)) %>%
  ggplot(aes(term, beta, fill = factor(topic))) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~ topic, scales = "free") +
  coord_flip()

# (words with) Greatest difference between categories
library(tidyr)

beta_spread <- ap_topics %>%
  mutate(topic = paste0("topic", topic)) %>%
  spread(topic, beta) %>%
  filter(topic1 > .001 | topic2 > .001) %>%
  mutate(log_ratio = log2(topic2 / topic1))

beta_spread

list(beta_spread$term)

# Select 10 largest and smallest values of "log_ratio")
df1 <- subset(beta_spread, beta_spread$log_ratio<=max(tail(sort(beta_spread$log_ratio, decreasing = T),10)))
df2 <- subset(beta_spread, beta_spread$log_ratio>=min(tail(sort(beta_spread$log_ratio, decreasing = F),10)))
df = rbind(df1,df2)
df

# Plot
barplot(sort(df$log_ratio), names.arg=df$term[order(df$log_ratio)], las=2)

# Gamma contains the probability of document X to belong to topic Y
ap_documents <- tidy(ap_lda, matrix = "gamma")
ap_documents
# the model estimates that only about 24.8% of the words in document 1 were generated from topic 1

“聚类”是一组无监督技术的一个非常广泛的保护伞,它试图根据其特征/协变量/变量将数据项组合在一起。

假设你有两个变量x1x2, 和 6 个样本。我可以很容易地找到两个使用 k-Means 等技术的集群。

在此处输入图像描述

在文本挖掘方面,这些变量经常与词频和/或上下文表示相关联。例如,样本可能是一个文档,并且x1x2可能是单词“a”和单词“b”的频率。此外,时间戳可能是x3.

如果要在文档中找到聚类,首先需要定义一个变量或“特征”提取方法(如词频、tf-idf、词嵌入等)。您可以将文本特征与时间相关特征连接起来,并将任何聚类技术应用于这组特征以对文档进行聚类。

@Peter 建议您使用主题建模技术,这是一种在应用词频特征提取后减少特征维度空间(2 个特征 = 2 个维度,1000 个特征 = 1000 个维度)的方法。它将帮助您根据一组重要单词的出现频率来描述这些文档中的每一个。粗略地说,主题是一组同时出现的词。因此,对于每个文档,主题将具有相关性级别。

它不是严格意义上的“聚类”方法,但它确实通过使用最相关的主题来实现文档聚类。

如果您想将时间维度与主题建模相结合,您必须多学习一点,阅读一些论文并使用我提到的这些方法进行一些练习。可以有一个带有词频主题建模的管道(x1是主题 1 与文档的相关性,x2对于主题 2 ...),然后将时间戳附加到结果并应用聚类技术,例如 k-Means。