美文网首页
TFIDF与BM25

TFIDF与BM25

作者: xieyan0811 | 来源:发表于2022-06-25 14:26 被阅读0次

TFIDF

先复习一下 tfidf,tf是词频,即某个词 i 在 文章 j 中出现的频率。分母是文章中所有词的个数,分母是词 i 出现的次数。tf越高说明该词越重要,对于短文本匹配,每个词一般只出现一次,tf 的大小就取决于分母,即文章的长度。
tf_{i,j}=\frac{n_{i,j}}{\sum_kn_{k,j}}
idf是逆文档频率,计算该词出现在所有文章中的频率,此时,分母是包含该关键字 i 的文章数,分子是所有文章数 N。用log相当于趋势不变,数值变小了。该词出现越多,分子越大,idf值越小,比如:"的" 经常出现,因此不是关键词。当词 i 在 文章 j 中完全不出现,分母为0,因此给分母加 1。
idf_i=log\frac{N}{df_i+1}
tf和idf的乘积就是词 i 在文章 j 中的重要性。
tfidf_{i,j}=tf_{i,j} \times idf_i
在搜索中,计算搜索串中的多个关键词 与 文章 j 的相似度:将各词的 tfidf 相加:
similarity = \sum_{i} tfidf_{i,j}
搜索之前,需要知道各个词在已知文章集中的分布。

BM25

BM25是基于TF-IDF的改进算法,BM 是Best Match最佳匹配的缩写,25指的是第25次算法迭代。

idf 部分只做了微调:
idf_i=log\frac{N-df_i+0.5}{df_i+0.5}
其中分母部分从所有文章中减去了包含 i 的文章,0.5用于平滑。

接下来,又对 tf 做了如下调整:
tfscore= \frac {(k + 1) \times tf} { k \times (1 - b + b \times \frac{L_d}{L_{avg}}) + tf}
这里引入了超参数 k 和 b。

先看分母中的括号,Ld是文章长度,Lavg是所有文章的平均长度,当文章长度与平均长度一致时,括号里值为 1,相当于未乘系数;当文章比平均长度短时,括号里的值小于1,分母越小,上式结果越大,也就是说文章越短,每一个词越重要,这也与直觉一致。另外,长度的影响与b有关,b越大,影响越大,b的取值在0-1之间,当b为0时,完全不考虑长度的影响,b 一般取值为 0.75。

k 用于标准化词频的范围,将 tf 值压缩到 0~k+1 之间,其函数曲线如下:
tfscore = \frac{(k + 1) \times tf}{k + tf}

其横轴为 tf,纵轴为 tfscore,分别针对 k=0,1,2,3,4 画图。当k=0时,tfscore为 1,不考虑词频的影响,而 k 越大词频越趋近于原始词频。因此,如果文章只包含短文本,或者无需关注词出现几次,则可将其设成 k=0。

有时还考虑到词 i 在搜索文本中的频率,上式扩展成:
\sum_{t \in q} log[\frac{N-df_i+0.5}{df_i+0.5}] \times \frac{(k_1+1)tf_{td}}{k_1(1-b+b \times \frac{L_d}{L_{avg}})+tf_{td}} \times \frac{(k_2+1)tf_{tq}}{k_2+tf_{tq}}
其中td指被搜索文本,tq指搜索文本。

这样我们就可以细化的控制 tf 的占比,以及文章长度的影响,以适应各种不同情况下的搜索和匹配任务。注意设置参数k和b。

之前的BM25算法集成在gensim里,最新的版本没有了,如果想使用,可以从旧版本里抽出来。

相关文章

  • 近期中文NLP阅读列表

    1 简单模型 1.1 TFIDF与BM25 外网链接:https://www.jianshu.com/p/8cd3...

  • TFIDF与BM25

    TFIDF 先复习一下 tfidf,tf是词频,即某个词 i 在 文章 j 中出现的频率。分母是文章中所有词的个数...

  • 文本摘要生成小记

    方法分类: 抽取式(传统基于统计学的)相关算法:Text rank排序算法、BM25算法、TFIDF 生成式(Au...

  • BM25和TFIDF原理及区别

    1,TF−IDF算法 TF是指归一化后的词频,IDF是指逆文档频率。给定一个文档集合D,有d1,d2,d3,......

  • BIM、TfIdf、BM25和BM25F

    假设及公式推导 概率检索模型:BIM+BM25+BM25F [https://www.cnblogs.com/be...

  • tfidf与CountVectorizer详解

    使用 CountVectorizer 计算字数 CountVectorizer不同于bagofword的地方在于其...

  • 经典检索算法:BM25原理

    本文cmd地址:经典检索算法:BM25原理 bm25 是什么? bm25 是一种用来评价搜索词和文档之间相关性的算...

  • tfidf

    NLP的应用范围:情感分析,文本相似度计算,文本分类。 问题的关键在于,如何把文本表示成计算机能懂的数据形式? 1...

  • 文本特征提取-TfidfVectorizer和CountVect

    Bag of words(词袋) 统计每个词在文档中出现的次数 输出为: tfidf 计算文档中每个词的tfidf...

  • Hanlp分词实例:Java实现TFIDF算法

    算法介绍 最近要做领域概念的提取,TFIDF作为一个很经典的算法可以作为其中的一步处理。 关于TFIDF算法的介绍...

网友评论

      本文标题:TFIDF与BM25

      本文链接:https://www.haomeiwen.com/subject/icpivrtx.html