【数据竞赛】“达观杯”文本智能处理挑战赛2
文章目錄
- 一、TF_IDF原理
- 1、TF(item frequency)
- 2、逆向文件頻率IDF(inverse document frequency)
- 3、TF-IDF
- 二、TF-IDF算法實現
- 1、方法一
- 2、方法二
- 三、達觀實踐
一、TF_IDF原理
TF-IDF(Term Frequency - Inverse Document Frequency,詞頻-逆文本頻率)。TF-IDF是一種統計方法,用以評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。 字詞的重要性隨著它在文件中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。
它由兩部分組成,TF和IDF。
- TF(詞頻),即統計文本中各個詞的出現頻率,并作為文本特征。
- IDF,即“逆文本頻率”。一個詞語普遍重要性的度量。
1、TF(item frequency)
詞頻TF(item frequency):
某一給定詞語在該文本中出現次數。該數字通常會被歸一化(分子一般小于分母),以防止它偏向長的文件,因為不管該詞語重要與否,它在長文件中出現的次數很可能比在段文件中出現的次數更大。
TF(x)=M(x)MTF(x)=\frac{M(x)}{M}TF(x)=MM(x)?
其中,MMM 表示文章的總詞數,M(x)M(x)M(x) 表示詞xxx在文章中的出現次數。
2、逆向文件頻率IDF(inverse document frequency)
逆向文件頻率IDF(inverse document frequency):一個詞語普遍重要性的度量。
主要思想是:如果包含詞條 t 的文檔越少, IDF越大,則說明詞條具有很好的類別區分能力。某一特定詞語的IDF,可以由總文件數目除以包含該詞語之文件的數目,再將得到的商取對數得到。
對于 xxx 的IDF的基本公式如下:
IDF(x)=logNN(x)IDF(x)=log\frac{N}{N(x)}IDF(x)=logN(x)N?
其中,NNN代表語料庫中文本的總數,N(x)N(x)N(x)代表語料庫中包含詞xxx的文本總數。
為了避免特殊情況,對上式進行平滑處理,使得語料庫中沒有出現的詞也可以得到一個合適的IDF值。最常見的IDF平滑后的公式如下:
IDF(x)=logN+1N(x)+1+1IDF(x)=log\frac{N+1}{N(x)+1}+1IDF(x)=logN(x)+1N+1?+1
3、TF-IDF
TF?IDF(x)=TF(x)×IDF(x)TF-IDF(x)=TF(x)\times IDF(x)TF?IDF(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 CountVectorizercorpus = ["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.28113162844050062、方法二
TfidfVectorizer()類
推薦使用:一步到位完成向量化,TF-IDF與標準化。
from sklearn.feature_extraction.text import TfidfVectorizercorpus = ["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 TfidfVectorizertfidf = 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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据竞赛】“达观杯”文本智能处理挑战赛
- 下一篇: 【工具】镜像源