【python 走進NLP】機器學習和深度學習情感分類模型

一、基於機器學習的情感分類模型

主要分爲 3 個步驟:文本預處理,文本向量化,訓練分類器。

1、文本預處理:
語料中有很多的噪聲信息, 比如 HTML 標籤、英文字母,特殊字符等,需要對原始語料做清洗工作,去噪、分詞、去除停用詞等,至此文本預處理步驟完成。

2、文本向量化:
文本向量化也稱爲特徵提取或者特徵工程。特徵提取的方法可以分爲兩類: 手工設計和訓練獲得。手工設計的特徵通常有:文檔頻率(DF)、信息增益(IG)、互信息(MI)、卡方統計(CHI)、TF-IDF 等。這些方法依賴於人工的設計,受人爲因素的影響,推廣能力差,在某一領域表現優秀的特徵不一定在其他領域也表現優秀。所以在選擇通過語料訓練得到的特徵。實驗中使用谷歌開源的工具包 gensim.word2vec 來提取文本的特徵,使得文本向量化。

3、訓練分類器:
機器學習中常用的分類器包括 k 近鄰算法(KNN),邏輯迴歸(Logistics)、隨機森林 (RF)、支持向量機(SVM)等。在實驗中對比各種分類器後,發現 SVM 的表現更好。

二、基於 CNN_word_level 情感分類模型。

深度學習模型在計算機視覺和語音識別兩大領域已經取得了顯著的結果,在自然語言處理領域,基於深度學習模型的研究工作已經涉及了通過神經語言模型學習詞向量的表示和在訓練好的詞向量上組合特徵用於分類任務。卷積神經網絡(CNN)利用可以提取局部特徵的卷積層,起初設計用來處理計算機視覺問題的 CNN 模型已經逐漸被證明在 NLP 領域同樣有效,並且在語義分析,搜索查詢檢索,句子模型,和其他 NLP 任務上已經取得了相當好的結果。

1、詞表構建:

因爲訓練的是中文語料,需要做分詞的預處理,然後根據訓練語料的分詞結果構建詞表。訓練時,輸入語料查找每個詞在詞表中的位置,映射爲數值輸入。比如上圖中,“非常”在詞表中的索引值是 45,則在輸入訓練的時候映射爲 45。這步可以通過 Tensorflow 中的 VocabularyProcessor() 和 embedding_lookup() 函數實現。

2、Embedding layer:
如上圖所示,Embedding layer 由句子中每個詞的詞向量組成的 N×K 維的矩陣作爲輸入,其中 K 爲詞向量的維度,N 表示最長的句子的長度,實驗中使用 K=64。因爲卷積神經網絡需要固定大小的輸入,所以對於長度不足 N 的句子,用 0 填充。這個矩陣的類型可以是動態的(static),也可以是靜態的 (non_static)。靜態的就是詞向量是固定不變的,而動態則是在模型訓練的過程中,詞向量可做優化的權重,通過反向傳播算法來調整參數。可以看出動態調整參數把 two stage 的問題轉化爲了 one stage 問題,不需要單獨去做文本向量化的工作,而且詞向量直接和分類誤差聯繫在一起,可以提高準確率。

3、卷積層:
在 Embedding 的基礎上,通過卷積操作得到特徵圖(Feature Map)。在實驗中使用了 3 種不同大小的卷積核。不同於處理圖像時卷積核都是正方形的,比如 3×3,5×5,7×7,使用的卷積核大小分別爲 3×K,4×K,5×K, 這是因爲每個詞的維度是 K, 進行卷積操作時,感受野應該包括整個詞的大小,所以卷積核的寬度爲 K, 不同高度的卷積核考慮不同詞之間的聯繫,比如高度爲 5,則考慮到前後 5 個詞之間的關係。使用不同大小的卷積核提取到的特徵更豐富。對於每一種大小卷積核都使用 128 個,每一個卷積核通過與輸入層卷積得到一個 Feature Map,在 NLP 中也稱爲文本特徵,所以最後卷積層的輸出爲 300×N×1。

4、池化層:
在卷積層之後使用最大池化層操作(maxpooling),即從一維的特徵圖中選擇一個最大值,最大值代表着最重要的信號。最後將池化後的值拼接爲一個一維向量作爲下一層的輸入。

5、全連接層 +sofmax:
池化層輸出的一維向量通過全連接的方式連接一個 sofmax 分類器。本文研究的情感分析主要分爲三個類別(正,負,中)。故全連接層有三個神經元。在全連接層中使用 Dropout 防止過擬合,並在全連接層上加 L2 正則化參數。

三、基於 CNN_character_level 情感分類模型

CNN_character_level 的情感分類模型和 word_level 的模型結構是相似的。
都是使用 CNN 的思想來做情感的分類。不過在實施細節上面有一些不同。第一,在建立詞表的過程中,chareter_level 模型並不對原始語料做分詞處理,而是直接對語料分字處理,根據字符建立字符表,然後根據查找字符表來獲得語料的數字化表示。第二,在卷積核的使用上,charater_level 只使用了 5×K 大小的一種卷積核,因爲基於字符處理,只有更大的卷積核才能考慮到上下文的關聯信息。第三,character_level 在全連接時使用了 2 層全連接層,一般來說網絡層數越多提取到的語義信息會更豐富。有關網絡模型的詳細參數會在實驗部分給出,其中 charater_level 取得了最好的成績。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章