好久沒碰Keras了,近期都在tensorflow的海裡激泳(其實是被浪打 🏄)。不過不得不說,從以前就挺喜歡Keras的~簡單好上手,很適合入門以及快速試驗!
看完本篇你將會學到:
✔️用python進行文本資料建模前處理:如標籤編碼、拆分數據集、文本切詞
✔️Multiclass Classification
✔️簡單的 LSTM模型構建、模型訓練與評估
But, 你將不會學到的是…
✖️ LSTM的原理
本篇程式碼參考自Maryada Krishna Reddy的LSTM教學,有興趣的人請點超連結,謝謝他的分享!
有別於Maryada Krishna Reddy的教學文
本篇文章專為有Multiclass Classification任務需求的人客們而寫,分享在多元分類的場景下,如何用Keras跑LSTM文本模型。🎃🎃
一些版本…
- Python 3.6.4 |Anaconda
- Keras 2.1.5
- Tensorflow 1.9.0
資料描述
- log檔,109.2 MB
- 類別:279類
- 總資料數:84,020筆
步驟
1. 輸入資料的處理 (input data processing)2. LSTM模型構建 (model building)3. 模型評估測試 (model evaluation)
Part I : 輸入資料的處理 (input data processing)
- 先匯入所需的套件
- 匯入處理過的資料(清理資料方面,例如url clean等就不在本文詳述) →挑選目標欄位作為分析使用
- 欄位 domain_2rd : 欲分析的內容,任務是判斷來自哪個user agent
- 欄位 user_agent_set: 作為訓練的標籤(Label)
- 訓練集&測試集的拆分
sklearn 的 LabelEncoder 可以將標籤的編碼值範圍限定在[0 , n_classes-1],也可以用在非數值型標籤的編碼來轉換成數值標籤。(有沒有很好用~)
題外話,以往在做這種多類別標籤的時候,我都是用 one-hot encoding的方式,例如類別數是3時,就用 Keras 改造的 numpy
的一個函數 np_utils.to_categorical
,把標籤變成 one-hot
的形式:
[1,0,0]
[0,1,0]
[0,0,1]
但這次在實作時,發現標籤可以不用one-hot encoding,而留在後面模型訓練時,調整一個參數值即可(這裡就先鋪個梗吧 👽)
- Tokenizer切詞
將文字資料做切詞,並將文本轉換為序列
Part II : LSTM模型構建 (model building)
- 構建 RNN 模型架構
想知道類別數量的話,有個方法是將前面的Y(編碼過後的label)排序後
類別數 = sorted(Y)[-1] + 1
- 模型訓練
前面鋪的梗這邊就要揭曉啦~剛剛說過這次的標籤編碼不是採用one-hot encoding的形式,而是 integer encodings:
1
2
3
❗️那在做compile時,loss就要指定sparse_categorical_crossentropy
,而不是過去常用的categorical_crossentropy
喔
因為我這台沒GPU…QQ 所以給大家看一下CPU還是可以跑的,只是比較慢而已…
…真的只是“而已”嗎…我的筆電開始有飛機起飛的聲音啦… 🛫
神啊,給我一台TITAN啊(許願池)
話說昨天在整理GPU規格時有一點心得,有空再分享給大家
可以看到,跑了6個Epoch後就Early Stopping囉,訓練的準確率落在 93.7%,最後一部分就是要來進行模型評估了。
Part III: 模型評估測試 (model evaluation)
輸入測試集的資料進行模型測試,得到93.8%的準確率。
感謝瀏覽到這裡的你們,恭喜達成以下成就:
✔️ 使用pandas進行資料的匯入與欄位挑選
✔️拆分訓練集和測試集,並將標籤進行數值編碼
✔️用Tokenizer切詞
✔️簡單的 LSTM模型構建
✔️模型訓練與評估
如果您喜歡本文的話,歡迎多按幾下Claps 👏👏👏
有您的鼓勵,會增加我的產文效率! 🚀 也歡迎多留言給我,我們可以聊聊技術或人生