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

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

在本章我們將開始使用機器學(xué)習(xí)模型來解決文本分類旨指。機器學(xué)習(xí)發(fā)展比較廣肖粮,且包括多個分支砂蔽,本章側(cè)重使用傳統(tǒng)機器學(xué)習(xí),從下一章開始是基于深度學(xué)習(xí)的文本分類流码。

學(xué)習(xí)目標(biāo)
  *   學(xué)會TF-IDF的原理和使用
  *   使用sklearn的機器學(xué)習(xí)模型完成文本分類

機器學(xué)習(xí)是對能通過經(jīng)驗自動改進的計算機算法的研究又官。機器學(xué)習(xí)通過歷史數(shù)據(jù)訓(xùn)練模型對應(yīng)于人類對經(jīng)驗進行歸納的過程,機器學(xué)習(xí)利用模型對新數(shù)據(jù)進行預(yù)測對應(yīng)于人類利用總結(jié)的規(guī)律對新問題進行預(yù)測的過程漫试。

機器學(xué)習(xí)有很多種分支六敬,對于學(xué)習(xí)者來說應(yīng)該優(yōu)先掌握機器學(xué)習(xí)算法的分類,然后再其中一種機器學(xué)習(xí)算法進行學(xué)習(xí)驾荣。由于機器學(xué)習(xí)算法的分支和細(xì)節(jié)實在是太多外构,所以如果你一開始就被細(xì)節(jié)迷住了眼普泡,你就很難知道全局是什么情況的。

如果你是機器學(xué)習(xí)初學(xué)者审编,你應(yīng)該知道如下的事情:

  1. 機器學(xué)習(xí)能解決一定的問題撼班,但不能奢求機器學(xué)習(xí)是萬能的;
  2. 機器學(xué)習(xí)算法有很多種垒酬,看具體問題需要什么砰嘁,再來進行選擇;
  3. 每種機器學(xué)習(xí)算法有一定的偏好勘究,需要具體問題具體分析矮湘;

文本表示方法 Part1

在機器學(xué)習(xí)算法的訓(xùn)練過程中,假設(shè)給定N個樣本口糕,每個樣本有M個特征缅阳,這樣組成了N×M的樣本矩陣,然后完成算法的訓(xùn)練和預(yù)測景描。同樣的在計算機視覺中可以將圖片的像素看作特征十办,每張圖片看作hight×width×3的特征圖,一個三維的矩陣來進入計算機進行計算伏伯。

但是在自然語言領(lǐng)域橘洞,上述方法卻不可行:文本是不定長度的。文本表示成計算機能夠運算的數(shù)字或向量的方法一般稱為詞嵌入(Word Embedding)方法说搅。詞嵌入將不定長的文本轉(zhuǎn)換到定長的空間內(nèi)炸枣,是文本分類的第一步。

One-hot

這里的One-hot與數(shù)據(jù)挖掘任務(wù)中的操作是一致的弄唧,即將每一個單詞使用一個離散的向量表示适肠。具體將每個字/詞編碼一個索引,然后根據(jù)索引進行賦值候引。

One-hot表示方法的例子如下:

句子1:我 愛 北 京 天 安 門
句子2:我 喜 歡 上 海

首先對所有句子的字進行索引侯养,即將每個字確定一個編號:

{
    '我': 1, '愛': 2, '北': 3, '京': 4, '天': 5,
  '安': 6, '門': 7, '喜': 8, '歡': 9, '上': 10, '海': 11
}

在這里共包括11個字,因此每個字可以轉(zhuǎn)換為一個11維度稀疏向量:

我:[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
愛:[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
...
海:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

Bag of Words

Bag of Words(詞袋表示)澄干,也稱為Count Vectors逛揩,每個文檔的字/詞可以使用其出現(xiàn)次數(shù)來進行表示。

句子1:我 愛 北 京 天 安 門
句子2:我 喜 歡 上 海

直接統(tǒng)計每個字出現(xiàn)的次數(shù)麸俘,并進行賦值:

句子1:我 愛 北 京 天 安 門
轉(zhuǎn)換為 [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]

句子2:我 喜 歡 上 海
轉(zhuǎn)換為 [1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]

在sklearn中可以直接CountVectorizer來實現(xiàn)這一步驟:

from sklearn.feature_extraction.text import CountVectorizer
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',
]
vectorizer = CountVectorizer()
vectorizer.fit_transform(corpus).toarray()

N-gram

N-gram與Count Vectors類似辩稽,不過加入了相鄰單詞組合成為新的單詞,并進行計數(shù)从媚。

如果N取值為2逞泄,則句子1和句子2就變?yōu)椋?/p>

