翻譯模型也是用了裝桶(bucketing)和填充(padding),這兩種方法是用於高效地處理不同長度句子的情況。我們首先來弄清楚是怎么一回事。當我們從英語翻譯成法語的時候,假設我們的輸入英語的長度為L1,輸出法語的長度為L2。因為英語句子是作為encoder_inputs而傳入的,法語句子作為decoder_inputs而傳入(最開始加了一個GO前綴),原則上對於每一個長度為(L1,L2+1)的語句對,都要創建一個seq2seq的模型。這將導致一個巨大的計算圖,而這個圖由許多十分相似的子圖構成。還有,因為我們只能使用一個特殊的PAD符號來填充每一個句子。對於已經填充的長度,我們只需要一個seq2seq模型。但是對於較短的句子的話,由於我們需要編碼和加碼很多沒有意義的PAD字符,我們的模型將會變得十分低效。
作為折衷,我們使用一定數量的桶(buckets)並且把每一個句子桶填充至桶的長度
buckets = [(5, 10), (10, 15), (20, 25), (40, 50)]
這意味着如果我們的英文句子有3個字符,對應法語的輸出有6個字符,那么我們將會把這個句子放入第一個桶,並且將輸入和輸出分別填充到5和10個字符。如果輸入輸出的長度分別為8和18,不會用(10,15),而是使用(20,25)的桶,同樣滴,輸入和輸出將會分別填充到20和25個字符。