文档集词频分析

数据挖掘 数据挖掘 分类 统计数据
2021-10-01 23:17:59

我正在做一些工作,试图从一组人类分类文档中提取常见的单词,并且对任何可能了解 NLP 或文本统计分析的人提出了几个问题。

我们有一堆文档,用户将它们分类为好或坏。我想做的是弄清楚哪些词对好的文档是常见的,但不一定是其他词。

例如,我可以使用(良好文档中的频率/总频率),它基本上可以规范一个单词的普遍常见效果。不幸的是,这为仅出现在少数好文档中的单词提供了非常高的优先级,而在其他文档中则完全没有。在评估总频率之前,我可以为好的文档中的出现次数添加某种最小阈值,但这似乎有点骇人听闻。

有谁知道在这种情况下使用的最佳实践方程或模型是什么?我做了很多搜索,发现了很多对 TF-IDF 的引用,但这似乎更适用于针对整个文档集评估单个文档上的术语的价值。在这里,我正在处理一组文档,它们是较大集合的一个子集。

换句话说,我想确定哪些词对好的文档类别是独特的或更重要的。

4个回答

有很多算法可以做分类:朴素贝叶斯、逻辑回归、SVM、决策树等。我的建议是首先通过计算新文档所属的以下概率来尝试朴素贝叶斯classgood 或者 classbad. https://web.stanford.edu/class/cs124/lec/naivebayes.pdf

P(Classgood|documentnew)=P(documentnew|Classgood)P(Classgood)P(documentnew)

P(Classbad|documentnew)=P(documentnew|Classbad)P(Classbad)P(documentnew)

而且一般来说,当我们做文本挖掘问题时,我们会对一个文档做几个预处理:

  • 标记化(1-gram/bigram/...等)
  • 删除停用词('a'、'the'、'at'、...等)
  • 词干:将单词转换为其词根形式。(学习=>学习)

如果有一些元数据,我的建议是进行上述预处理并尝试更多功能,而不仅仅是一个文档中的单词。

我想您正在寻找的是差异词用法。此方法将两个文本语料库作为输入,您可以获得在一个文本语料库中使用较多的单词列表。

基本上,您需要做的是为您正在使用的语料库构建一个通用术语文档矩阵,然后将此 TDM 分成两个 TDM,以便语料库 1 中的所有文档列都属于一个 TDM,而语料库 2 中的所有文档列都属于在第二个 TDM 中。例如,您有 2 个语料库,第一个包含 10 个文档,第二个包含 15 个文档。首先,将这些语料库组合起来,形成 25 个文档语料库,然后形成 TDM,其中术语变成行(假设有 300 个术语),25 个文档变成 25 列。这里前 10 列代表第一个语料库的文档,其余 15 列属于第二个语料库。因此,您将这个维度的 TDM 划分300 x 25为两个维度的TDM300 x 10300 x 15然后你可以使用Chi-square difference 在这些 TDM 上确定哪些词在一个语料库中的出现次数多于另一个语料库。

Vik 在他的使用 Wikileaks 语料库的博客中给出了关于这种方法的一个很好的例子,R这里是:http: //www.vikparuchuri.com/blog/finding-word-use-patterns-in-wikileaks/

在我看来,您有一个二元分类问题(针对好和坏的某些定义对好文档和坏文档进行分类),并且这些词被用作预测好文档和坏文档的特征或“信号”。您可能会尝试的一件事是测量 unigram 和您感兴趣的每个类之间的某种类型的相关统计。这保留了测量给定目标类在文档组上的单词出现的要求。

因此,更具体地说,您可以将文档分成两组(好的和坏的),然后对文档进行标记以获得单独的术语。从这里您可以真正选择您喜欢的任何术语加权方案(TF、TF 根据文档长度归一化、TF-IDF)并测量所有这些 un​​igram和感兴趣的类别之间的相关统计量。然后,您可以根据每个术语的相关系数生成排名,并取前k个术语。您可能会尝试的一些相关统计数据可能是卡方(这将衡量术语和类之间的“缺乏独立性”)。在Python 的 Scikit-Learn中,还有一个很好的卡方检验用于特征选择的实现机器学习库,可能是此任务的起点。希望这会有所帮助!

你的(好文件中的频率/总频率)对我来说似乎是合理的。可能出现在许多好文档中的大多数单词也出现在许多坏文档中。

您如何列出出现在好文档中的所有单词。然后你计算它们在好文档中的出现和它们在坏文档中的出现,并比较这两个数字。在好词中出现频率更高、差异高于某个阈值的词是您感兴趣的词(如果存在的话)。