【数据竞赛】“达观杯”文本智能处理挑战赛2

一、TF_IDF原理

TF-IDF(Term Frequency - Inverse Document Frequency,词频-逆文本频率)。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。 字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

它由两部分组成,TF和IDF。

  • TF(词频),即统计文本中各个词的出现频率,并作为文本特征。
  • IDF,即“逆文本频率”。一个词语普遍重要性的度量。

1、TF(item frequency)

词频TF(item frequency)
某一给定词语在该文本中出现次数。该数字通常会被归一化(分子一般小于分母),以防止它偏向长的文件,因为不管该词语重要与否,它在长文件中出现的次数很可能比在段文件中出现的次数更大。

T F ( x ) = M ( x ) M TF(x)=\frac{M(x)}{M} TF(x)=MM(x)
其中, M M M 表示文章的总词数, M ( x ) M(x) M(x) 表示词 x x x在文章中的出现次数。

2、逆向文件频率IDF(inverse document frequency)

逆向文件频率IDF(inverse document frequency):一个词语普遍重要性的度量。
主要思想是:如果包含词条 t 的文档越少, IDF越大,则说明词条具有很好的类别区分能力。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。

对于 x x x 的IDF的基本公式如下:
I D F ( x ) = l o g N N ( x ) IDF(x)=log\frac{N}{N(x)} IDF(x)=logN(x)N
其中, N N N代表语料库中文本的总数, N ( x ) N(x) N(x)代表语料库中包含词 x x x的文本总数。

为了避免特殊情况,对上式进行平滑处理,使得语料库中没有出现的词也可以得到一个合适的IDF值。最常见的IDF平滑后的公式如下
I D F ( x ) = l o g N + 1 N ( x ) + 1 + 1 IDF(x)=log\frac{N+1}{N(x)+1}+1 IDF(x)=logN(x)+1N+1+1

3、TF-IDF

T F − I D F ( x ) = T F ( x ) × I D F ( x ) TF-IDF(x)=TF(x)\times IDF(x) TFIDF(x)=TF(x)×IDF(x)

二、TF-IDF算法实现

使用两种方法实现TF-IDF:

  • 第一种方法是在用 CountVectorizer类 向量化之后再调用 TfidfTransformer类 进行预处理。
  • 第二种方法是直接用 TfidfVectorizer 完成向量化与TF-IDF预处理。

1、方法一

# -*- coding:utf-8 -*-
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer

corpus = ["I come to China to travel",
		  "This is a car polupar in China",
		  "I love tea and Apple",
		  "The work is to write some papers in science"]

# 向量化
vectorizer = CountVectorizer()

transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))
print(tfidf)

输出的各个文本各个词的TF-IDF值如下:

  (0, 16)	0.4424621378947393
  (0, 15)	0.697684463383976
  (0, 4)	0.4424621378947393
  (0, 3)	0.348842231691988
  (1, 14)	0.45338639737285463
  (1, 9)	0.45338639737285463
  (1, 6)	0.3574550433419527
  (1, 5)	0.3574550433419527
  (1, 3)	0.3574550433419527
  (1, 2)	0.45338639737285463
  (2, 12)	0.5
  (2, 7)	0.5
  (2, 1)	0.5
  (2, 0)	0.5
  (3, 18)	0.3565798233381452
  (3, 17)	0.3565798233381452
  (3, 15)	0.2811316284405006
  (3, 13)	0.3565798233381452
  (3, 11)	0.3565798233381452
  (3, 10)	0.3565798233381452
  (3, 8)	0.3565798233381452
  (3, 6)	0.2811316284405006
  (3, 5)	0.2811316284405006

2、方法二

TfidfVectorizer()

推荐使用:一步到位完成向量化,TF-IDF与标准化。

from sklearn.feature_extraction.text import TfidfVectorizer

corpus = ["I come to China to travel",
		  "This is a car polupar in China",
		  "I love tea and Apple",
		  "The work is to write some papers in science"]

tfidf2 = TfidfVectorizer()
re = tfidf2.fit_transform(corpus)
print(re)

输出的各个文本各个词的TF-IDF值和第一种的输出完全相同。

三、达观实践

采用方法二

from sklearn.feature_extraction.text import TfidfVectorizer

tfidf = TfidfVectorizer()
vectorizer = tfidf.fit(X_train['word_seg'])
X_train = vectorizer.fit_transform(X_train['word_seg'])
X_valid = vectorizer.fit_transform(X_valid['word_seg'])
print(X_train)

输出结果

  (0, 466302)	0.055682872725468624
  (0, 735749)	0.048322661901325954
  (0, 22559)	0.21754594654017237
  (0, 533960)	0.022913337050345733
  (0, 749018)	0.011395398329443985
  (0, 582264)	0.009735284700898725
  (0, 452264)	0.26752755253180194
  (0, 728808)	0.01526527311922612
  :	:
  (81820, 704892)	0.05852743581039402
  (81820, 432914)	0.06245002624655688
  (81820, 555672)	0.05787077716364361
  (81820, 130771)	0.065602189833585
  (81820, 412560)	0.08122709312494762
  (81820, 564061)	0.13065370153624445
  (81820, 19064)	0.06846498077803864
  (81820, 762455)	0.062386169747567895
  (81820, 52120)	0.060666492807123586
  (81820, 149165)	0.07180436011103326
  (81820, 490793)	0.07511200951474785
  (81820, 16951)	0.09416234746471083
  (81820, 311783)	0.09756707412477648
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值