Yhzhtk / note

知识代码笔记
https://github.com/Yhzhtk/note/issues
MIT License
108 stars 11 forks source link

搜索索引之分词 #49

Open Yhzhtk opened 6 years ago

Yhzhtk commented 6 years ago

分词就是对一段文本,通过规则或者算法分出多个词,每个词作为搜索的最细粒度一个个单字或者单词。只有分词后有这个词,搜索才能搜到,分词的正确性非常重要。分词粒度太大,搜索召回率就会偏低,分词粒度太小,准确率就会降低。如何恰到好处的分词,是搜索引擎需要做的第一步。

正确性&粒度

分词的粒度并不是越小越好,他会降低准确率,比如搜索 “中秋” 也会出现上条结果,而且粒度越小,索引词典越大,搜索效率也会下降,后面会细说。

如何准确的把控分词,涉及到 NLP 的内容啦,这里就不展开了。

停用词

很多语句中的词都是没有意义的,比如 “的”,“在” 等副词、谓词,英文中的 “a”,“an”,“the”,在搜索是无任何意义的,所以在分词构建索引时都会去除,降低不不要的索引空间,叫停用词 (StopWord)。

通常可以通过文档集频率和维护停用词表的方式来判断停用词。

词项处理

词项处理,是指在原本的词项上在做一些额外的处理,比如归一化、词形归并、词干还原等操作,以提高搜索的效果。并不是所有的需求和业务都要词项处理,需要根据场景来判断。

1. 归一化

这样查询 U.S.A. 也能得到 USA 的结果,同义词可以算作归一化处理,不过同义词还可以有其他的处理方式。

2. 词形归并(Lemmatization)

针对英语同一个词有不同的形态,可以做词形归并成一个,如:

• am, are, is -> be • car, cars, car's, cars' -> car • the boy's cars are different colors -> the boy car be different color

3. 词干还原(Stemming)

通常指的就粗略的去除单词两端词缀的启发式过程

• automate(s), automatic, automation -> automat.

英文的常见词干还原算法,Porter算法。