摘要:停用词(Stop Words)是自然语言处理领域的一个重要工具,通常被用来提升文本特征的质量,或者降低文本特征的维度。这里简单介绍了停用词的起源和定义,并用信息检索和主题建模的例子展示了停用词的价值,然后介绍了几个用来构造停用词表的简单方法,最后给出
1. 引言
我刚开始接触自然语言处理时,做的第一个练手任务是文本分类。在构造特征的时候,我选择了词袋模型,并按照教材里提示的方法、将词汇表中一些不重要词语给过滤掉,最后得到了一个维度为数千(远小于中文词汇表的大小)的特征。特征工程的结果,类似表1-1所示内容。讲真,过滤掉低得分词语后,分类器的效果提升很大。
表1-1 词语是否进入特征列表
序号 | 词语 | 得分 | 是否采用 |
1 | 一定 | 555 | 是 |
2 | 给 | 222 | 否 |
3 | 县长 | 666 | 是 |
4 | 一 | 233 | 否 |
5 | 个 | 333 | 否 |
6 | 惊喜 | 996 | 是 |
… | … | … | … |
这个练习让我意识到,在特定的NLP任务中,一些词语不能提供有价值的信息作用、可以忽略。这种情况在生活里也非常普遍。当我们的任务是判断图1-1所示信息的友好度时,橙色的“上”字虽然很显眼,但是没有太大的辅助作用——我们只需要分析“我从未见过有如此厚颜无耻……”,就可以知道丞相是在施展嘴遁骂人了。
在信息检索领域,大家称前面所述、可以忽略的词语为停用词(stopword)。
我们和机器在处理文本的时候,忽略停用词的操作,合理吗?这种操作是如何出现的呢?有没有一套方法,可以帮助我们合理确定停用词呢?本文是对这几个问题的简单回答。
2. 停用词表的价值和应用
在计算机科学发展的初期,祖师爷们的一个重要任务,是设计足够优秀的信息检索系统,以支持大家从上千篇文档中找到自己需要的那一篇。H. P. Luhn大爷(1957)发现,在我们的沟通过程中,一些词语相对于其他词语承载了更重要的信息。Luhn(1958)换了一个思维方向,认为我们在表示信息的时候,会使用一些高频出现、但是和“noise”一样不重要的词语。后来的学者们为这种高频、低价值的词语起了个名字,即前面提到的”停用词”。
停用词被提出后,经过从业者们几十年的发展,已经被应用在了几乎每一个信息检索系统中。
2.1停用词与信息检索系统
如表3-1,假设我们的文档库里只有3篇文档。一般来说,我们会用倒排索引来存储文档特征与文档编号的映射关系,以实现一个比较快的信息检索系统。如表2-2,是我为表2-1所示文档库构建的倒排索引。这个倒排索引看起来,不仅不会提升检索速度,反而会增加检索的复杂度——随着文档库的规模增加,倒排的作用会逐渐由负变正的。
表2-1文档库内容
文档编号 | 文档内容 | 分词结果 |
1 | 神木是个好地方。 | 榆林 |