跳到主内容
快讯直播
AI智模界
AI 词典

停用词:BM25 要删,向量检索要留

一句话定义:停用词(Stopwords)指文本中出现频率极高、却几乎不携带区分信息的词,比如中文的“的、了、是、在”,英文的“the、a、of、is”。在信息检索里,它们通常会在建索引前被过滤掉,但在向量检索里,这个做法常常要反过来。

建倒排索引时删停用词的原因

传统关键词检索依赖倒排索引(Inverted Index):每个词对应一张“包含它的文档清单”。问题是,几乎每篇文档都含“的”。如果为“的”建一条索引,它的清单会长到覆盖整个库;用户搜“的”,系统等于把所有文档都取出来,毫无缩小范围的作用,还白占存储、拖慢查询。

也就是说,这类词对排序的贡献本就接近于零。在 AI 词典:TF-IDF">TF-IDF / BM25 里,一个词的权重与逆文档频率(IDF)挂钩:越常见的词 IDF 越低,“的”的 IDF 几乎贴着地板。删掉它,检索结果几乎不变,索引却小了一圈、快了一截。删停用词是优化,也是减轻噪声。

但要注意,删掉停用词有代价。最经典的例子是“我不喜欢吃辣”,若把“不”当停用词删掉,句子意思就反转了。因此,停用词表因语言和领域而异,没有普适版本;具体取舍以自己语料上的评测为准。

向量检索保留停用词的原因

稠密向量检索(Dense Retrieval)用的是嵌入模型(Embedding Model)。它先把整句话读成上下文,再压成一个向量,并非词袋。

第一,这些高频词承载语法和语义关系。“猫追狗”和“狗追猫”用的是同一批实词,差别全在语序和虚词上;“张三借李四的钱”到底谁欠谁,靠的也是虚词。全删了,模型看到的就是一堆散装名词。

第二,现代模型用子词分词(Subword Tokenization),本来就把词切得很碎,“the”往往只占一个 token。删掉它不会省多少算力,反而让输入变得不自然。模型训练时见的是正常句子,你喂给它删得坑坑洼洼的文本,等于制造分布外输入,效果可能不升反降。

稀疏检索(BM25 / TF-IDF)稠密向量检索(Embedding)
文本表示词袋,词与词独立上下文相关的整句向量
停用词的作用几乎不区分文档,IDF 极低承载语序、否定、时态、指代
删掉的代价很小可能改变语义、偏离训练分布
常见做法建索引和查询时过滤保留原文,不做停用词过滤

对实际工作的意义

做关键词检索或混合检索(Hybrid Search)时,稀疏分支可以照常用停用词表,但要为领域词留白名单(比如医疗文本里的“无”“未见”);稠密分支则应该保留原文,只做必要的 HTML 清洗、去重和截断,别顺手把“的、是、the”洗掉。

一句话记法:停用词并非“没用的词”,只是在词袋模型里性价比低。把词袋换成会读上下文的模型,判断就该跟着换。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。