文本分類(TextRNN/TextCNN/TextRCNN/FastText/HAN)

[TOC]git

簡介

一般,進行文本分類的主要方法有三種:github

  • 基於規則特徵匹配的方法(如根據喜歡,討厭等特殊詞來評判情感,但準確率低,一般做爲一種輔助判斷的方法)
  • 基於傳統機器學習的方法(特徵工程 + 分類算法)
  • 給予深度學習的方法(詞向量 + 神經網絡)

自BERT提出以來,各大NLP比賽基本上已經被BERT霸榜了,但筆者認爲掌握經典的文本分類模型原理仍是十分有必要的。這一節,將對一些經典模型進行介紹,並在個人github中給出部分模型的實現。算法

TextRNN

以前介紹過詞向量以及三大特徵提取器,這裏就再也不贅述了,深度學習模型無非就是用特徵抽取器拼接起來的不一樣結構的神經網絡模型,因此接下來的幾個部分基本是對模型結構的簡介。 首先咱們來看看用經典的LSTM/GRU實現文本分類模型的基本結構: 由上圖可知,TextRNN僅僅是將Word Embedding輸入到雙向LSTM中,而後對最後一位的輸出輸入到全鏈接層中,在對其進行softmax分類便可。網絡

TextCNN

對於TextCNN在上一篇文章中簡單的提到過,這裏再作一些簡單的補充,其模型結構以下圖所示: <img src="https://img2018.cnblogs.com/blog/1816627/201910/1816627-20191018162954176-1632955675.png" width = "80%" height = "80%">架構

上圖很直觀的展示了,與圖像中的二維卷積不一樣,TextCNN中採用的是一維卷積,每一個卷積核的大小爲$h \times k$(h爲卷積核的窗口大小,k爲詞向量的維度),文中採用了多種不一樣尺寸的卷積核,用以提取不一樣文本長度的特徵(上圖種能夠看見,卷積核有h=2, 3, 4三種)機器學習

而後,做者對於卷積核的輸出進行MaxPooling,目的是提取最重要的特徵。將全部卷積核的輸出經過MaxPooling以後拼接造成一個新向量,再將該向量輸出到全鏈接層分類器(Dropout + Linear + Softmax)實現文本分類。函數

TextRCNN

這篇論文中描述稍微複雜了點,實際模型很是簡單,該模型結構以下圖所示: <img src="https://img2018.cnblogs.com/blog/1816627/201910/1816627-20191018163029701-1605267284.png" width = "80%" height = "80%">學習

該模型的主要思想以下:優化

  • 首先得到詞向量表示$e(w_i)$
  • 其次將詞向量經過雙向RNN(實踐中能夠是LSTM或GRU)獲得$c_l(w_i)$和$c_r(w_i)$
  • 將$c_l(w_i)$, $e(w_i)$以及$c_r(w_i)$拼接獲得新的向量,將其輸入到全鏈接網絡對其進行整合,激活函數爲tanh
  • 再將全鏈接網絡的輸出進行MaxPooling
  • 最後將其輸入一個全鏈接分類器中實現分類

原文連接編碼

FastText

FastText是Facebook於2016年發佈的文本分類模型,其主要思想基於word2vec中的skip-gram模型(關於skip-gram模型參考我以前詞向量的博客,這裏也就再也不贅述),在訓練文本分類模型的同時,也將訓練出字符級n-gram詞向量。

一般認爲,形態相似的單詞具備類似的語義特徵。而對於Word2Vec模型,其構建的語料庫中,把不一樣的單詞直接映射到獨立的id信息,這樣,使得不一樣單詞之間的形態學信息徹底丟失了,如英文中的「nation」和「national」,中文中的「上海市政府」和「上海市」。若是可以學習到形態學變換到單詞特徵的規則,咱們能夠利用這個規則來獲得許多訓練集中不可見的單詞表示。

爲了解決這個問題,FastText用字符級別的n-gram來表示一個單詞或句子,如

中華人民共和國 bigram:中華 華人 人民 民共 共和 和國 trigram:中華人 華人民 人民共 民共和 共和國

獲得了詞的n-gram表徵以後,咱們能夠用n-gram子詞(subword)的詞向量疊加來表示整個詞語,詞典則是全部詞子詞的並集。

