可以自动找到停止词吗?

时间:2014-03-13 05:52:11

标签: machine-learning nlp data-mining text-mining

在NLP中,停用词删除是典型的预处理步骤。它通常以我们认为停止词应该是什么的经验方式完成。

但在我看来,我们应该概括一下停止词的概念。对于来自不同领域的语料库,停止词可能会有所不同。我想知道我们是否可以在数学上定义停用词,例如通过其统计特征。然后我们可以自动从特定域的语料库中提取停用词。

有没有类似的想法和进展?任何人都可以解释一下吗?

5 个答案:

答案 0 :(得分:3)

通常,停止词比其他语义词更频繁地发生......所以在构建我的应用程序时,我使用了两者的组合;固定清单和统计方法。我正在使用NLTK,它已经列出了一些常见的停用词;所以我首先删除了这个列表中出现的单词,但当然这并没有删除所有的单词...正如你已经提到的那样,单词不同于语料库和语料库。然后我评估了出现在语料库中的每个单词的频率,并删除了频率高于"某个限制的单词"。我提到的这个限制是我在观察所有单词的频率后修复的值...因此这个限制也取决于语料库到语料库......但是一旦仔细观察所有单词的列表,你就可以很容易地计算出来按照频率顺序排列的单词...这种统计方法将确保您删除未出现在常用停用词列表中的停止词...之后,为了优化数据,我还使用了POS标记。并删除了前两步后仍然存在的专有名词..

答案 1 :(得分:3)

我不是专家,但希望我的回答是有道理的。

从语料库中统计提取停用词听起来很有趣!我会考虑计算逆文档频率,如其他答案中所提到的,除了使用来自公共停用词列表的常规停用词,如NLTK中的那个。停止词不仅从语料库到语料库,它们也可能因问题而异。例如,在我工作的一个问题中,我使用了一组新闻文章,在那里你会发现许多时间敏感和位置敏感的单词。这些都是至关重要的信息,统计上删除“今天”,“这里”等字样会对我的结果造成影响。因为,新闻文章不仅讨论了一个特定事件,还讨论了过去或其他地方发生的类似事件。

简而言之,我的观点是,您需要考虑所解决的问题,而不仅仅是语料库。

谢谢, 拉姆亚

答案 2 :(得分:2)

停止言语无处不在。它们将出现在每个(或几乎每个)文档中。从数学上为不同域的语料库定义停用词的好方法是计算单词的inverse document frequency (IDF)

IDF是一种比频率计算更好的方法来定义停用词,因为简单的频率计算会受到包含特殊字多次的少数专用文档的不利影响。此方法已用于自动学习外语中的停用词(参考Machine Learning with SVM and Other Kernel Methods)。

答案 3 :(得分:2)

是的,可以自动检测停用词。

整个单词频率

一种方法是将字频率视为一个整体。

计算合并文本中所有单词的频率。按降序排序,并删除前20%左右。

您可能还希望删除底部的5%。这些不是停止词,但对于很多机器学习来说,它们是无关紧要的。甚至可能是拼写错误。

每个“文档”的字词

另一种方法是分析每个“文档”的单词。

在一组文档中,可以通过查找大量文档中存在的单词来检测停用词。它们对于在这个特定集合中对文档进行分类或聚类将毫无用处。

E.g。分析科学论文的机器学习系统可能在分析后将“抽象”一词标记为停用词,即使每个文档只存在一次。但几乎所有人都有可能。

对于仅在非常有限的文档中找到的单词也是如此。它们可能拼写错误或非常独特,可能永远不会再被看到。

但是,在这种情况下,重要的是学习集中文档组之间的分布是偶数,或者分成一个大组和一个小组可能会丢失所有重要单词(因为它们可能存在于太多文档或太少了。)

另一种避免训练集中不均匀分布组问题的方法是仅删除所有或几乎所有文档中存在的单词。 (即所有英文文本中都会出现我们最喜欢的停止词,如“a”,“it”,“the”,“an”等。)

Zipf定律

当我学习机器学习并讨论停止词时,提到了Zipf定律。然而,今天我无法告诉你如何或为什么,但也许这是你想要研究的一般原则或数学基础......

我用google搜索“Zipf's Law自动停止字检测”,快速选择发现了两个可能感兴趣的PDF ...

答案 4 :(得分:1)

实际上,构建停用词的常用方法是使用最常见的(在文档中,即通过DF)单词。构建前100个,200个,1000个单词的列表,并审核它们。只需浏览列表,直到找到您认为为止动词的单词。然后考虑跳过它,或者在此时打破列表。

在许多数据集中,您将拥有特定于域的停用词。例如,如果您使用StackOverflow,“java”和“c#”很可能是停用词(这实际上不会造成太大损害;特别是如果您仍然使用标签)。其他特定于域的停用词可以是“代码”,“实现”,“程序”。