NLP三大特徵提取器全梳理:RNN vs CNN vs Transformer

2020-12-23 機器之心Pro

機器之心原創

編輯:陳萍

在進行 NLP 模型訓練前,請先選擇一個好的特徵提取器。

在上一篇文章中我們介紹了自然語言處理的基礎問題——文本預處理的常用步驟。本文將進階講述特徵提取方面的相關算法。

如果用一句話總結目前 NLP 在特徵提取方面的發展趨勢,那就是「RNN 明日黃花,正如夕陽產業,慢慢淡出舞臺;CNN 老驥伏櫪,志在千裡,如果繼續優化,還可能會大放異彩;Transformer 可謂如日中天,在特徵提取方面起著中流砥柱的作用」。至於將來,又會有什麼算法代替 Transformer,成為特徵提取界的新晉寵兒。我想一時半會兒可能不會那麼快,畢竟算法開發可是個很漫長的過程。

現在我們就來探究一下,在 NLP 特徵提取方面,算法是怎樣做到一浪更比一浪強的。

RNN(循環神經網絡)

RNN 與 CNN(卷積神經網絡)的關鍵區別在於,它是個序列的神經網絡,即前一時刻的輸入和後一時刻的輸入是有關係的。

RNN 結構

下圖是一個簡單的循環神經網絡,它由輸入層、隱藏層和輸出層組成。

RNN 的主要特點在於 w 帶藍色箭頭的部分。輸入層為 x,隱藏層為 s,輸出層為 o。U 是輸入層到隱藏層的權重,V 是隱藏層到輸出層的權重。隱藏層的值 s 不僅取決於當前時刻的輸入 x,還取決於上一時刻的輸入。權重矩陣 w 就是隱藏層上一次的值作為這一次的輸入的權重。下圖為具有多個輸入的循環神經網絡的示意圖:

從上圖可以看出,Sn 時刻的值和上一時刻 Sn-1 時刻的值相關。將 RNN 以時間序列展開,可得到下圖:

RNN 自引入 NLP 後,就被廣泛應用於多種任務。但是在實際應用中,RNN 常常出現各種各樣的問題。因為該算法是採用線性序列結構進行傳播的,這種方式給反向傳播優化帶來了困難,容易導致梯度消失以及梯度爆炸等問題。

此外,RNN 很難具備高效的並行計算能力,工程落地困難。因為 t 時刻的計算依賴 t-1 時刻的隱層計算結果,而 t-1 時刻的結果又依賴於 t-2 時刻的隱層計算結果……,因此用 RNN 進行自然語言處理時,只能逐詞進行,無法執行並行運算。

為了解決上述問題,後來研究人員引入了 LSTM 和 GRU,獲得了很好的效果。

而 CNN 和 Transformer 不存在這種序列依賴問題,作為後起之秀,它們在應用層面上彎道超車 RNN。

CNN(卷積神經網絡)

CNN 不僅在計算機視覺領域應用廣泛,在 NLP 領域也備受關注。

從數據結構上來看,CNN 輸入數據為文本序列,假設句子長度為 n,詞向量的維度為 d,那麼輸入就是一個 n×d 的矩陣。顯然,該矩陣的行列「像素」之間的相關性是不一樣的,矩陣的同一行為一個詞的向量表徵,而不同行表示不同的詞。

要讓卷積網絡能夠正常地「讀」出文本,我們就需要使用一維卷積。Kim 在 2014 年首次將 CNN 用於 NLP 任務中,其網絡結構如下圖所示:

從圖中可以看到,卷積核大小會對輸出值的長度有所影響。但經過池化之後,可映射到相同的特徵長度(如上圖中深紅色卷積核是 4 × 5,對於輸入值為 7 × 5 的輸入值,卷積之後的輸出值就是 4 × 1,最大池化之後就是 1 × 1;深綠色的卷積核是 3 × 5,卷積之後的輸出值是 5 × 1,最大池化之後就是 1 × 1)。之後將池化後的值進行組合,就得到 5 個池化後的特徵組合。