其主要模型結構以下圖所示,最後也採用了層次softmax的提速手段: <img src="https://img2018.cnblogs.com/blog/1816627/201910/1816627-20191018163049774-1611230602.png" width = "60%" height = "60%">

對比skip-gram模型,能夠FastText的詞典規模會更大,模型參數會更多。但每個詞的詞向量都是子詞向量的和,使得一些生僻詞或未出現的單詞可以從形態相近的單詞中獲得較好的詞向量表示,從而在必定程度上可以解決OOV問題

原文連接

HAN

HAN的全稱爲Hierarchical Attention Network(分級注意網絡),從字面意思就能夠理解其是一個分層架構模型。該模型主要用於文檔分類(長文本分類),其主要結構以下所示: <img src="https://img2018.cnblogs.com/blog/1816627/201910/1816627-20191018163109691-1870864211.png" width = "60%" height = "60%">

HAN主要由兩個層次的模型架構:詞級別和句級別,每一個層次的模型都包括一個編碼器和注意力模型兩個部分,整個模型的細節以下:

  • 如上圖所示,假設咱們的文檔中有$L$個句子,對於第二個句子,單詞長度爲$T$
  • 首先將單詞輸入Embedding層獲取詞向量
  • 將獲取的詞向量輸入詞編碼器,即一個雙向GRU,將兩個方向的GRU輸出拼接在一塊兒獲得詞級別的隱向量$h$
  • 將詞級別的隱向量經過一個單層感知機(MLP,實際上就是全鏈接神經網絡,激活函數選用tanh),輸出的結果能夠看做是更高層次的隱向量表示: $u_{it}=tanh(W_wu_{it}+b_w)$
  • 隨機初始化一個上下文向量$u_w$(隨着訓練不斷優化),將該上下文向量$u_w$與高層次的隱向量表示$u_{it}$輸入softmax,獲得每一個詞與上下文向量的類似度表示: $\alpha_{it}=\frac{exp(u_{it}^Tu_w)}{\sum_texp(u_{it}^Tu_w)}$
  • 將上述類似度做爲權重,對$h_{it}$加權求和獲得句子級別的向量表示: $s_i=\sum_t\alpha_{it}h_{it}$
  • 對於句子級別的向量,咱們用相相似的方法,將其經過編碼層,注意力層,最後將文檔中全部句子的隱向量表示加權求和,獲得整個文檔的文檔向量$v$,將該向量經過一個全鏈接分類器進行分類。

其實HAN中使用到的的Attention就是最經常使用的 Soft-Attention ,整個模型的結構就至關於TextRNN + Soft-Attention的疊加。,分別用來處理詞級別和句子級別,對於短文本分類,咱們只需借鑑詞級別的模型便可。

原文連接

Highway Networks

門限神經網絡(Gated Networks),在以前一篇文章中也提到過,主要是利用$sigmoid$函數「門限」的性質,來實現對信息流的自動控制的一種方法,Highway Networks就是一種典型的門限網絡結構,這裏也簡單的介紹一下。

根據原文的定義,假設原來網絡的輸出爲: $$y = H(x, W_H)$$

其中$H(·)$表示非線性變換(能夠設置爲激活函數爲relu的全鏈接層)。定義$T(x, W_T) = sigmoid(W_T^Tx + b_T)$文章的作法就是將其改進爲: $$y = H(x, W_H) \cdot T(x, W_T) + x \cdot (1-T(x, W_T))$$

則對於輸出y,有: $$y = \begin{cases} x, & if\ T(x, W_T) = 0 \ H(x, W_H), & if \ T(x, W_T) = 1 \end{cases}$$

原文連接

參考連接 http://www.javashuo.com/article/p-koacwuua-bo.html https://www.kesci.com/home/project/5be7e948954d6e0010632ef2 https://zhuanlan.zhihu.com/p/32091937 https://zhuanlan.zhihu.com/p/64603089 https://zhuanlan.zhihu.com/p/24780258 https://zhuanlan.zhihu.com/p/32965521 https://zhuanlan.zhihu.com/p/63111928 https://zhuanlan.zhihu.com/p/53342715 https://zhuanlan.zhihu.com/p/44776747

相關文章
相關標籤/搜索