目前很多应用都少不了搜索这个功能,搜索关键字最基础的是文档排序(这里的文档,可以是一篇文章,一个商品等)。文档排序的依据就是文档权重,也就是关键字与文档的相似度,即文本相似度。
文本相似度计算最基础算法是TF-IDF,BM25,今天就介绍TF-IDF这种算法原理。
TF-IDF全称是term frequency-inversedocument frequency,词频-逆向文档频率。TF-IDF是一种统计方法,评估一个关键词在系统的重要程度。从算法名字就可以看出,关键字的权重主要从2个方面体现,一个是关键字在文档中出现的频率越大,权重越大,一个是关键字在系统所有文档中出现的频率越大,权重越小。
举个例子,比如关键字『人工智能』,在某篇文档出现次数非常多,说明这篇文档大概率在讲人工智能,再比如关键字『计算机』,在这篇文档中也出现了很多次,但是我们并不会觉得这篇文档在讲计算机,那是因为『计算机』这个关键字很常见,在其他文档中出现的次数也非常多。
1、 TF词频计算
TF词频计算是关键字在文档出现的频率,考虑到文档有长短之分,TF通常会被归一化,防止偏向长的文件。
2、 IDF逆向文档频率计算
如果包含某个关键字的文档数越少,IDF越大,说明该关键字有更好的类别区分能力。
3、 TF-IDF计算
TF-IDF计算是将TF值和IDF值2个得分相乘,就得到一个关键词的TF-IDF的值。某个词在文章中的TF-IDF越大,那么一般而言这个词在这篇文章的重要性会越高,所以通过计算关键字在各个文档的TF-IDF值,由大到小排序,排在前面的文档是最相关的。
此外,有一些经常出现的毫无意义的词,比如中文经常出现的助词,『我们』『的』『你』等,这些词称为停用词,计算TF-IDF的时候,会抛弃这些词。
TF-IDF算法简单快速,应用也比较广泛。但也有很多不足,其简单的结构并没有考虑词语的语义信息,无法处理一词多义与一义多词的情况(消歧和对齐问题)。同时,也无法体现词的上下文的重要性,如果要体现词的上下文结构,可以使用word2vec算法支持,后续再介绍。