天池 新聞文字分類 NLP實踐Note 03

2021-10-08 12:51:52 字數 3175 閱讀 6663

在本章我們將開始使用機器學習模型來解決文字分類。機器學習發展比較廣,且包括多個分支,本章側重使用傳統機器學習,從下一章開始是基於深度學習的文字分類。

機器學習是對能通過經驗自動改進的計算機演算法的研究。機器學習通過歷史資料訓練模型對應於人類對經驗進行歸納的過程,機器學習利用模型對新資料進行**對應於人類利用總結的規律對新問題進行**的過程。

機器學習有很多種分支,對於學習者來說應該優先掌握機器學習演算法的分類,然後再其中一種機器學習演算法進行學習。由於機器學習演算法的分支和細節實在是太多,所以如果你一開始就被細節迷住了眼,你就很難知道全域性是什麼情況的。

如果你是機器學習初學者,你應該知道如下的事情:

機器學習能解決一定的問題,但不能奢求機器學習是萬能的;

機器學習演算法有很多種,看具體問題需要什麼,再來進行選擇;

每種機器學習演算法有一定的偏好,需要具體問題具體分析;

在機器學習演算法的訓練過程中,假設給定$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 模仿人類視覺注意力機制,學習出乙個對影象特徵的權重分布,再把這個權重分布...