NLP 學(xué)習(xí)3

Task3 基于機器學(xué)習(xí)的文本分類

文本表示方式

  1. one-hot
  2. Bags of Words 詞袋模型
    1.若采用只記錄是否出現(xiàn)蚪黑,即0/1的形式廓潜。只能表現(xiàn)出詞是否出現(xiàn)的差異迄本,并沒有刻畫詞出現(xiàn)次數(shù)多少的差異货徙。
    2.若采用記錄頻數(shù)的方式澜躺,那么長文本的比短文本的出現(xiàn)次數(shù)可能更多。
    3.若采取記錄頻率的方式淋纲,但并沒有刻畫出劳闹,獨特詞匯對文章的信息,有時低頻率的詞更能反映特定行業(yè)的文章洽瞬。
  3. N-gram
    加入相鄰單詞組合成新的單詞本涕,加入滑窗,保留一定上下文信息伙窃。
  4. TF-IDF
    TF-IDF由兩部分組成菩颖,詞語頻率TF(Term Frequency)和逆文檔頻率IDF(Inverse Document Frequency)。在詞袋模型(3)的基礎(chǔ)上为障,加入了逆文檔頻率晦闰,刻畫特定詞匯的信息。
    TF_d(w)=\frac{c_d(w)}{|d|}\\ IDF_d(w)=\log(\frac{N}{\sum_i I_{w\in D_i}})
    其中TF_d(w)是詞w在文章d中出現(xiàn)的頻率鳍怨,分子為w在文章d中出現(xiàn)的頻數(shù)呻右,分母為文章d詞的總數(shù)。IDF_d(w)的分子N為總文章數(shù)目鞋喇,分母為出現(xiàn)詞語w的文章數(shù)目声滥。

TF-IDF的推導(dǎo)

TF-IDF通過TF刻畫了某一個詞匯在文章中出現(xiàn)的頻率,代表這個詞對于文章的貢獻侦香,通過IDF刻畫某一個詞在文章集中的獨特性落塑。

1.2.3的想法都是比較直觀的纽疟,TF-IDF的修正也比較直觀,但是形式上值得我們思考憾赁,為什么IDF不采用TF一樣的格式污朽,而是采用log的方式?

從信息熵的角度出發(fā):
I(w)=-p(w)logp(w)
其中I(w)是詞語w在語料庫中的信息熵龙考,我們可以使用信息熵來判斷詞語的重要性蟆肆,但是可能存在這樣子的情況:兩個詞的出現(xiàn)總數(shù)相同,但是一個是集中于幾篇洲愤,另外一個詞語是均勻分散颓芭。盡管信息量相同,但是兩者的區(qū)分效果是天差地別的柬赐。在這基礎(chǔ)上亡问,我們基于如下假設(shè),做分析:

  1. 所有文本的長度均一致肛宋,為M州藕。
  2. 某一個詞語,要么不出現(xiàn)在文章中酝陈,若出現(xiàn)床玻,則次數(shù)一定為k(w)

記文章總數(shù)為N沉帮,詞語w出現(xiàn)的文章數(shù)為N(w)锈死。

推導(dǎo)

  1. 對于文章d中的詞語w,有
    \begin{align} p(w)&=\frac{N(w)k(w)}{NM}\\ TF_d(w)&=\frac{c_d(w)}{|d|}=\frac{k(w)}{M}\\ p(w)& = \frac{N(w)}{N}TF_d(w)\\ 那么 I(w)&= \frac{N(w)}{N}TF_d(w)log\frac{NM}{N(w)k(w)}\\ 在文本確定后穆壕,&\frac{N(w)}{N}為常數(shù)待牵,略去\\ 化簡I(w)&=TF_d(w)*IDF_d(w)+TF_d(w)log\frac{M}{k(w)} \end{align}
    觀察上式,M,k(w)為定值喇勋,因此TF-IDF可以視為在一定條件下對詞語w的信息熵的刻畫缨该。

參考《數(shù)學(xué)之美》

作業(yè)1, TF-IDF的參數(shù)

max_feature數(shù)目

分類器使用Ridge分類器的OvR

