NLP 中的停用词是在文本处理过程中经常被排除的常见词,因为它们出现频率高,对句子的意义贡献不大。例如,冠词(“a”、“an”、“the”),介词(“in”、“on”、“at”),连词(“and”、“but”、“or”)和代词(“I”、“he”、“she”)。 这些词通常被过滤掉,以减少噪音并专注于更有意义的词。 例如,在“The quick brown fox jumps over the lazy dog”这样的句子中,删除“the”和“over”会留下“quick brown fox jumps lazy dog”,这保留了核心语义内容。 像 NLTK 和 spaCy 这样的库为各种语言提供了预定义的停用词列表,但开发人员可以根据特定的项目需求自定义这些列表。
删除停用词的主要原因是为了提高搜索、主题建模或情感分析等任务的效率和准确性。 例如,在搜索引擎中,索引“apple pie recipe”而不包含“the”或“and”可以减少存储并加快查询速度。 类似地,在主题建模中,消除停用词有助于算法识别有意义的术语集群,例如“气候变化”,而不是“气候变化的影响”。 但是,也有例外。 在某些情况下,停用词带有关键意义。 例如,如果删除“not”,则否定短语(如“not good”)会失去其意图。 同样,在日语等语言中,助词(例如“は”或“が”)是停用词,但起着影响句子结构的语法作用。 开发人员必须评估删除停用词是否符合他们的任务——对于聊天机器人或机器翻译,保留它们可能会保留语法正确性。
使用 NLP 库可以轻松实现停用词删除。 在 Python 中,使用 NLTK 涉及加载预定义的列表和过滤标记
from nltk.corpus import stopwords
stop_words = set(stopwords.words('english'))
filtered_tokens = [word for word in tokens if word.lower() not in stop_words]
使用 spaCy,该过程已集成到其管道中
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("The cat sat on the mat")
filtered_tokens = [token.text for token in doc if not token.is_stop]
开发人员应该测试删除停用词是否可以提高模型的性能。 对于诸如文档分类之类的任务,它通常会有所帮助,但是对于依赖于语法的应用程序(例如,命名实体识别),保留停用词可能会更好。 始终使用特定于域的数据进行验证——医学文本可能会将“patient”视为关键字,而通用英语列表可能不会。