這樣做的優點是:無論輸入值的大小是否相同(由於文本的長度不同,輸入值不同),要用相同數量的卷積核進行卷積,經過池化後就會獲得相同長度的向量(向量的長度和卷積核的數量相等),這樣接下來就可以使用全連接層了(全連接層輸入值的向量大小必須一致)。

特徵提取過程

卷積的過程就是特徵提取的過程。一個完整的卷積神經網絡包括輸入層、卷積層、池化層、全連接層等,各層之間相互關聯。

而在卷積層中,卷積核具有非常重要的作用,CNN 捕獲到的特徵基本上都體現在卷積核裡了。卷積層包含多個卷積核,每個卷積核提取不同的特徵。以單個卷積核為例,假設卷積核的大小為 d×k,其中 k 是卷積核指定的窗口大小,d 是 Word Embedding 長度。卷積窗口依次通過每一個輸入,它捕獲到的是單詞的 k-gram 片段信息,這些 k-gram 片段就是 CNN 捕獲到的特徵,k 的大小決定了 CNN 能捕獲多遠距離的特徵。

卷積層之後是池化層,我們通常採用最大池化方法。如下圖所示,執行最大池化方法時,窗口的大小是 2×2,使用窗口滑動,在 2×2 的區域上保留數值最大的特徵,由此可以使用最大池化將一個 4×4 的特徵圖轉換為一個 2*2 的特徵圖。這裡我們可以看出,池化起到了降維的作用。

最後通過非線性變換,將輸入轉換為某個特定值。隨著卷積的不斷進行,產生特徵值,形成特徵向量。之後連接全連接層,得到最後的分類結果。

但 CNN 網絡也存在缺點,即網絡結構不深。它只有一個卷積層,無法捕獲長距離特徵,卷積層做到 2 至 3 層,就沒法繼續下去。再就是池化方法,文本特徵經過卷積層再經過池化層,會損失掉很多位置信息。而位置信息對文本處理來說非常重要,因此需要找到更好的文本特徵提取器。

Transformer

Transformer 是谷歌大腦 2017 年論文《Attentnion is all you need》中提出的 seq2seq 模型,現已獲得了大範圍擴展和應用。而應用的方式主要是:先預訓練語言模型,然後把預訓練模型適配給下遊任務,以完成各種不同任務,如分類、生成、標記等。

Transformer 彌補了以上特徵提取器的缺點,主要表現在它改進了 RNN 訓練速度慢的致命問題,該算法採用 self-attention 機制實現快速並行;此外,Transformer 還可以加深網絡深度,不像 CNN 只能將模型添加到 2 至 3 層,這樣它能夠獲取更多全局信息,進而提升模型準確率。

Transformer 結構

首先,我們來看 Transformer 的整體結構,如下是用 Transformer 進行中英文翻譯的示例圖:

我們可以看到,Transformer 由兩大部分組成:編碼器(Encoder) 和解碼器(Decoder),每個模塊都包含 6 個 block。所有的編碼器在結構上都是相同的,負責把自然語言序列映射成為隱藏層,它們含有自然語言序列的表達式,但沒有共享參數。然後解碼器把隱藏層再映射為自然語言序列,從而解決各種 NLP 問題。

就上述示例而言,具體的實現可以分如下三步完成:

第一步:獲取輸入單詞的詞向量 X,X 由詞嵌入和位置嵌入相加得到。其中詞嵌入可以採用 Word2Vec 或 Transformer 算法預訓練得到,也可以使用現有的 Tencent_AILab_ChineseEmbedding。

由於 Transformer 模型不具備循環神經網絡的迭代操作,所以我們需要向它提供每個詞的位置信息,以便識別語言中的順序關係,因此位置嵌入非常重要。模型的位置信息採用 sin 和 cos 的線性變換來表達:

PE(pos,2i)=sin(pos/100002i/d)

PE (pos,2i+1)=cos(pos/100002i/d)

其中,pos 表示單詞在句子中的位置,比如句子由 10 個詞組成,則 pos 表示 [0-9] 的任意位置,取值範圍是 [0,max sequence];i 表示詞向量的維度,取值範圍 [0,embedding dimension],例如某個詞向量是 256 維,則 i 的取值範圍是 [0-255];d 表示 PE 的維度,也就是詞向量的維度,如上例中的 256 維;2i 表示偶數的維度(sin);2i+1 表示奇數的維度(cos)。

