1、用詞嵌入,rnn、lstm算法,能夠在很小的訓練集的基礎上,創建精確的分類器算法
一、簡單的baseline網絡
構建數據集:框架
小的數據集(X,Y)其中,X包含127個句子(字符串),Y包含0-4之間的標籤,表明表情符號函數
訓練數據集(127個),測試(56個實例)之間分割數據集學習
訓練集:句子用詞嵌入的平均值表示,算法使用,dense,測試
z = W*x+b索引
y = softmax(z)ip
像adore和love 有相似的嵌入,因此該算法甚至能夠正確地歸納一個它從未見過的詞,如心,親愛的,心愛的,也相似與愛,可是沒有不快樂的正確答案,這種算法忽略了次序,因此不善於理解不快樂詞彙,字符串
結論:即便有127個訓練樣本,也能夠得到一個好的模型,由於詞向量較好的泛化型get
沒有關注詞序,因此這部電影很差而且不使人愉快,表現不佳
創建一個LSTM模型,將詞序列做爲輸入,該模型將可以考慮詞序,將繼續使用預先訓練的詞嵌入來表示單詞,但會將他們輸入到LSTM中,其工做是預測最合適的表情符號
2.二、小批量
使用小批量數據,訓練kears,大多數深度學習框架要求同一個小批量中的全部序列具備相同的長度,這是容許矢量化工做的緣由,使用填充,設置最大序列長度,
2.三、 嵌入層
在keras中,嵌入矩陣表示爲「圖層」,並將正整數(與單詞對應的索引)映射到固定大小的密集向量(嵌入向量)。
該Embedding()圖層將大小的整數矩陣(批量大小,最大輸出長度)做爲輸入,對應與轉換爲索引列表(整數)的句子
該圖層輸出爲(批量大小,最大輸出長度,詞向量維度)
sentences_to_indices()
2.四、定義函數Emojify_v2,輸入是shape(m,max_len),輸出是機率值,大小爲(m,c=5)
輸入參數爲:input_shape,word_to_vec_map,word_to_indedx
輸出:model
關鍵點:Input、LSTM、Dropout、Dense、softmax
注意點:
一、NLP任務的訓練集小,則使用詞嵌入能夠顯著幫助
二、keras(以及大多深度學習框架)中訓練模型的一些重要細節
要使用小批量,序列須要填充,以便小批量的全部樣本具備相同的長度
一個Embeding()圖層能夠用預測值初始化,這些值能夠是固定,也能夠是在數據集上進一步訓練的,可是,若是標記數據集很小,則一般不值得嘗試大量的預先訓練的嵌入集
LSTM()有一個標誌,return_sequences 來決定是否返回每一個隱藏的狀態或者僅返回最後一個狀態
您能夠當即使用Dropout(),LSTM()以調整網絡