[TensorFlow Certification Day8] NLP建立model (6hrs)


Posted by Kled on 2020-08-22

NLP3/4 主要是教如何建立NLP Model

主要教了RNN, LSTM, Bidirection(LSTM)
下面是LSTM model建立的範例, 相當的簡單, 也很好理解, NLP難的還是在data processing

#Bidirectional 雙向LSTM
#LSTM(64)是output有64個cell
#但是Bidirectional會double output變成128
model = tf.keras.Sequential([
    tf.keras.layers.Embedding(tokenizer.vocab_size, 64),
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64)), 
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

#使用多層LSTM, 需要加入return_sequences=True, 讓LSTM output另一個LSTM必須放入序列, 
#否則的話就只是一堆沒有排序的cell
model = tf.keras.Sequential([
    tf.keras.layers.Embedding(tokenizer.vocab_size, 64),
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64), return_sequences=True), 
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32)), 
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

對於文本預測其他選項

  1. CNN
  2. Gated Recurrent Unit (GRUs)

CNN的範例

model = tf.keras.Sequential([
    tf.keras.layers.Embedding(tokenizer.vocab_size, 64),
    tf.keras.layers.Conv1D(128, 5, activation='relu'),  #有128個filter, 每個有5個word
    tf.keras.layers.GlobalMaxPooling1D(),
    tf.keras.layers.Dense(24, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

因為kernel是5個字, 所以120個字的input到這裡就會被刮掉4個, 跟之前CNN一樣

GRU的範例

model = tf.keras.Sequential([
    tf.keras.layers.Embedding(tokenizer.vocab_size, 64),
    tf.keras.layers.Bidirectional(tf.keras.layers.GRU(32)), 
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

一般來說文字會比圖片來得overfitting, 因為validate中很多是training data裡面沒有的東西

創造文本

其實創造文本就是預測接下來該出現的下一個字
會發現創造出來的, 會有很多是有重複性的詞 (可能跟副歌會重複有關)
當預測的長度越長, 會越來越變得胡言亂語, 因為中間都是預測生成的字
加大corpus會對這件事有幫助
但是太大的corpus會導致memory 崩潰
最後可以參考這個範例, 如果都看得懂的話應該對NLP沒甚麼問題
https://www.tensorflow.org/tutorials/text/text_generation

NLP沒有coding的exercise必須寫我很意外,
沒有練習可以去知道自己缺少了甚麼, 這代表這部分要自己強加練習


#AI #machine learning #tensorFlow Certification #TensorFlow #機器學習 #人工智慧 #Deep Learning #深度學習







Related Posts

JavaScript內建函式

JavaScript內建函式

DOM 節點 相關屬性

DOM 節點 相關屬性

[ 學習筆記系列 ] 很基礎的 JavaScript 入門 (一) - 基礎程式

[ 學習筆記系列 ] 很基礎的 JavaScript 入門 (一) - 基礎程式


Comments