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

关于Scikit-learn中TFIDF矩阵得分及norm参数的技术问询

Scikit-learn中TFIDF得分计算及norm参数影响解析

我来一步步拆解你关心的TFIDF计算逻辑,以及norm参数对结果的影响——咱们就盯着你指定的第一个文档('The wine was lovely')里的特征wine来算,绝对清晰明了。

第一步:整理测试场景的基础数据

首先把测试文档去掉停用词(stop_words='english'会过滤掉The、was这类无意义词),统计关键信息:

  • 文档1(对应test_doc[0]):处理后为 ['wine', 'lovely'],总有效词数2,wine出现1次
  • 所有文档的总数量 N=4
  • 特征wine的文档频率DF=2(出现在文档1和文档3中)

第二步:TFIDF的核心公式(Scikit-learn默认实现)

Scikit-learn的TfidfVectorizer默认参数下,TFIDF计算分为四部分:

  1. 逆文档频率(IDF):默认开启smooth_idf=True(避免词从未出现时IDF无限大),公式为:
    IDF(t) = ln((N + 1)/(DF(t) + 1)) + 1
    
  2. 词频(TF):默认sublinear_tf=False,直接取词在文档中的原始出现次数
  3. TFIDF原始得分:TF * IDF
  4. 归一化(由norm参数控制):指定norm=l2会对文档向量做L2归一化;norm=None则跳过这一步

第三步:norm=None时的wine得分计算

先计算wine的IDF:

IDF(wine) = ln((4+1)/(2+1)) + 1 = ln(5/3) + 1 ≈ 0.5108 + 1 = 1.5108

文档1中wine的TF是1(出现1次),所以原始TFIDF得分:

TFIDF(wine, doc1) = 1 * 1.5108 ≈ 1.5108

第四步:norm=l2时的wine得分计算

L2归一化需要先算出文档1所有特征的原始TFIDF得分,再除以该文档向量的L2范数:

  1. 先算文档1中另一个特征lovely的IDF和TFIDF:
    IDF(lovely) = ln((4+1)/(1+1)) +1 = ln(5/2)+1 ≈0.9163+1=1.9163
    TFIDF(lovely, doc1) =1 *1.9163≈1.9163
    
  2. 计算文档1未归一化向量的L2范数:
    L2范数 = sqrt( (1.9163)^2 + (1.5108)^2 ) ≈ sqrt(3.672 + 2.282) ≈ sqrt(5.954) ≈2.440
    
  3. 最后得到归一化后的wine得分:
    归一化得分 = 1.5108 / 2.440 ≈0.619
    

总结norm参数的影响

  • norm=None:直接保留TF*IDF的原始数值,得分反映词在文档中的重要性绝对值,不同文档的得分范围差异可能很大
  • norm=l2:将每个文档的TFIDF向量缩放为单位向量,得分是相对值,保证同一文档内所有特征的得分平方和为1,方便不同文档之间的向量比较

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:42:37