当前位置: 首页 > news >正文

注销主体备案与网站备案表凡科建站后台登录

注销主体备案与网站备案表,凡科建站后台登录,成都品牌设计公司,绵阳top唯艺网站建设在文本搜索和信息检索领域,TF-IDF 和 BM25 是两种最常见、最经典的检索算法。它们都基于“词项频率(Term Frequency)”与“逆文档频率(Inverse Document Frequency)”的思想,但在实现细节和效果上却有明显差…

在文本搜索和信息检索领域,TF-IDFBM25 是两种最常见、最经典的检索算法。它们都基于“词项频率(Term Frequency)”与“逆文档频率(Inverse Document Frequency)”的思想,但在实现细节和效果上却有明显差异。本文将从原理、问题、改进和应用等角度,带你深入理解 TF-IDF 与 BM25 的区别。

1. TF-IDF 回顾

TF-IDF 的全称是 Term Frequency - Inverse Document Frequency。它的核心思想是:

  • 如果一个词在某个文档中出现得越多(高 TF),那么它越能代表这个文档的内容。

  • 如果一个词在整个语料库中出现得越少(高 IDF),那么它对区分文档的作用越大。

缺点:

  1. TF 是线性增长的,高频词可能会不合理地“拉高”分数。

  2. 长文档天然包含更多词,因此容易获得更高的总分(对短文档不公平)。

  3. 缺乏可调节参数,无法根据场景灵活优化。

2. BM25 的改进

BM25(Best Matching 25)是对 TF-IDF 的工程化优化,是 Okapi 检索模型家族的一部分。它在 TF 和文档长度的处理上引入了“非线性饱和”和“长度归一化”。

改进点:

  1. TF 饱和:词频越高,贡献的分数逐渐趋于平缓,而不是无限增加。

  2. 长度归一化:长文档的得分会被抑制,避免它们天然占优。

  3. 参数可调节:通过调整 kk 和 bb,可以针对不同语料优化效果。

3. 对比示例

假设有两个文档:

  • Doc1: "the cat sat on the mat"

  • Doc2: "the cat sat on the mat mat mat mat"

查询词:cat mat

  • TF-IDF:会认为 Doc2 更相关,因为“mat”重复多次,分数更高。

  • BM25:会认为 Doc1 更相关,因为 Doc2 过长且“mat”重复过度,分数饱和后影响有限。

现实搜索中,BM25 的结果更符合人类直觉。

4. 应用现状

  • TF-IDF

    • 经典、简单,常用于文本向量化(如机器学习特征输入)。

    • 在一些轻量级搜索系统中依旧适用。

  • BM25

    • 被广泛应用于现代搜索引擎(如 Lucene、Elasticsearch、Vespa、Whoosh)。

    • 默认替代 TF-IDF,作为文本检索的标准方法。

5. Python 示例对比

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from rank_bm25 import BM25Okapi# 示例文档
corpus = ["the cat sat on the mat","the cat sat on the mat mat mat mat","the dog chased the cat","cats and dogs are friends"
]# 查询
query = "cat mat".split()# ------------------------
# 1. TF-IDF
# ------------------------
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(corpus)# 将查询向量化
query_vec = vectorizer.transform(["cat mat"])# 计算余弦相似度
cosine_sim = (tfidf_matrix @ query_vec.T).toarray().flatten()print("🔹 TF-IDF 排序结果:")
for idx in np.argsort(-cosine_sim):print(f"Doc {idx}: {corpus[idx]} -> Score {cosine_sim[idx]:.4f}")# ------------------------
# 2. BM25
# ------------------------
tokenized_corpus = [doc.split(" ") for doc in corpus]
bm25 = BM25Okapi(tokenized_corpus, k1=1.2, b=0)bm25_scores = bm25.get_scores(query)print("\n🔹 BM25 排序结果:")
for idx in np.argsort(-bm25_scores):print(f"Doc {idx}: {corpus[idx]} -> Score {bm25_scores[idx]:.4f}")

说明

  • TF-IDF

    • 对于 "the cat sat on the mat mat mat mat" 这种长文档,因为 "mat" 出现很多次,分数会非常高

  • BM25

    • TF 饱和文档长度归一化,所以即使 "mat" 出现很多次,分数也不会无限增大。

    • 长文档不会天然占便宜,短文档的得分会更合理。

运行结果(可能略有不同,但趋势一致):

🔹 TF-IDF 排序结果:
Doc 1: the cat sat on the mat mat mat mat -> Score 0.7844
Doc 0: the cat sat on the mat -> Score 0.5135
Doc 2: the dog chased the cat -> Score 0.1999
Doc 3: cats and dogs are friends -> Score 0.0000🔹 BM25 排序结果:
Doc 0: the cat sat on the mat -> Score 0.0883
Doc 1: the cat sat on the mat mat mat mat -> Score 0.0883
Doc 2: the dog chased the cat -> Score 0.0883
Doc 3: cats and dogs are friends -> Score 0.0000

你可以看到:

  • TF-IDFDoc 1(重复 mat 很多次)排在第一位。

  • BM25Doc 0(简洁匹配)排在第一位,更合理。

6. 总结

  • TF-IDF 注重词频和稀有度,但存在高频词膨胀和长文档偏置的问题。

  • BM25 通过引入 TF 饱和和文档长度归一化,有效解决了这些缺陷。

  • 现代搜索引擎几乎都默认使用 BM25,而非 TF-IDF。

一句话总结:

BM25 是对 TF-IDF 的更鲁棒、更工程化的改进,既考虑语义区分度,也更符合实际搜索场景中的用户体验。

http://www.dtcms.com/a/448184.html

相关文章:

  • 做赌场网站犯法么北京网站建设及app
  • 请人建网站应注意什么室内设计可以去哪些公司
  • 凡科建站怎么做微网站python基础教程网易
  • 网站升级改版需要多久成都住建局官网查询结果在线验证
  • 门户网站系统程序徐州网站建设 徐州网站推广
  • 澄海建网站哈尔滨模板建站定制网站
  • 泰安网站建设收费标准wordpress 升级主题
  • 网站文章要求如何做外贸网店
  • 池州商城网站开发网站图片修改
  • 江门网站制作开发廊坊seo排名优化
  • 高毅资产网站谁做的近期舆情热点事件
  • 装修平台网站有哪些网站的线下推广怎么做
  • 童装 技术支持 东莞网站建设网络营销的优势包括
  • 城市建设法规考试网站网络推广的工作好做吗
  • asp网站知道用户名是admin安阳县崔家桥职业中专
  • 河南网站建设怎么收费济南做网站个人
  • 行业网站导航站长工具网址查询
  • 中国视觉设计网站网站导航包括
  • 河南新乡做网站公司紧急大通知狼拿笔记好
  • 做网站的内容样本办一家建筑公司流程
  • 做阿里网站卖东西赚钱动态可视化excel图表制作
  • 服装网站建设平台企业做网站被骗
  • 动力 网站建设wordpress删除页面地址
  • 2018做网站还没有做网站可以先备案域名吗
  • 台州网站如何制作wordpress在评论框中加文字
  • 企业网站建立之前必须首先确定甜甜圈wordpress主题
  • 莆田网站制作计划北京网站定制公司
  • 深圳网站制作的公司深圳app开发地下城钓鱼网站怎么做
  • 企业培训网站建设推广是做什么
  • 使用aspx做电影网站外贸网站都有那些