使用RNN在NLP上的應用為例,我們用wij表示第i個句子裡面的第j個詞語。
這裡是一個batch_size=4,sequence_length=7的資料。每個句子的長度不一定相同,也不一定需要等於sequence_length,所以使用pad這樣一個特殊詞語將每個句子補齊(padding)到固定長度(便於使用matrix或者tensor儲存整個batch的資料)
樣本1:w11 w12 w13 w14 pad pad pad
樣本2:w21 w22 pad pad pad pad pad
樣本3:w31 w32 w33 w34 w35 w36 w37
樣本4:w41 w42 w43 w44 w45 pad pad
在時間步1,{w11, w21, w31, w41}被RNN處理;在時間步2,{w12, w22, w32, w42}被RNN處理;依此類推。
RNN處理pad的方式有很多種。例如可以把pad當作普通單詞一樣處理,然後提取上述batch裡面的第w14,w22,w37,w45四個位置的狀態;或者當一個sequence遇到pad(或者EOS)的時候停止那個sequence上的計算。以tensorflow為例的話,可以參考static_rnn, dynamic_rnn方法的區別。
使用RNN在NLP上的應用為例,我們用wij表示第i個句子裡面的第j個詞語。
這裡是一個batch_size=4,sequence_length=7的資料。每個句子的長度不一定相同,也不一定需要等於sequence_length,所以使用pad這樣一個特殊詞語將每個句子補齊(padding)到固定長度(便於使用matrix或者tensor儲存整個batch的資料)
樣本1:w11 w12 w13 w14 pad pad pad
樣本2:w21 w22 pad pad pad pad pad
樣本3:w31 w32 w33 w34 w35 w36 w37
樣本4:w41 w42 w43 w44 w45 pad pad
在時間步1,{w11, w21, w31, w41}被RNN處理;在時間步2,{w12, w22, w32, w42}被RNN處理;依此類推。
RNN處理pad的方式有很多種。例如可以把pad當作普通單詞一樣處理,然後提取上述batch裡面的第w14,w22,w37,w45四個位置的狀態;或者當一個sequence遇到pad(或者EOS)的時候停止那個sequence上的計算。以tensorflow為例的話,可以參考static_rnn, dynamic_rnn方法的區別。