TF-IDF/BM25

TF-IDF

TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类

TF(Term Frequency)

词频(TF):表示词条(关键字)在文本中出现的频率,这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。

TFw=wTF_w = \frac{在一类中词条w出现的次数}{该类中所有的词条数目}

IDF(Inverse Document Frequency)

逆向文件频率(IDF):某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。

如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。

IDFw=log(w+1)IDF_w = log(\frac{语料库的文档总数}{包含词条w的文档书+1})

+1是为了避免分母为0。

TF-IDF

某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。

TFIDF=TFIDF=wlog(w+1)TF-IDF = TF * IDF = \frac{词条w数量}{单词总数}*log(\frac{文档总数}{包含w词条的文档数+1})

注:TF-IDF算法非常容易理解,并且很容易实现,但是其简单结构并没有考虑词语的语义信息,无法处理一词多义与一义多词的情况。

BM25

BM(Best Match) 计算query与文档相似度得分的算法,是TF-IDF的优化版本,25指25次算法迭代。

BM25的一般公式是:

Score(Q,d)=inWiR(qi,d)Score(Q,d)=\sum_i^nW_iR(q_i,d)

其中QQ表示一条query,qiq_i表示query中的单词,dd表示某个搜索文档,WiW_i表示单词权重,RR表示qiq_i和d的相关性。

BM25计算主要有以下几个部分:

  1. query中每个单词qiq_i与文档d之间的相关性:

S(qi,d)=(ki+1)tftdK+tftdS(q_i,d)=\frac{(k_i+1)tf_{td}}{K+tf_{td}}K=ki(1b+bLdL+aveK=k_i(1-b+b*\frac{L_d}{L+{ave}},其中tftdtf_{td}是单词在文档d中词频,LdL_d是文档d的长度,LaveL_{ave}是所有文档的平均长度,变量k1k_1是一个正的参数,用来标准化文章词频的范围,当k1=0k_1=0,就是一个二元模型,一个更大的值对应使用更原始的词频信息。bb是另一个可调参数(0<b<1),它是用决定使用文档长度来表示信息量的范围:当b为1时,时完全使用文档长度来权衡词的权重,当b为0表示不使用文档长度。

  1. 单词qiq_i与query之间的相似性:

当query很长时,我们还需要刻画单词与query之间的权重(对于短的query,这一项不是必须的),S(qi,Q)=(k3+1)tftqke+tftqS(q_i,Q)=\frac{(k_3+1)tf_{tq}}{k_e+tf_{tq}},这里tftqtf_{tq}表示单词在query中的词频,k3k_3是一个可调正参数,来矫正query中的词频范围。

  1. 每个单词的权重:

WiW_i表示分词权重,这里用IDF代替:IDF(qi)=log(Ndfi+0.5dfi+0.5)IDF(q_i)=log(\frac{N-df_i+0.5}{df_i+0.5})NN表示索引中全部文档数量,dfidf_i表示包含了分词qiq_i的文档个数。根据IDF的作用,对于qiq_i来说,包含qiq_i的文档数量越多,说明qiq_i的重要性越小,或者区分度越低,所以用IDF来刻画qiq_i与文档的相似度。

RSVd=tqlog(Ndft)(k1+1)tftdk1((1b)+bLdLave)+tftd(k3+1)tftqk3+tftqRSV_d = \sum_{ t\in q}log(\frac{N}{df_t})*\frac{(k_1+1)tf_{td}}{k_1((1-b)+b*\frac{L_d}{L_{ave}})+tf_{td}}*\frac{(k_3+1)tf_{tq}}{k_3+tf_{tq}}