在本章我們將開始使用機器學習模型來解決文字分類。機器學習發展比較廣,且包括多個分支,本章側重使用傳統機器學習,從下一章開始是基於深度學習的文字分類。
機器學習是對能通過經驗自動改進的計算機演算法的研究。機器學習通過歷史資料訓練出模型對應於人類對經驗進行歸納的過程,機器學習利用模型對新資料進行**對應於人類利用總結的規律對新問題進行**的過程。
機器學習有很多種分支,對於學習者來說應該優先掌握機器學習演算法的分類,然後再其中一種機器學習演算法進行學習。由於機器學習演算法的分支和細節實在是太多,所以如果你一開始就被細節迷住了眼,你就很難知道全域性是什麼情況的。
如果你是機器學習初學者,你應該知道如下的事情:
機器學習能解決一定的問題,但不能奢求機器學習是萬能的;
機器學習演算法有很多種,看具體問題需要什麼,再來進行選擇;
每種機器學習演算法有一定的偏好,需要具體問題具體分析;
在機器學習演算法的訓練過程中,假設給定$n$個樣本,每個樣本有$m$個特徵,這樣組成了$n×m$的樣本矩陣,然後完成演算法的訓練和**。同樣的在計算機視覺中可以將的畫素看作特徵,每張看作hight×width×3的特徵圖,乙個三維的矩陣來進入計算機進行計算。
但是在自然語言領域,上述方法卻不可行:文字是不定長度的。文字表示成計算機能夠運算的數字或向量的方法一般稱為詞嵌入(word embedding)方法。詞嵌入將不定長的文字轉換到定長的空間內,是文字分類的第一步。
one-hot
這裡的one-hot與資料探勘任務中的操作是一致的,即將每乙個單詞使用乙個離散的向量表示。具體將每個字/詞編碼乙個索引,然後根據索引進行賦值。
one-hot表示方法的例子如下:
句子1:我 愛 北 京 天 安 門
句子2:我 喜 歡 上 海
首先對所有句子的字進行索引,即將每個字確定乙個編號:
在這裡共包括11個字,因此每個字可以轉換為乙個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,每個文件的字/詞可以使用其出現次數來進行表示。
句子1:我 愛 北 京 天 安 門
句子2:我 喜 歡 上 海
直接統計每個字出現的次數,並進行賦值:
句子1:我 愛 北 京 天 安 門
轉換為 [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
句子2:我 喜 歡 上 海
轉換為 [1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]
在sklearn中可以直接countvectorizer
來實現這一步驟:
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類似,不過加入了相鄰單詞組合成為新的單詞,並進行計數。
如果n取值為2,則句子1和句子2就變為:
句子1:我愛 愛北 北京 京天 天安 安門
句子2:我喜 喜歡 歡上 上海
tf-idf
tf-idf 分數由兩部分組成:第一部分是詞語頻率(term frequency),第二部分是逆文件頻率(inverse document frequency)。其中計算語料庫中文件總數除以含有該詞語的文件數量,然後再取對數就是逆文件頻率。
tf(t)= 該詞語在當前文件出現的次數 / 當前文件中詞語的總數
idf(t)= log_e(文件總數 / 出現該詞語的文件總數)
下面開始用機器學習演算法進行特徵提取和文字分類(利用sklearn工具包),並通過本地構造驗證集進行f1計算得分
1,首先是詞袋模型(count vector/bag of words)+分類器(ridgeclassifier):
以上結果發現,可能使用的資料越多,我們的得分越高。
2,然後使用tf-idf的方法(tf-idf + ridgeclassifier):
最終結果基本保持在0.87的樣子,(30000條資料提公升到50000條資料,f1_score由0.875提公升到0.878),n-gram=(1,2)時準確度降低一點:0.876
把資料換成10000條後,f1值有一定的下降,主要為了做tsne視覺化,比較佔記憶體。
本章小結
本章學習了基於機器學習的文字分類方法:主要用了詞袋的方法和tf-idf兩種,並完成了兩種方法的對比。
天池 新聞文字分類 NLP實踐Note 01
天池 新聞文字分類 學習目標 賽題資料由以下幾個部分構成 訓練集20w條樣本,測試集a包括5w條樣本,測試集b包括5w條樣本。為了預防選手人工標註測試集的情況,我們將比賽資料的文字按照字元級別進行了匿名處理 處理後的賽題訓練資料如下 在資料集中標籤的對應的關係如下 評價標準為類別 f1 score ...
NLP入門 新聞文字分類Task5
textcnn textrnn 上乙個task4利用了fasttext,但不是最優的思路方法,因此本章將繼續學習基於深度學習的文字分類。基於詞的上下文環境進行 對於每一條輸入文字,選取一定大小的視窗的上下文和乙個中心詞,並基於這個中心詞去 視窗內其他詞出現的概率。通過單詞和上下文彼此 基礎 yoon...
零基礎入門NLP 新聞文字分類
1 transformer transformer是一種新的編碼器 解碼器架構,它僅使用注意力機制而不是rnn來編碼每個位置,並關聯有關其自身的輸入和輸出的兩個遠端單詞,然後可以並行化處理,因而加快訓練。2 attention 模仿人類視覺注意力機制,學習出乙個對影象特徵的權重分布,再把這個權重分布...