文本相似度: TF-IDF 和 BM25算法(转载)

本文最后更新于 2023年1月8日 凌晨

文本相似度 — TF-IDF 和 BM25 算法

转载自博客园微笑sun的《文本相似度 — TF-IDF和BM25算法

1. TF-IDF算法

TFTF是指归一化后的词频,IDFIDF是指逆文档频率。给定一个文档集合DD,有d1,d2,d3,......,dnDd1,d2,d3,......,dn∈D。文档集合总共包含mm个词(注:一般在计算TF-IDF时会去除如 “的” 这一类的停用词),有w1,w2,w3,......,wmWw_1,w_2,w_3,......,w_m∈W。我们现在以计算词wiw_i在文档djd_j中的TFIDFTF-IDF指为例。TFTF 的计算公式为:

TF=freq(i,j)maxlen(j)TF = {freq(i,j)} \over {max_{len}(j)}

在这里freq(i,j)freq(i,j)wiw_idjd_j中出现的频率,maxlen(j)max_{len}(j)djd_j长度。

TFTF只能时描述词在文档中的频率,但假设现在有个词为“ 我们”,这个词可能在文档集DD中每篇文档中都会出现,并且有较高的频率。那么这一类词就不具有很好的区分文档的能力,为了降低这种通用词的作用,引入了IDFIDF

IDF的表达式如下:

IDF=log(len(D)n(i))IDF=log({len(D) \over n(i)})

在这里len(D)len(D)表示文档集合DD中文档的总数,n(i)n(i)表示含有wiw_i这个词的文档的数量。

得到TFTFIDFIDF之后,我们将这两个值相乘得到TFIDFTF-IDF的值:

TFIDF=TFIDFTF-IDF=TF \ast IDF

TFTF可以计算在一篇文档中词出现的频率,而IDFIDF可以降低一些通用词的作用。因此对于一篇文档我们可以用文档中每个词的TFIDFTF-IDF组成的向量来表示该文档,再根据余弦相似度这类的方法来计算文档之间的相关性。

2. BM25算法

BM25BM25算法通常用来做搜索相关性评分的,也是 ES 中的搜索算法,通常用来计算queryquery和文本集合DD中每篇文本之间的相关性。我们用QQ表示queryquery,在这里QQ一般是一个句子。在这里我们要对QQ进行语素解析(一般是分词),在这里以分词为例,我们对QQ进行分词,得到q1,q2,......,qtq1,q2,......,qt这样一个词序列。给定文本dDd∈D,现在以计算QQdd之间的分数(相关性),其表达式如下:

Score(Q,d)=i=1twiR(qi,d)Score(Q,d)=\sum\nolimits^t_{i=1}w_i \ast R(q_i,d)

上面式子中wiwi表示qiq_i的权重,R(qi,d)R(q_i,d)qiq_idd的相关性,Score(Q,d)Score(Q,d)就是每个语素qiq_idd的相关性的加权和。

wiw_i的计算方法有很多,一般是用IDFIDF来表示的,但这里的IDFIDF计算和上面的有所不同,具体的表达式如下:

wi=IDF(qi)=logNn(qi)+0.5n(qi)+0.5w_i=IDF(q_i)=log{N-n(q_i)+0.5 \over n(q_i)+0.5}

上面式子中NN表示文本集合中文本的总数量,n(qi)n(q_i)表示包含qiq_i这个词的文本的数量,0.5主要是做平滑处理。

R(qi,d)R(q_i,d)的计算公式如下:

R(qi,d)=fi(k1+1)fi+Kqfi(k2+1)qfi+k2R(q_i,d) = {f_i \ast (k_1+1) \over f_i + K} \ast {qf_i \ast (k_2+1) \over qf_i+k_2}

其中

K=k1(1b+bdlavgdl)K=k_1 \ast (1-b+b \ast {dl \over avgdl})

上面式子中fif_iqiq_i在文本dd中出现的频率,qfiqf_iqiq_iQQ中出现的频率,k1,k2,bk_1,k_2,b都是可调节的参数,dldl,avgdlavgdl分别为文本dd的长度和文本集DD中所有文本的平均长度。

一般qfi=1qf_i=1,取k2=0k_2=0,则可以去除后一项,将上面式子改写成:

R(qi,d)=fi(k1+1)fi+KR(qi,d)=fi \ast (k1+1)fi+K

通常设置k1=2k_1=2,b=0.75b=0.75。参数b的作用主要是调节文本长度对相关性的影响。


文本相似度: TF-IDF 和 BM25算法(转载)
https://muzing.top/posts/b5f0b89f/
作者
Muzing
发布于
2021年3月3日
更新于
2023年1月8日
许可协议