train_loss = []
val_loss = []
feature_num_arr = [1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000, 5500, 6000, 6500, 7000, 7500, 8000]
for feature_num in feature_num_arr:
    tfidf = TfidfVectorizer(ngram_range=(1,3), max_features=feature_num)
    train_test = tfidf.fit_transform(train_df['text'])
    
    clf = RidgeClassifier()
    clf.fit(train_test[:10000], train_df['label'].values[:10000])
    
    train_pred = clf.predict(train_test[:10000])
    train_loss.append(f1_score(train_df['label'].values[:10000], train_pred, average='macro'))
    val_pred = clf.predict(train_test[10000:])
    val_loss.append(f1_score(train_df['label'].values[10000:], val_pred, average='macro'))

結(jié)果圖如下:


結(jié)果.png

從結(jié)果我們可以看出川背,提取的tf-idf詞越多贰拿,在一定范圍內(nèi)是會增加效果。但是熄云,當繼續(xù)增加時膨更,效果并不會增加,這是因為數(shù)據(jù)稀疏缴允。我們采取的模型還能有效得解決數(shù)據(jù)稀疏問題询一,如果選用深度模型,這可能會導(dǎo)致難以訓(xùn)練得問題。(下一步改進的方向)

N-gram數(shù)目
train_loss = []
val_loss = []
feature_num_arr = range(1, 10)
for feature_num in feature_num_arr:
    tfidf = TfidfVectorizer(ngram_range=(1,feature_num), max_features=5500)
    train_test = tfidf.fit_transform(train_df['text'])
    
    clf = RidgeClassifier()
    clf.fit(train_test[:10000], train_df['label'].values[:10000])
    
    train_pred = clf.predict(train_test[:10000])
    train_loss.append(f1_score(train_df['label'].values[:10000], train_pred, average='macro'))
    val_pred = clf.predict(train_test[10000:])
    val_loss.append(f1_score(train_df['label'].values[10000:], val_pred, average='macro'))

通過實驗健蕊,我發(fā)現(xiàn)n>=2的時候效果均挺好,雖然這僅僅是在ridge分類下的結(jié)果踢俄,但我們也可以得到缩功,我們的文本,應(yīng)該是單個的字都办。因為當n=2嫡锌,就可以獲得前后文信息,由單字組成詞語琳钉,效果有著顯著的提升势木。


ngram.png

作業(yè)2:不同模型

為了比較不同模型,采用了Ridge分類歌懒,Logistic分類啦桌,隨機森林,SVM及皂。在n=3甫男,特征詞數(shù)目5500下,進行訓(xùn)練验烧。

結(jié)果.png

可以發(fā)現(xiàn)板驳,隨機森林過擬合現(xiàn)象很嚴重,有可能是tf-idf過于稀疏導(dǎo)致的碍拆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末若治,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子感混,更是在濱河造成了極大的恐慌端幼,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浩习,死亡現(xiàn)場離奇詭異静暂,居然都是意外死亡,警方通過查閱死者的電腦和手機谱秽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門洽蛀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疟赊,你說我怎么就攤上這事郊供。” “怎么了近哟?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵驮审,是天一觀的道長。 經(jīng)常有香客問我,道長疯淫,這世上最難降的妖魔是什么地来? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮熙掺,結(jié)果婚禮上未斑,老公的妹妹穿的比我還像新娘。我一直安慰自己币绩,他們只是感情好蜡秽,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缆镣,像睡著了一般芽突。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上董瞻,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天寞蚌,我揣著相機與錄音,去河邊找鬼力细。 笑死睬澡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的眠蚂。 我是一名探鬼主播煞聪,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逝慧!你這毒婦竟也來了昔脯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤笛臣,失蹤者是張志新(化名)和其女友劉穎云稚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沈堡,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡静陈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了诞丽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲸拥。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖僧免,靈堂內(nèi)的尸體忽然破棺而出刑赶,到底是詐尸還是另有隱情,我是刑警寧澤懂衩,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布撞叨,位于F島的核電站金踪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏牵敷。R本人自食惡果不足惜胡岔,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劣领。 院中可真熱鬧姐军,春花似錦、人聲如沸尖淘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽村生。三九已至,卻和暖如春饼丘,著一層夾襖步出監(jiān)牢的瞬間趁桃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工肄鸽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卫病,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓典徘,卻偏偏與公主長得像蟀苛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子逮诲,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353