计算原理 第一项c(w,q)就是搜索q中词w的词频 第三项是词w的逆文档频率,M是所有文本的个数,df(w)是出现词w的文本个数 中间的第二项是关键,实质是词w的TF值的变换,c(w,d)是词w在文本d中的词频。首先是一个TF Transformation,目的是防止某个词的词频过大,经过下图中公式的约束,词频的上限为k+1,不会无限制的增长。例如,一个词在文本中的词频无论是50还是100,都说明文本与这个词有关,但相关度不可能是两倍关系。 优点 开源实现 snownlp gensim_bm25 rank_bm25 实践 一般流程(对于中文) 构建corpus 1.1. 构建停用词词表(可加入部分高频词) 1.2. 分词 1.3. 去除停用词 训练BM25模型 使用模型计算相似性 gensim的使用 from gensim.summarization import bm25 def test_gensim_bm25(): corpus = [ ['来', '问', '几', '个', '问题', '第1', '个', '就', '是', '60', '岁', '60', '岁', '的', '时候', '退休', '是', '时间', '到', '了', '一定', '要', '退休', '还是', '觉得', '应该', '差'