句子1:我愛 愛北 北京 京天 天安 安門
句子2:我喜 喜歡 歡上 上海

TF-IDF

TF-IDF 分?jǐn)?shù)由兩部分組成:第一部分是詞語頻率(Term Frequency),第二部分是逆文檔頻率(Inverse Document Frequency)。其中計算語料庫中文檔總數(shù)除以含有該詞語的文檔數(shù)量喷众,然后再取對數(shù)就是逆文檔頻率各谚。

TF(t)= 該詞語在當(dāng)前文檔出現(xiàn)的次數(shù) / 當(dāng)前文檔中詞語的總數(shù)
IDF(t)= log_e(文檔總數(shù) / 出現(xiàn)該詞語的文檔總數(shù))

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

接下來我們將對比不同文本表示算法的精度,通過本地構(gòu)建驗證集計算F1得分到千。

Count Vectors + RidgeClassifier

import pandas as pd

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_score

train_df = pd.read_csv('../input/train_set.csv', sep='\t', nrows=15000)

vectorizer = CountVectorizer(max_features=3000)
train_test = vectorizer.fit_transform(train_df['text'])

clf = RidgeClassifier()
clf.fit(train_test[:10000], train_df['label'].values[:10000])

val_pred = clf.predict(train_test[10000:])
print(f1_score(train_df['label'].values[10000:], val_pred, average='macro'))
# 0.74

TF-IDF + RidgeClassifier

import pandas as pd

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_score

train_df = pd.read_csv('../input/train_set.csv', sep='\t', nrows=15000)

tfidf = TfidfVectorizer(ngram_range=(1,3), max_features=3000)
train_test = tfidf.fit_transform(train_df['text'])

clf = RidgeClassifier()
clf.fit(train_test[:10000], train_df['label'].values[:10000])

val_pred = clf.predict(train_test[10000:])
print(f1_score(train_df['label'].values[10000:], val_pred, average='macro'))
#0.8721598830546126

本章小結(jié)

本章我們介紹了基于機器學(xué)習(xí)的文本分類方法昌渤,并完成了兩種方法的對比。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末憔四,一起剝皮案震驚了整個濱河市愈涩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌加矛,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煤篙,死亡現(xiàn)場離奇詭異斟览,居然都是意外死亡,警方通過查閱死者的電腦和手機辑奈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門苛茂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸠窗,你說我怎么就攤上這事妓羊。” “怎么了稍计?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵躁绸,是天一觀的道長。 經(jīng)常有香客問我臣嚣,道長净刮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任硅则,我火速辦了婚禮淹父,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怎虫。我一直安慰自己暑认,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布大审。 她就那樣靜靜地躺著蘸际,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饥努。 梳的紋絲不亂的頭發(fā)上捡鱼,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音,去河邊找鬼驾诈。 笑死缠诅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乍迄。 我是一名探鬼主播管引,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闯两!你這毒婦竟也來了褥伴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤漾狼,失蹤者是張志新(化名)和其女友劉穎重慢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逊躁,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡似踱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稽煤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片核芽。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖酵熙,靈堂內(nèi)的尸體忽然破棺而出轧简,到底是詐尸還是另有隱情,我是刑警寧澤匾二,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布哮独,位于F島的核電站,受9級特大地震影響假勿,放射性物質(zhì)發(fā)生泄漏借嗽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一转培、第九天 我趴在偏房一處隱蔽的房頂上張望恶导。 院中可真熱鬧,春花似錦浸须、人聲如沸惨寿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裂垦。三九已至,卻和暖如春肌索,著一層夾襖步出監(jiān)牢的瞬間蕉拢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晕换,地道東北人午乓。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像闸准,于是被迫代替她去往敵國和親益愈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361