sklearn-TfidfVectorizer 计算过程详解

计算公式

下面为 TfidfVectorizer 的计算方法,此外还有其他公式计算 tf-idf 值

t f − i d f = t f ( t , d ) ∗ i d f ( t ) tf-idf=tf(t,d)*idf(t) tfidf=tf(t,d)idf(t)

t f ( t , d ) tf(t,d) tf(t,d) 表示在文本 d 中词项 t 出现的词数

i d f ( t ) = ln ⁡ 1 + n d 1 + d f ( d , t ) + 1 idf(t)=\ln\frac{1+n_d}{1+df(d,t)}+1 idf(t)=ln1+df(d,t)1+nd+1

i d f ( t ) ​ idf(t)​ idf(t) n d ​ n_d​ nd 表示训练集文本数, d f ( d , t ) ​ df(d,t)​ df(d,t) 表示包含词项 t 的文档总数

手动计算

例如有四句话,每句话对应一个文本

“Chinese Beijing Chinese”,

“Chinese Chinese Shanghai”,

“Chinese Macao”,

“Tokyo Japan Chinese”

计算第一句中 Chinese 和 Beijing 的 tf-idf 值

t f ( C h i n e s e , s e n t e n c e 1 ) = 2 tf(Chinese, sentence1)=2 tf(Chinese,sentence1)=2

t f ( B e i j i n g , s e n t e n c e 1 ) = 1 tf(Beijing, sentence1)=1 tf(Beijing,sentence1)=1

i d f ( C h i n e s e ) = ln ⁡ 1 + 4 1 + 4 + 1 = 1 idf(Chinese)=\ln \frac{1+4}{1+4}+1=1 idf(Chinese)=ln1+41+4+1=1

i d f ( B e i j i n g ) = ln ⁡ 1 + 4 1 + 1 + 1 = 1.9 idf(Beijing)=\ln \frac{1+4}{1+1}+1=1.9 idf(Beijing)=ln1+11+4+1=1.9

对 tf 和 idf 值作乘积得到 tf-idf 值

t f − i d f ( C h i n e s e , s e n t e n c e 1 ) = t f ( C h i n e s e , s e n t e n c e 1 ) ∗ i d f ( C h i n e s e ) = 2 tf-idf(Chinese, sentence1)=tf(Chinese, sentence1)*idf(Chinese)=2 tfidf(Chinese,sentence1)=tf(Chinese,sentence1)idf(Chinese)=2

t f − i d f ( B e i j i n g , s e n t e n c e 1 ) = t f ( B e i j i n g , s e n t e n c e 1 ) ∗ i d f ( B e i j i n g ) = 1.9 tf-idf(Beijing, sentence1)=tf(Beijing, sentence1)*idf(Beijing)=1.9 tfidf(Beijing,sentence1)=tf(Beijing,sentence1)idf(Beijing)=1.9

代码运行

在这里插入图片描述

每一句话对应一个 vector,每个 vector 里面的值按照上面词语的顺序显示,可以看到 beijing 对应的是 1.9,后面是 chinese 对应 2,与手动计算相同。

TfidfVectorizer 中 norm 项默认是 l2 正则化,按照上面的流程不修改 norm=None 时的 array 如下所示

在这里插入图片描述

ngram_range

TfidfVectorizer 类中有 ngram_range 参数,相当于用 TFidf 方法训练 ngram 的词向量

在这里插入图片描述

可见计算方法和上面一样,只是增加了 ngram 多出来的词并计算对应的词向量

参考资料

sklearn-TfidfVectorizer彻底说清楚

源码地址

  • 11
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值