以上 sin 和 cos 這組公式,分別對應 embedding dimension 維度一組奇數和偶數的序號的維度,例如,0,1 一組,2,3 一組。分別用上面的 sin 和 cos 函數做處理,從而產生不同的周期性變化,學到位置之間的依賴關係和自然語言的時序特性。

第二步:將第一步得到的向量矩陣傳入編碼器,編碼器包含 6 個 block ,輸出編碼後的信息矩陣 C。每一個編碼器輸出的 block 維度與輸入完全一致。

第三步:將編碼器輸出的編碼信息矩陣 C 傳遞到解碼器中,解碼器會根據當前翻譯過的單詞 1~ i 依次翻譯下一個單詞 i+1,如下圖所示:

Self-Attention 機制

下圖展示了 Self-Attention 的結構。在計算時需要用到 Q(查詢), K(鍵值), V(值)。在實踐中,Self-Attention 接收的是輸入(單詞表示向量 x 組成的矩陣 X)或者上一個 Encoder block 的輸出。而 Q, K, V 正是基於 Self-Attention 的輸入進行線性變換得到的。

那麼 Self-Attention 如何實現呢?

讓我們來看一個具體的例子(以下示例圖片來自博客 https://jalammar.github.io/illustrated-transformer/)。

假如我們要翻譯一個詞組 Thinking Machines,其中 Thinking 的詞向量用 x1 表示,Machines 的詞向量用 x2 表示。

當處理 Thinking 這個詞時,需要計算它與所有詞的 attention Score,將當前詞作為 query,去和句子中所有詞的 key 匹配,得出相關度。用 q1 代表 Thinking 對應的 query vector,k1 及 k2 分別代表 Thinking 和 Machines 的 key vector。在計算 Thinking 的 attention score 時,需要先計算 q1 與 k1 及 k2 的點乘,同理在計算 Machines 的 attention score 時也需要計算 q_2 與 k1 及 k2 的點乘。如上圖得到了 q1 與 k1 及 k2 的點乘,然後進行尺度縮放與 softmax 歸一化,得到:

顯然,當前單詞與其自身的 attention score 最大,其他單詞根據與當前單詞的重要程度得到相應的 score。然後再將這些 attention score 與 value vector 相乘,得到加權的向量。

如果將輸入的所有向量合併為矩陣形式,則所有 query, key, value 向量也可以合併為矩陣形式表示。以上是一個單詞一個單詞的輸出,如果寫成矩陣形式就是 Q*K,經過矩陣歸一化直接得到權值。

總結

RNN 在並行計算方面存在嚴重缺陷,但其線性序列依賴性非常適合解決 NLP 任務,這也是為何 RNN 一引入 NLP 就很快流行起來的原因。但是也正是這一線性序列依賴特性,導致它在並行計算方面要想獲得質的飛躍,近乎是不可能完成的任務。而 CNN 網絡具有高並行計算能力,但結構不能做深,因而無法捕獲長距離特徵。現在看來,最好的特徵提取器是 Transformer,在並行計算能力和長距離特徵捕獲能力等方面都表現優異。

在之後的文章中,我們將繼續介紹 NLP 領域的相關內容,敬請期待。

參考連結:

http://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf

https://www.sohu.com/a/299824613_814235

https://zhuanlan.zhihu.com/p/30844905

https://baijiahao.baidu.com/s?id=1651219987457222196&wfr=spider&for=pc

https://www.cnblogs.com/sandwichnlp/p/11612596.html

https://zhuanlan.zhihu.com/p/54356280

https://www.jianshu.com/p/d2df894700bf

相關焦點

  • 3W字長文帶你輕鬆入門視覺Transformer
    本文出發點是徹底拋棄CNN,以前的cv領域雖然引入transformer,但是或多或少都用到了cnn或者rnn,本文就比較純粹了,整個算法幾句話就說清楚了,下面直接分析。那麼額外的可學習嵌入向量為啥要設計為可學習,而不是類似nlp中採用固定的token代替?個人不負責任的猜測這應該就是圖片領域和nlp領域的差別,nlp裡面每個詞其實都有具體含義,是離散的,但是圖像領域沒有這種真正意義上的離散token,有的只是一堆連續特徵或者圖像像素,如果不設置為可學習,那還真不知道應該設置為啥內容比較合適,全0和全1也說不通。
  • PTMs|2020最新NLP預訓練模型綜述
    由於篇幅原因,本文主要針對前面兩點進行梳理,即「目前主流的預訓練模型」和「預訓練模型的分類體系」。1. 背景「nlp、cv領域的傳統方法極度依賴於手動特徵工程」。例如nlp中的log-linear、CRF模型等,cv中各種抽取特徵的模型,如sift特徵等。深度學習中本質上是一種表示學習,能夠一定程度上避免手動的特徵工程。究其原因,主要得益於深度學習中一系列很強大的特徵提取器,如CNN、RNN、Transformer等,這些特徵提取器能夠有效地捕獲原始輸入數據中所蘊含的特點和規律。
  • NLP攜手Transformer跨界計算機視覺,DETR:目標檢測新範式
    更為具體的 DETR 架構如下:上圖給出了 DETR 中使用 transformer 的詳細說明,並在每個注意力層傳遞了位置編碼。來自 CNN 主幹的圖像特徵通過了 transformer 編碼器,並將空間位置編碼與添加到查詢和鍵處的空間編碼一起傳遞。
  • 如何評價Sparse R-CNN,目標檢測未來會如何發展?
    我之前跟mentor討論,他堅信cnn上也能像detr一樣去掉nms,但是我就勸他說不用position encoding 這樣的東西,cnn這個平滑性好像必須有這麼個設計,之後的嘗試也完全走偏了,這個認知在dense anchor的基礎上也是對的,但是之後就往怎麼增加feature map高頻上做了,完全沒意識到dense anchor有什麼問題,當然也承認,認識到我也一點不敢想能做成
  • 深度學習在NLP中的運用?從分詞、詞性到機器翻譯、對話系統
    深度學習模型有效降低了語言模型輸入特徵的維度,降低了輸入層的複雜性。另外,深度學習模型具有其他淺層模型不能比擬的靈活性。深度學習模型更複雜,能夠對數據進行更精準的建模,從而增強實驗效果。利用深度學習實現的字嵌入+Bi-LSTM+CRF 中文分詞器,不需要構造額外手工特徵。使用人民日報的 80 萬語料訓練實現,按照字符正確率評估標準能達到 98% 的準確率。其本質上是一個序列標註模型,模型參考的論文是:http://www.aclweb.org/anthology/N16-1030,整個神經網絡的主要框架如圖 2 所示。
  • class method vs static method in Python
    在此,結合自己的coding心得,對內容重新梳理、加以充實,雖然都是英文的,但是木有想像中的難的,加油看哈!:        passclass method 的基本特徵梳理如下:class method與一個類(class)相綁定,而不是與實例化對象相綁定;class method的第1個參數代表當前class,通常用cls表示 (其實你寫個 this 也沒啥關係,只是大家約定如此)clss
  • 用RNN和TensorFlow創作自己的《哈利波特》小說
    GRU vs LSTM二者在文本生成上都表現出色,GRU(門控循環單元)是比較新的概念,實際上並沒有一種方法可以確定二者哪個更好。優化超參數比選擇一個好的架構更能提高模型性能。如果數據量不成問題,那麼則是LSTM(長短期記憶網絡)性能更優。
  • 鑽石級別VS/H是什麼意思?鑽石淨度vs好,還是vvs?
    鑽石的級別vs,vs是英文Very Slight(微瑕級)的首字母縮寫。鑽石VS等級是指鑽石淨度的等級。它是指在評估鑽石的淨度時,在10倍放大鏡下可以看到的非常小的瑕疵,但肉眼很難識別。據瑕疵特徵的尺寸、位置、數量又可以細分為VS1和VS2級。三、鑽戒顏色淨度是vs什麼意思?
  • 本源全視角vs小我單一視角
    本源全視角vs小我單一視角              元吾氏(20200424版,20211205更新)1
  • VS什麼意思?鑽石淨度VS什麼意思
    鑽石淨度中的vs什麼意思?選購鑽石時,在鑽石淨度方面分為好幾個等級,其中每個級別鑽石的特點都不一樣,價格方面也有一定差距,通過對市場的分析來看,大部分消費者對vs等級的鑽石都比較關注,那麼鑽石vs具體表示的是什麼意思呢?下面就和小編來了解一下吧。
  • 乘風破浪的姐姐vs 法國CEO版乘風破浪的姐姐
    根據領英的調查,睿智、勤奮、情商高是撐起職場女性的三大特質。令人興奮的是,傳統的由男性主導的職業領域——科學、技術、工程、數學(STEM)已經成為女性增幅最快的領域;今天我們來聊聊那些在(STEM)領域裡乘風破浪的法國CEO姐姐們。
  • NLP的文本分析與特徵工程
    文本分類最重要的部分是特徵工程:從原始文本數據為機器學習模型創建特徵的過程。在本文中,我將解釋不同的方法來分析文本並提取可用於構建分類模型的特徵。我將介紹一些有用的Python代碼。這些代碼可以很容易地應用於其他類似的情況(只需複製、粘貼、運行),並且我加上了注釋,以便你可以理解示例(連結到下面的完整代碼)。
  • 搜狗開源業內最全「閱讀理解工具集合」,助力研發人員快速構建高效...
    該工具集合也是目前業內最全的TensorFlow版本的閱讀理解工具集合。目前與SMRC類似的工具集有 Allen AI的AllenNLP和UCL機器閱讀理解組的Jack The Reader等。數據處理為了準備訓練模型的數據,我們需要建立一個詞彙表、提取語言特徵,並將離散特徵映射到索引中。該工具包提供了滿足這些要求的模塊:Vocabulary Builder 、Feature Extractor、Batch Generator。模型構建機器閱讀理解任務的核心部分就是構建一個有效且高效的模型。
  • 不倫瑞克vs杜塞道夫 升班馬vs降班馬又是一場碾壓局?
    不倫瑞克vs杜塞道夫 升班馬vs降班馬又是一場碾壓局? 原標題:【料到體育】德乙:不倫瑞克vs杜塞道夫 升班馬vs降班馬又是一場碾壓局?
  • 3月1日NBA比賽老七推薦:開拓者vs老鷹,湖人vs灰熊,勇士vs太陽
    勇士vs太陽勇士今年殘的令人不敢直視,仿佛回到了10年前蒙塔埃利斯那個時代。最經典的一場勇士全隊只有6個人上場比賽,比賽過程中傷了一個,第四節6次犯規罰下一個,結果罰下去過後裁判發現勇士場上只有4個人了,哦裡神啊,趕快把罰下去的那位再請上來繼續比賽。風水輪流轉啊,這不,巨無霸勇士隊很快又回去了。
  • 今日足球:坎布爾vs登博斯 奧斯vs布雷達 福倫丹vs阿爾梅勒城
    坎布爾vs登博斯坎布爾近況:此前曾在主場以2比3被阿賈克斯青年隊上演逆轉好戲,最終爆準落敗,聯賽連勝記錄被終結,最近球隊狀態回勇,日前更是在主場以7比2狂勝阿爾梅勒城,再度重回連勝的步伐。坎布爾主場全取三分不成問題。奧斯vs布雷達奧斯近況:上輪客場面對福倫丹最終以1比1頑強地逼平對手取得一分,兩隊都有不少的破門機會,最終1比1亦是相對合理的結果,不過奧斯本季的勝率相對較低,目前僅依靠主場作戰收穫2場勝仗。
  • UFC 259:努涅斯vs安德森,馬哈切夫vs多貝爾
    比賽對陣表: UFC女子羽量級冠軍爭霸賽: 阿曼達·努涅斯(Amanda Nunes)(#c) vs.梅根·安德森(Megan Anderson) 輕重量級比賽: 蒂亞戈·桑託斯(Thiago Santos)(#2) vs.