比賽:達觀杯
比賽官方對數據的說明是數據包含兩個文件:train_set.csv和test_set.csv
具體說明:
a.
- 下載數據,讀取數據,觀察數據
- 將訓練集拆分爲訓練集和驗證集
- 分享自己對數據以及賽題的理解和發現
PS. 電腦爆內存的,可以先提取5000條數據進行實踐~ 或者羣內求助一下
達觀杯比賽鏈接:https://m.dcjingsai.com/competition-message?name=“達觀杯”文本智能處理挑戰賽&cmptId=229
參考資料
達觀杯十強分享彙總ppt 鏈接:https://-pan.baidu.com/s/10hHR7JLnJas9GjI4-7vgFQ 提取碼:hx8t
b.
學習TF-IDF理論並實踐,使用TF-IDF表示文本
要求:分享學習筆記和代碼,【只有代碼的等於沒有完成】
參考資料
1)CS 224:https://www.bilibili.com/video/av41393758/?p=2
2)https://github.com/Heitao5200/DGB/blob/master/feature/feature_code/tfidf.py
一.數據描述
train_set.csv:此數據集用於訓練模型,每一行對應一篇文章。文章分別在“字”和“詞”的級別上做了脫敏處理。共有四列:
文章的索引(id),文章正文在“字”級別上的表示,即字符相隔正文(article),“詞”級別上的表示, 即詞語相隔正文(word_seg)
,分類(class)。
test_set.csv:此數據用於測試。數據格式同train_set.csv,但不包含分類class。
二.TF-IDF簡介
TF-IDF(Term Frequency-Inverse DocumentFrequency, 詞頻-逆文件頻率),一種用於資訊檢索和資訊探勘的常用加權技術。
TF-IDF是一種統計方法,用以評估一字詞對於一個文件集或一個語料庫中的其中一份文件的重要程度。字詞的重要性隨着它在文件中出現的次數成正比增加,但同時會隨着它在語料庫中出現的頻率成反比下降。TF-IDF加權的各種形式常被搜尋引擎應用,作爲文件與用戶查詢之間相關程度的度量或評級。
相關原理:
詞頻TF(item frequency):某一給定詞語在該文本中出現次數。該數字通常會被歸一化(分子一般小於分母),以防止它偏向長的文件,因爲不管該詞語重要與否,它在長文件中出現的次數很可能比在段文件中出現的次數更大。
需要注意的是有一些通用詞對文章主題沒有太大作用,如“的”“是”等,而有一些頻率出現少的詞如一些專業詞更能表現文章主題,所以爲詞語設置權重,權重的設計滿足:一個詞預測主題的能力越強,權重越大,反之,權重越小。也就是說,一些詞只在很少幾篇文章中出現,那麼這樣的詞對文章主題的判斷能力很大,這些詞的權重應該設計的較大。IDF完成這樣的工作。
逆向文件頻率IDF(inverse document frequency):一個詞語普遍重要性的度量。主要思想是:如果包含詞條t的文檔越少, IDF越大,則說明詞條具有很好的類別區分能力。某一特定詞語的IDF,可以由總文件數目除以包含該詞語之文件的數目,再將得到的商取對數得到。
相關公式:
計算TF:
計算IDF:
注:此處分母+1是爲了避免當所有文檔都不包含該詞時,分母爲0的情況
計算TF-IDF:
公式中,我們可以看出TF-IDF與一個詞在文檔中出現的次數成正比,與該詞在整個語言中該出現的次數成反比。
某一特定文件內的高詞語頻率,以及該詞語在整個文件集合中的低文件頻率,可以產生出高權重的TF-IDF。因此,TF-IDF傾向於過濾掉常見的詞語,保留重要的詞語。
三.思路描述
1.用python的pandas讀取數據,這裏讀取train_set.csv;
2.對數據的數量,異常數據進行篩查;
3.用python對數據進行簡單操作,拆分train_set.csv爲訓練集和驗證集,大概可以按照4:1來拆分;
4.對數據進行建模;
四.實踐過程
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
#讀入數據
my_data = pd.read_csv('../train_set.csv', nrows = 5000)
#數據檢查
my_data.isnull().sum()
my_data['class'].value_counts()
#數據分片
X, y = my_data.ix[:,:-1], my_data.ix[:,-1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)
train_data = pd.DataFrame(np.column_stack((X_train, y_train)), columns = my_data.columns)
test_data = pd.DataFrame(np.column_stack((X_test, y_test)), columns = my_data.columns)
print(train_data.shape, test_data.shape)
#調包求TF-IDF值
tfidf = TfidfVectorizer()
vectorizer = tfidf.fit(X_train['word_seg'])
X_train = vectorizer.fit_transform(X_train['word_seg'])
y_train = vectorizer.fit_transform(y_train['word_seg'])
print(X_train)
參考:
https://blog.csdn.net/u012736685/article/details/89056111