NLP任務中LSTM以及雙向LSTM的如何處理長度不一的句子輸入?

時間 2021-05-06 14:34:46

1樓:dilligencer

我覺得向前補齊和向後補齊都可以,只是performance可能會存在差別,在pytorch裡面有兩個函式用來處理這種情況乙個是pack_padded_sequence,另乙個是pad_packed_sequence。這兩個函式聯合起來使用來針對LSTM處理變長資料。

2樓:zy ye

可以設定max_seq_len,超過擷取,少於的話padding, 可以前向padding也可以後向padding,對於BiLSTM來說,反向句子和正向句子的padding需要保持一致。當然也有動態LSTM,可以每個batch設定個最大長度,從而加快速度,特別是在decode的過程中。

3樓:Maybewuss

不一定要用最大長度進行padding,也可以設定某個長度進行截斷。

如果你使用的框架是pytorch,那麼它有乙個函式叫pack_pad_sequence,具體名字記不清,這個函式可以接受兩個引數,乙個是pad過後的句子,還有乙個是每個句子pad前的長度。印象中tf中的dynamic_rnn好像也可以實現類似操作。

我覺得雙向rnn的反向應該是從pad部分開始的吧。。。具體也不太了解,tf裡面好像有個函式叫reverse_sequence的,你可以看看。

4樓:小明

可以設定乙個最大長度,乙個batch裡面,超過長度的sequence就截斷到最大長度,不到長度的sequence就補齊到最大長度,這樣方便對整個batch的資料進行矩陣操作

LSTM中的num step與batch size的區別?

舉個栗子 在自然語言處理中,一句話是由很多個詞 假設一句話已經分詞 組成 1.然後在訓練的時候,把所有的句子擷取為相同的長度,如果某乙個句子長度大於長度L,則截斷 如果句子長度小於L,則填充0,補充長度至L 2.如果訓練的時候,每次迭代的時候只有一句話,那麼梯度下降的時候,可能較為隨意 但是如果整個...

NLP中embedding和LookupTable有什麼聯絡呢?

詞嵌入訓練的時候會用一張表儲存所有訓練集中的詞語,輸入乙個句子,查表直接讀出句子向量送到後續層做cbow或者skipgram訓練。 roger 乙個意思,例如 我是誰 我在lookuptable的index為3的位置,是在17的位置,誰在6的位置,那就是分別在table裡把3,17,6位置的embe...

nlp序列標註任務如何處理類別極度不平衡問題?

會寫詩的程式猿 似乎基於實體級別計算F1就不會有這個問題。不能計算標籤級別的F1。比如predict BIII golden IIII 那就直接是錯的呀。這是針對評價指標。損失函式的話,正常CE似乎就沒問題。 Bigbao 有幾個解決類別不平衡的問題 1.取樣到乙個平衡的比例,有過取樣和欠取樣 2....