2017-02-04 51 views
2

我想爲此目的在keras中編寫文本char-rnn,我必須先將文本轉換爲序列,然後再填充序列。但是我自己在實施這一步時遇到了很多麻煩。我相信這是因爲我對這個功能本身(pad_sequence)的偏見或缺乏理解。我試圖谷歌它並沒有找到任何好的教程,並沒有太多解釋在keras docs也。keras pad_sequence是做什麼的?

任何人可以告訴我pad_sequence怎麼樣和什麼是pad_sequence?爲什麼我們應該在進食前填充序列(這裏是字符級別)。

請把這段文字作爲例子嗎?

在波士頓布里格姆婦女醫院採取診所患有前列腺癌的50歲男性 。他收到了一個新穎的手術去除他的前列腺,後來收到集中輻射 設法根除任何剩餘的癌症。不幸的是,他的疾病 一年後返回。但在兩種新療法結束後,他的癌症現在出現在檢查中 。如果他的癌症確實傳播開來,其他許多治療方法 - 包括很多尚未上市的治療方法 - 可能會使他的癌症恢復緩解。

回答

4

我們培訓RNN的方法是爲他們提供一系列序列。

RNN的梯度反向傳播存在衆所周知的問題(請參閱Bengio & al)。這就是爲什麼我們通常將有限序列送入RNN進行訓練的原因。 因此,在你的例子中,你應該將文本切成小塊(句子?)以建立你的訓練集。

爲了簡化實施,keras只接受批次中相同長度的序列(Recurrent Models with sequences of mixed length)。所以如果你的序列長度不一樣,這就是pad_sequence有用的地方。

pad_sequence將序列列表作爲輸入(列表列表)並返回填充序列列表。

爲了讓你的例子工作,你將不得不以某種方式將文本切成字符序列。 要做到這一點,您可以選擇您選擇的分隔符('。'?),然後將所有句子填充到相同的長度。或者,在我看來,更聰明的是,將文本看作char(偶數空格和\ n)的序列,剪切每n個字符,然後將這個序列列表作爲訓練數據。 這樣可以避免使用除最後一個序列之外的填充(如果數據中的字符數不是序列長度n的倍數)。

當然,不要忘記標記你的角色並將它們嵌入矢量空間,然後再將它們送入RNN。 RNN不適用於分類數據。

+0

這就是我所做的http://stackoverflow.com/questions/42002717/how-should-we-pad-text-sequence-in-keras-using-pad-sequences,但它不工作 – Eka

+0

我已經回答你的問題:) –