可以自动找到停用词吗?

17
在自然语言处理中,停用词去除是一种典型的预处理步骤。通常情况下,我们会根据认为应该被排除的停用词来进行这个步骤。
但是在我看来,我们应该将停用词的概念泛化。对于来自不同领域的语料库,停用词可能会有所不同。我想知道是否可以通过其统计特征等数学方式定义停用词。然后,是否可以自动从特定领域的语料库中提取停用词。
这方面是否有类似的思考和进展?能否有人给些建议?

2
简短回答:根据您的语料库和任务,您可以设置不同的停用词列表。获取截止词频值是一种魔法。 - amirouche
5个回答

4
停用词是普遍存在的。它们会出现在每个(或几乎每个)文档中。为了数学上定义来自不同领域的语料库的停用词,一个好的方法是计算词的逆文档频率(IDF)
IDF比频率计算更好地定义停用词,因为简单的频率计算受到包含特定词汇多次的几个专业文档的不利影响。这种方法已被用于自动学习外语停用词(参见使用SVM和其他核方法的机器学习)。

4
是的,停用词可以自动检测。
作为一整个的单词频率的方式之一。
计算组合文本中所有单词的频率。按降序排序并删除前20%左右。
您可能还希望删除底部5%。这些不是停用词,但对于很多机器学习来说,它们是无关紧要的。甚至可能是拼写错误。
每个“文档”的单词数
另一种方法是分析每个“文档”的单词数。
在一组文档中,可以通过查找存在于大量文档中的单词来检测停用词。它们对于在该特定集合中对文档进行分类或聚类没有用处。
例如。机器学习系统分类科学论文后,可能会将单词“摘要”标记为停用词,即使它每个文档只出现一次。但很可能在几乎所有文档中都有。
对于仅在非常有限数量的文档中找到的单词也是如此。它们可能被拼错或非常独特,可能永远不会再次出现。
然而,在这种情况下,很重要的一点是学习集中文档组之间的分布是均匀的,否则,一个被划分为一个大组和一个小组的集合可能会失去所有显著的词(因为它们可能存在于太多或太少的文档中)。
避免训练集中不均匀分布的问题的另一种方法是仅删除存在于所有或几乎所有文档中的词语。(例如,我们喜欢的停用词,如“a”,“it”,“the”,“an”等将存在于所有的英语文本中)。
当我学习机器学习时,讨论停用词时提到了Zipf定律。然而,今天我不能告诉你如何或为什么,但也许这是一个你想要探究的普遍原则或数学基础... 我谷歌搜索了"Zipf's Law automatic stop word detection",并快速找到两个可能感兴趣的PDF文件...

3
通常,停用词的出现频率比其他语义词要高得多...因此,在构建我的应用程序时,我使用了固定列表和统计方法的组合。我正在使用NLTK,并且它已经有了一些常见停用词的列表;因此,我首先删除了在此列表中出现的单词,但当然这并没有删除所有停用词...正如您已经提到的,停用词因corpora而异。然后,我评估了每个单词在corpora中出现的频率,并删除了具有“某个限制”以上频率的单词。我所提到的这个特定限制是我在观察所有单词的频率之后确定的值...因此,这个限制也取决于corpora到corpora...但是,一旦仔细观察了所有单词按其频率排序的列表,您就可以轻松地计算这个限制...这种统计方法将确保您删除不出现在常见停用词列表中的停用词...之后,为了精细化数据,我还使用了POS标记...并删除了在前两个步骤之后仍存在的专有名词。

3
我不是专家,但希望我的回答有意义。
从语料库中统计提取停用词听起来很有趣!除了使用常见的停用词列表(如NLTK中的列表)中的常规停用词外,我会考虑计算逆文档频率,就像其他答案中提到的那样。停用词不仅因语料库而异,还可能因问题而异。例如,在我处理的一个问题中,我使用了一组新闻文章的语料库,这里有许多与时间和地点有关的词语。这些都是至关重要的信息,如果统计删除像“今天”、“这里”等单词,将会严重影响我的结果。因为新闻文章不仅谈论一个特定的事件,还会涉及到过去或其他地方发生过的类似事件。
简言之,你需要考虑解决的问题,而不仅仅是语料库。
谢谢, Ramya

0
实际上,建立停用词的常见方法是使用最常见的单词(即通过DF在文档中)。建立一个包含前100、200、1000个单词的列表,然后审核它们。只需浏览列表,直到您发现一个您认为不应该成为停用词的单词。然后考虑跳过它或在此处打破列表。
在许多数据集中,您将拥有特定于领域的停用词。例如,如果您使用StackOverflow,则“java”和“c#”可能是停用词(如果您仍然使用标签,则实际上不会造成太大影响)。其他特定于领域的停用词可能是“code”,“implement”和“program”。

嘿,我的朋友,"stopword"并不是指常见的意思,请更改它。 - Ilya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接