前言
当我们使用搜索引擎时,它总是会把相关性高的内容显示在前面,相关性低的内容显示在后面。那么,搜索引擎是如何计算关键字和内容的相关性呢?这里介绍2种重要的相似度算法:TF-IDF和BM25。
TF-IDF是Lucene上一代(6.0以前)相似度算法,BM25是Lucene新一代(6.0以后)正使用的相似度算法。
先举个例子。假如,我们想找和“Lucene”相关的文章。可以想一下,那些内容里只出现过一次“Lucene”的文章,有可能是在讲某种技术,顺便提到了Lucene这个工具。而那些出现了两三次“Lucene”的文章,很可能是专门讨论Lucene的。通过直觉,我们可以得出判断:关键字出现的次数越多,文档与关键字的匹配度越高。
TF
Term Frequency,缩写为TF。通常叫做“词频”,表示文档中关键字出现的次数。
通常TF越大,相关性越高。
但是,你可能会发现一个问题。例如一篇小短文里出现了一次“Lucene”,而一部好几百页的书里提到两次“Lucene”,此时我们就不能说后者相关度更高了。为了消除文档本身大小的影响,在计算TF时引入文档长度这个参数,做文档长度标准化
TF socre = 某个词在文档中出现的次数 / 文档的长度
举例:某文档D,长度为200,其中“Lucene”出现了2次,“的”出现了20次,“原理”出现了3次,那么
TF(Lucene|D) = 2/200 = 0.01
TF(的|D) = 20/200 = 0.1
<