文本生成就是一個(gè)source text 到 target text的映射過程。
文本生成與文本分類的方法類似,只是在拿到輸入文本的語義表示后的處理方式不同,還需要將這個(gè)語義表示輸入到decoder中解碼生成目標(biāo)文本。
1、將給定的訓(xùn)練數(shù)據(jù)中的源文本和目標(biāo)文本進(jìn)行分詞,分別建立詞典。
2、使用Word2Vec訓(xùn)練詞向量。
3、輸入源文本的詞向量到神經(jīng)網(wǎng)絡(luò)中
4、輸出源文本的語義表示,然后將該語義表示作為decoder的初始隱狀態(tài)輸入到decoder中,同時(shí)接受的向量,即start of sequence,進(jìn)行解碼。
5、在解碼的時(shí)間步t,通過softmax輸出。這時(shí)有三種處理方式,第一種直接將
作為下一個(gè)時(shí)間步的輸入,但是這種方法會(huì)導(dǎo)致錯(cuò)誤累積。如果這一個(gè)時(shí)間步輸出錯(cuò)誤,那么將其作為后續(xù)的輸入,將會(huì)導(dǎo)致以后的時(shí)間步的輸出都是錯(cuò)誤的。因此有了第二種方法,就是每一步的輸入都使用上一步標(biāo)準(zhǔn)的正確的輸出結(jié)果,即訓(xùn)練集中的數(shù)據(jù)。這樣子就確保每一個(gè)時(shí)間步的輸入都是絕對(duì)正確的。但是這種方法訓(xùn)練出的模型會(huì)產(chǎn)生過擬合的問題,如果遇到不在訓(xùn)練集中的數(shù)據(jù),模型效果極差。因此,綜合前面兩種方法,提出了第三種方法,使用teacher forcing。即每一步輸入時(shí),使用采樣sample的方法,若采樣的數(shù)據(jù)>0.5,那么就采用訓(xùn)練集中的期望數(shù)據(jù)作為輸入數(shù)據(jù);若采樣結(jié)果<0.5,那么就采用上一步的實(shí)際輸出結(jié)果作為輸入。
6、直到decoder輸出<EOS>,即end of sequence,或者達(dá)到了最長(zhǎng)的字?jǐn)?shù)限制,一次訓(xùn)練結(jié)束,然后將預(yù)測(cè)結(jié)果與期望結(jié)果比較,計(jì)算LOSS,設(shè)置優(yōu)化策略,更新權(quán)重參數(shù)。設(shè)置epoch值,當(dāng)訓(xùn)練次數(shù)到達(dá)epoch時(shí),模型訓(xùn)練結(jié)束。
7、進(jìn)行測(cè)試。