You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何手动计算与Sklearn TfidfVectorizer(binary=True)一致的TF-IDF值?

手动计算与sklearn一致的TF-IDF值(binary=True场景)

先明确TfidfVectorizer(binary=True)的核心规则

  • 词频(TF):binary=True时,TF不是出现次数,而是该词在文档中是否出现——出现记1,不出现记0
  • 逆文档频率(IDF):sklearn默认用平滑版公式:
    IDF = ln((总文档数 + 1)/(包含该词的文档数 + 1)) + 1
  • 最终TF-IDF:先算TF * IDF,再对每个文档做L2归一化(每个值除以该文档所有TF-IDF值的平方和的平方根)

结合你的示例计算

你的示例有2篇文档:

  • 文档0:bad delivery
  • 文档1:bad product
    总文档数N=2

步骤1:计算每个词的IDF

先统计每个词的出现文档数:

  • bad:出现在2篇文档
  • delivery:出现在1篇文档
  • product:出现在1篇文档

代入公式计算IDF:

  • IDF(bad) = ln((2+1)/(2+1)) + 1 = ln(1) + 1 = 0 + 1 = 1
  • IDF(delivery) = ln((2+1)/(1+1)) + 1 ≈ 0.4055 + 1 = 1.4055
  • IDF(product) = ln((2+1)/(1+1)) + 1 ≈ 1.4055

步骤2:计算原始TF-IDF(TF*IDF)

  • 文档0:
    • bad: 1*1 = 1
    • delivery: 1*1.4055 ≈ 1.4055
    • product: 0*1.4055 = 0
  • 文档1:
    • bad: 1*1 = 1
    • delivery: 0*1.4055 = 0
    • product: 1*1.4055 ≈ 1.4055

步骤3:对每个文档做L2归一化

L2归一化公式:归一化后的值 = 原始值 / sqrt(文档内所有原始值的平方和)

  • 文档0的平方和:1² + (1.4055)² + 0² ≈ 1 + 1.9754 = 2.9754
    平方根:sqrt(2.9754) ≈ 1.725
    归一化结果:

    • bad: 1/1.725 ≈ 0.5797
    • delivery: 1.4055/1.725 ≈ 0.8148
    • product: 0
  • 文档1的平方和与平方根和文档0相同(1² + 0² + (1.4055)² ≈ 2.9754,平方根≈1.725)
    归一化结果:

    • bad: 1/1.725 ≈ 0.5797
    • delivery: 0
    • product: 1.4055/1.725 ≈ 0.8148

这个结果和你代码输出完全一致。


内容的提问来源于stack exchange,提问作者Renu Hanjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:45:36