帶你用4行代碼訓練RNN生成文本

帶你用4行代碼訓練RNN生成文本

來自專欄大數據の譯讀賞學9 人贊了文章

本文共1400字,建議閱讀6分鐘。

本文介紹僅需幾行代碼就能訓練出任意大小和複雜度的文本的神經網路文本發生器。

如何在無需構建和調整神經網路的情況下,輕鬆地生成文本?讓我們來看看下面這個項目,它允許您用幾行代碼就能在任意文本數據集上輕鬆地訓練出任意大小和複雜度的文本,這便是神奇的神經網路文本發生器。

文本生成對機器學習和NLP初學者來說是很有趣的項目之一,但同時也是一個相當令人生畏的項目。至少對於我來說是這樣的。

值得慶幸的是,網上有各種各樣的很棒的材料可以用來學習如何利用RNN生成文本,從理論到技術深入,再到那些明確地專註於實踐的材料。也有一些非常好的帖子,涵蓋了所有內容。所有這些材料都有一個特別的共同點:在這個過程中的某個時刻,你必須構建和調整一個RNN來完成這項工作。

這顯然是一項有價值的工作,尤其是為了學習,但如果你對更高層次的抽象(無論你的原因是什麼)感興趣,又該怎麼辦呢?如果你是一個數據科學家,需要以RNN文本生成器的形式構建塊來插入你的項目,該怎麼辦?或者,如果,作為一個新來的人,你只是想把你的手「不是太臟」作為測試水的一種手段,或者作為進一步深入挖掘的動力,那又該怎麼辦呢?

在這種情況下,讓我們看一下 textgenrnn,它是一個允許你「用幾行代碼在任何文本數據集上輕鬆地訓練出任意大小和複雜度文本的神經網路」的項目。textgenrnn由BuzzFeed的助理數據科學家Max Woolf和前Apple Software QA工程師撰寫。

textgenrnn是建立在Keras和TensorFlow之上的,可以用於生成字元和單詞級別的文本(字元級別是默認的)。網路體系架構使用注意力加權和跳過嵌入來加速訓練和提高質量,並允許調整多個超參數,例如RNN大小、RNN層和包含雙向RNN。你可以在Github repo這篇介紹性博客文章中閱讀到更多關於textgenrnn及其特性和體系架構的信息:

github.com/minimaxir/te

生成『Hello,World!』這類文本和生成特朗普的推文相類似 (至少在我看來是這樣),那麼讓我們一起來看看吧。利用Textgenrnn默認的預訓練模型可以輕易地訓練新的文本,同時你也可以利用textgenrnn來訓練一種新的模型(只需在它的訓練函數中添加new_model=True語句)。既然我們想看看我們能有多快地生成推文,那就開始吧。

獲取數據

我從特朗普推特檔案館(Trump Twitter Archive)抓取了唐納德·特朗普從2014年1月1日至2018年6月11日(在昨日撰寫的)的一些推文,其中顯然包括了特朗普就任美國總統前後的推文。特朗普推特檔案館這個網站可以查詢和下載到總統的推文。我選擇那個日期範圍內的文本,因為我不關心任何元數據,並將其保存到一個名為trump-tweets.txt的文本文件中。

訓練模型

讓我們看看用textgenrnn生成文本是多麼簡單。以下4行代碼是我們導入庫、創建文本生成對象、在trump-tweets.txtfile上對模型進行10次訓練所需的全部內容,然後生成一些樣例推文。

大約30分鐘後,這是生成的文本:

撇開政治不談,考慮到我們僅僅用12K的推文在僅僅10個epoch進行訓練,這些生成的推文並不是太糟糕。想要利用temperature (Textgenrnn默認值為0.5)來獲得一些更有創意的推文?讓我們試試:

那就不那麼令人信服了。更保守的、更有信心的模型是:

現在,上述文本的內容似乎更合理些。

當然,這並不完美。我們還可以嘗試其他各種各樣的東西。好消息是,如果你不想自己來解決方案,那麼可以利用textgenrnn來實現 (同樣,請參閱Gizub repo):

  • 從零開始訓練我們自己的模型。
  • 用更多的樣本數據來訓練更多的迭代
  • 調優其他超參數。
  • 對數據進行預處理(至少是為了消除假URL)

更為有趣的是,也是我最為感興趣的是,如何利用一個默認的textgenrnn模型來實現自定義、調優的模型?我們將在下一次的內容中做深入探討。

作者:馬修·梅奧,科德那金

翻譯:陳之炎


推薦閱讀:

比預測未來更重要的,是改變未來 | 數據科學公開課
建築領域大數據分析[通過python爬取分析房價信息](第二篇:數據分析)
numpy.random.seed和Sklearn中RandomState的解析
如何擴充你的數據科學工具包?這裡有24款免費的數據科學工具!
如何高效入門數據科學?

TAG:數據科學 | 神經網路 |