2019年4月27日 星期六

[DL] 文字語言模型觀念整理

RNN適用於文字處理和時序資料, 具有記憶功能
  • RNN適用於文字處理和時序資料
  • 重複使用迴圈中前一次迭代的值











RNN進行影像辨識



RNN進行文字分類問題

Embedding layer也可以考慮使用pretrained word embedding, 例如Word2Vec和GloVe, 英文常使用GloVe, 可於http://nlp.stanford.edu/projects/glove 下載glove.XX.zip,  替換掉原本的embedding layer, 並且冷凍他不讓他trainable = false

RNN進行時序問題 




LSTM不容易training, 也有以使用1D-CNN取代, 要使用CNN資料有如下特色, 股市預測的時序資料也有符合這些特色:


RNN進階使用方式:
  1. 循環丟棄(Recurrent dropout): 使用丟棄髮來解決循環層overfitting的問題
  2. 堆疊循環層(Stacking recurrent layers): 增加神經網路轉換表示能力(更高的cost)
  3. 雙向循環層(Bidirectional recurrent layes): 以不同方式向循環神經網路提供相同的資訊, 提高精準度並降低神經網路遺忘問題

常見問題
  • RNN 能否取代, 時間序列分析的方法(如 ARIMA之類的)? 在資料量大時使用RNN效果會較佳, 但如果線性迴歸則直接使用基本的方法
  • RNN處理長序列資料相對昂貴, 某些任務上(對於前後關係較不重要的問題)可以直接使用1D CNN, 長時間序列資料可先由1D CNN預處理萃取特徵值再將短序列送給RNN
  • CNN對序列資料如時間越近的資料價值越高無法辨識, 他只針對局部特徵, 情緒分析等字眼出現在文章哪邊都可以的問題比較適合
  • 嘗試昂貴模型前可以先試試看簡單模型
  • LSTM較GRU效果較好但訓練時間較長
  • GRU LSTM使用 dropout(指定層輸入單位的丟棄率),  recurrent_dropout(指定循環單位的丟棄率), 
model.add(layers.GRU(32, dropout=0.2, recurrent_dropout=0.2, input_shape(None,)
  • 神經網路也可以結合多個model來輸出成一個model EX: 商品屬性(全連階層) + 文字描述(RNN) + 圖片訊息(CNN) => 預測價格, 相反的也可以一個model輸出多個訊息再去接上各種分類器預測
  • 堆疊多層RNN會有較佳效果但計算量大, 困難的任務如機器翻譯再使用效果會較佳, 堆疊多層RNN中間幾層要設定return_sequences=True, 輸出完整序列(每個輸入時間點對應每個輸出時間點)
  • 雙向RNN對文字很有幫助, 但對時間序列效果較低, 因為時間序列是近的資料較為重要
  • RNN 優點:擁有記憶功能, 缺點:無法平行化計算
  • CNN 優點:查看每個字左右兩邊的自來計算, 缺點:計算長距離的文字必須疊卷積filter過大, 難train
  • Attention在Encoder-Decoder結構中,Encoder把所有的輸入序列都編碼成一個統一的語義特徵c再解碼,因此, c中必須包含原始序列中的所有信息,它的長度就成了限制模型性能的瓶頸。如機器翻譯問題,當要翻譯的句子較長時,一個c可能存不下那麼多信息,就會造成翻譯精度的下降。Attention機制通過在每個時間輸入不同的c來解決這個問題可取代RNN做平行處理

歷史演進

ngram需要設定window大小, 無法知道整句話的意思, 改使用RNN
RNN把每次得到的資訊傳給下一個

但太長文字, RNN會資訊消失, 資訊爆炸
cliping  :  資訊爆炸, 設定閥值 超過就降低
gating : 資訊消失

RNN 因為資訊消失導致過久的資訊都無法訓練到
RNN -> LSTM or GRU(加入gate)

應用:

input是sequence
EX:情緒分析
可用RNN tranformer(取代RNN)

output是sequence
對稱 :一個字對應一個output
EX:預測詞性(pos tagging),  語音識別(speech recognition),  語意理解(NLU)

不對稱 :
input 是sequence , output也是sequence 兩個RNN串在一起
EX:翻譯, 對話
seq2seq, encoder decoder
*對稱的話, 使用tagging效果更好
*中文前處理要進行斷詞, 斷詞能更好的表達意思, 當然每個字都放進去也可以, 但斷詞斷不好會有反效果, 專有領域例如法律金融, 先斷詞會更好, 一般口語領域, 不斷詞也可以

RNN各種變形:

LSTM : 保留一條不走activation function的路, 不會一直變大變小導致消失或爆炸, 透過gate決定什麼東西要直接流過去, 哪些要記住之前的資訊哪些要忘記, EX she is xxx  -> 透過she知道後面要用her, 如果主角換人了, 透過3 gate決定什麼資訊要流過去
  1. Input Gate: 當資料輸入時,input gate可以控制是否將這次的值輸入,並運算數值
  2. Memory Cell: 將運算出的數值記憶起來,以利下個cell運用
  3. Output Gate: 控制是否將這次計算出來的值output,若無此次輸出則為0
  4. Forget Gate: 控制是否將Memory清掉(format)
GRU 參數較LSTM少
資料量少的話使用GRU, 資料量夠多使用LSTM, 通常都都測試看看

Attention :
RNN可以加上attention機制來改良
接收到資訊時, 找出相關重要的資訊再組織分析吸收, 不要拿全部資訊
output不同時間決定去找input的哪些東西
output是seq2seq才適用, 需要不同時間點讀取不同部分
EX:翻譯 深度學習 > deep learning  ,  decode deep可以關注在深度兩個字 , decode learning  則focus在 學習這兩個字
應用:看了影片, 不同畫面注意不同地方, 最後才產生文字說明

Transformer :
self.attention
encoder decoder attention
multi-head attention
取代RNN, 把RNN都改成self.attention, 與encoder decoder attention 混用


Ref:
  • 台灣人工智慧學校
  • Deep learning 深度學習必讀:Keras 大神帶你用 Python 實作

沒有留言:

張貼留言