[TOC]git
一般,進行文本分類的主要方法有三種:github
自BERT提出以來,各大NLP比賽基本上已經被BERT霸榜了,但筆者認爲掌握經典的文本分類模型原理仍是十分有必要的。這一節,將對一些經典模型進行介紹,並在個人github中給出部分模型的實現。算法
以前介紹過詞向量以及三大特徵提取器,這裏就再也不贅述了,深度學習模型無非就是用特徵抽取器拼接起來的不一樣結構的神經網絡模型,因此接下來的幾個部分基本是對模型結構的簡介。 首先咱們來看看用經典的LSTM/GRU實現文本分類模型的基本結構: 由上圖可知,TextRNN僅僅是將Word Embedding輸入到雙向LSTM中,而後對最後一位的輸出輸入到全鏈接層中,在對其進行softmax分類便可。網絡
對於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)實現文本分類。函數
這篇論文中描述稍微複雜了點,實際模型很是簡單,該模型結構以下圖所示: <img src="https://img2018.cnblogs.com/blog/1816627/201910/1816627-20191018163029701-1605267284.png" width = "80%" height = "80%">學習
該模型的主要思想以下:優化
原文連接編碼
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的全稱爲Hierarchical Attention Network(分級注意網絡),從字面意思就能夠理解其是一個分層架構模型。該模型主要用於文檔分類(長文本分類),其主要結構以下所示: <img src="https://img2018.cnblogs.com/blog/1816627/201910/1816627-20191018163109691-1870864211.png" width = "60%" height = "60%">
HAN主要由兩個層次的模型架構:詞級別和句級別,每一個層次的模型都包括一個編碼器和注意力模型兩個部分,整個模型的細節以下:
其實HAN中使用到的的Attention就是最經常使用的 Soft-Attention ,整個模型的結構就至關於TextRNN + Soft-Attention的疊加。,分別用來處理詞級別和句子級別,對於短文本分類,咱們只需借鑑詞級別的模型便可。
門限神經網絡(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