<label id="jgr5k"></label>
    <legend id="jgr5k"><track id="jgr5k"></track></legend>

    <sub id="jgr5k"></sub>
  1. <u id="jgr5k"></u>
      久草国产视频,91资源总站,在线免费看AV,丁香婷婷社区,久久精品99久久久久久久久,色天使av,无码探花,香蕉av在线
      您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
      此為臨時鏈接,僅用于文章預覽,將在時失效
      人工智能 正文
      發私信給MrBear
      發送

      0

      簡簡單單用 LSTM 創造一個寫詩機器人

      本文作者: MrBear 編輯:楊曉凡 2018-02-24 10:03
      導語:科學浪漫主義!

      雷鋒網 AI 科技評論按:人們已經給神經網絡找到了越來越多人的事情做,比如畫畫和寫詩,微軟的小冰都已經出版了一本詩集了。而其實訓練一個能寫詩的神經網絡并不難,Automattic 公司的數據科學家 Carly Stambaugh 就寫了一篇文章介紹如何簡單快捷地建立一個會寫詩的人工智能。雷鋒網 AI 科技評論全文翻譯如下。

      簡簡單單用 LSTM 創造一個寫詩機器人

      「代碼即詩篇」,這是 WordPress 社區的哲學。

      作為一個 coder 同時也是一個詩人,我一直都十分喜愛這句話。然而,如果將這句話翻轉過來,我不禁要問:「我能否通過代碼寫詩呢?我能否創造一個能夠寫出原創性詩詞的機器?」于是,我做了一系列實驗去探究這個問題的答案。

      首先,我們都知道如果想讓機器學會寫詩,那么它必須先學會讀詩。在整個 2017 年中,使用 WordPress 系統發布的、標注為詩歌的帖子有超過 50 萬篇(https://wordpress.com/tag/poetry)。我聯系了一些通過 WordPress 分享作品的高產詩人,詢問他們是否愿意與我合作完成一個有趣的實驗:能否讓我的機器閱讀他們的作品,讓我的機器能夠學到詩歌的形式和結構,最終讓機器能夠自己完成詩歌創作?

      何為LSTM 以及它如何生成文本?

      我使用了一種名為 LSTM (Long Short Term Memory network, 即長短時期記憶網絡) 的神經網絡來構建我的詩歌機器人。

      神經網絡通過層次結構將一個問題分解為多個小問題。舉例而言,假如你想訓練一個用于識別正方形的神經網絡,其中一層可能會負責識別直角,另一層可能負責識別平行線。為了將圖片認定為正方形,所有這些特征都會被機器呈現出來。神經網絡會通過將數以百萬計的正方形圖片作為輸入訓練模型,從而學習到這些必要的特征的參數。這個機器還會學到圖片的哪些特征對于識別正方形是重要的,哪些是不重要的。

      現在,假設你想要使用神經網路去預測這兩個字母的下一個字母:

      Th_

      對于一個人來說,這個任務是十分簡單的。很有可能,你猜下一個字母應該是 e。但是,我敢打賭,如果你是一個說英語的人,你不會猜下一個字母是 q。這是因為你已經通過學習知道:在英語中,q 不會跟在 th 的后面。一個單詞中,前面的字母對于預測后面會出現什么字母是及其相關的。一個 LSTM 可以「記住」它之前的狀態并將其告訴它當前的決策過程。關于 LSTM 如何工作的更深入的解釋,可以參考谷歌大腦的 Chris Olah 所寫的這篇精彩的文章。

      與許多基于 LSTM 的文本生成案例一樣,我的詩歌機器人通過一次生成一個字符來生成文本。因此,要想把單詞組合成任何有意義的樣式,詩歌機器人首先必須學會如何造詞。為了實現這一點,它需要數百萬個有效的單詞的例句。值得慶幸的是,WordPress.com 上有海量的詩歌。

      數據集的準備

      首先,我從 Elasticsearch 索引中抓取了上面列出的所有網站中的詩歌。我使用一種非常簡單的規則(根據每遇到一次「\n」的字符和上一個「\n」之間的詞數)把除了詩歌的文本之外的所有東西清洗掉了。如果一塊文本包含許多單詞但是包含很少的「\n」字符,它可能是一個或多個段落的集合。然而,一塊跨越多行的文本更有可能是一首詩。這是一個簡單的方法,當然,我可以想到很多優秀的詩歌都無法滿足這個規則!但是,就本實驗的目的而言,我對于 LSTM 是否能學習到諸如換行、詩的章節等詩歌的結構,以及其他的例如押韻、類韻、輔韻、頭韻修辭手法十分感興趣。因此,將訓練數據限制為相當結構化的詩歌是合理的。

      一旦一塊文本被認定為一首詩,我就將它輸出到一個文本文件,并且在他前面加上「++++\n」的前綴以表示一首新詩的開始。這樣做可以產生大約 500KB 的訓練數據。通常,我試著使用至少 1MB 的文本去訓練一個 LSTM 網絡,因此,我需要尋找更多的詩歌!為了補充更多有特色的詩人的作品,我使用了去年發表的被標記為詩歌的公開的帖子中產生的隨機樣本。這就好像你在 WordPress.com 閱讀器里用詩歌標簽瀏覽之后(https://en.wordpress.com/tag/poetry/)得到的結果。我將隨機抓取的詩歌的規模限制在每個詩人一個帖子。

      訓練 LSTM 網絡

      當我有了超過 1MB 的詩歌之后,我開始構建一個 LSTM 網絡。我使用 Python 深度學習庫 keras 以滿足我所有對神經網絡的需求。keras(https://github.com/keras-team/keras)在 Github 上的 repo 代碼倉庫有許多示例文件,可以幫助學習一系列不同的神經網絡,其中就包括使用 LSTM 生成文本(https://github.com/keras-team/keras/blob/master/examples/lstm_text_generation.py  )。我根據這個示例編寫了我的模型的代碼,并且開始進行不同模型配置之下的實驗。這個模型的目標是要產生原創的詩歌。在這種情況下,過擬合,換而言之,太過于詳細地學習訓練數據以致于模型不能很好地泛化,會導致生成的文本與輸入地文本太相似。(這就好像剽竊,沒有詩人會喜歡這樣做?。┮粋€防止過擬合的方法是在網絡中使用 dropout 。這就迫使在每一個批次的訓練中,隨機地使一個子集的節點權重降為 0。這有點像迫使網絡「忘記」一些它剛剛學到的知識。(我還添加了額外的后期處理去檢查,防止詩人的作品被詩歌機器人復制)

      我使用 FloydHub(https://www.floydhub.com/ )的 GPU 來完成我的神經網絡繁重的訓練工作。這使我能夠以將近比我的筆記本快十倍的速度訓練我的神經網絡。我的第一個神經網絡有一個 LSTM 層,后面跟隨著一個 dropout 層。這個網絡產生了一個看上去十分像詩歌的文本。它有換行和詩的章節,并且幾乎所有的字符組合都是真實的單詞。偶爾整行都是較為通順的。實際上,它第一次迭代產生了這樣的佳句:

      簡簡單單用 LSTM 創造一個寫詩機器人

      我增加了一些 LSTM 層,嘗試著改變每一層中 dropout 的程度,知道最終定下了一個如下面代碼所示的最終模型。我最終選擇使用三層 LSTM,因為此時訓練時間開始變得很長,而訓練的結果相當好。(下面是程序代碼)

          1. model = Sequential()

          2. model.add(LSTM(300, input_shape=(maxlen, len(chars)), return_sequences=True, dropout=.20, recurrent_dropout=.20))

          3. model.add(LSTM(300, return_sequences=True, dropout=.20, recurrent_dropout=.20))

          4. model.add(LSTM(300, dropout=.20, recurrent_dropout=.20))

          5. model.add(Dropout(.20))

          6. model.add(Dense(len(chars)))

          7. model.add(Activation('softmax'))

          8. model.compile(loss='categorical_crossentropy', optimizer='adam')

      這里有一個圖,比較了隨著LSTM層數增加而變化的模型的損失函數曲線。

      簡簡單單用 LSTM 創造一個寫詩機器人

      隨著模型中LSTM層數增加,驗證損失迅速下降

      哦!這是怎么回事呢?(https://stats.stackexchange.com/questions/303857/explanation-of-spikes-in-training-loss-vs-iterations-with-adam-optimizer  )事實上,當我們使用 adam 優化器訓練模型時,這是很常見的。注意,隨著我向網絡中增加 LSTM 層,模型的驗證損失整體上以很快的速率持續下降。這說明在較少的迭代次數內可以得到可行的實驗結果,但是額外的 LSTM 層會增加每次迭代的訓練時間。訓練單層 LSTM 時,每次迭代大概需要 600 秒,一晚上可以完成實驗。然而,訓練三層 LSTM 時,每次迭代需要 7000 秒,總共需要好幾天的時間完成訓練。所以,更快的驗證損失的下降實際上并不意味著更快地得出結果。完全從我的主觀視角來說,盡管需要花費更多時間去訓練,使用三層 LSTM 層的網絡生成的詩是更好的。

      生成詩歌

      為了產生完全原創的文本,我還需要改變文本的生成方式。在 keras 庫中的示例中,腳本從訓練數據中選擇一個隨機的字符序列作為輸入,即訓練神經網絡的種子。我想要構建一個能寫出原創詩歌的詩歌機器人,而不是轉寫其他詩人的詩句!因此,我在生成文本的步驟中,嘗試了不同的種子。由于我已經在訓練集合中為每首詩加上了「++++\n」的開頭,我想這就已經注意創造完全原創的詩歌了。但是結果是一組沒有意義的「\n」、「.」、「_」和「&」的組合。盡管反復的試驗和糾錯,我發現種子序列需要與訓練序列擁有相同數目的字符。在事后看來,這是顯而易見的。最終,我使用了一個有 300 個字符的序列,我通過重復「++++\n」來生成剛好 300 個字符的用于文本生成的種子。這個詩歌機器人每輪可以生成幾首詩并偶爾用「++++\n」將這幾首詩分割開來。

      在腳本生成了新一輪詩歌后,我做了最后的剽竊檢查。為了達到這一點,我首先在訓練集中建立了一個所有 4-gram(包含 4 個單詞的短語)的集合,并且對我的詩歌機器人寫的詩做了同樣的操作。之后,我計算出了這兩個集合的交集。為了達到本實驗的目的,我手動檢查了 4-gram,確保出現在兩個 4-gram 集合中的短語是無意義的。多數時候,這個交集里的短語都是這樣:

      i don't want

      i can not be

      i want to be

      the sound of the

      為了得到更好的測試結果,我在 5-gram 和 6-gram 上重復了這個步驟。如果我要將這個過程自動化,我可能會采用一種基于頻率的方法,并且排除掉那些被認為是剽竊的、多個作者詩作間的共同的 n-gram。

      神奇的詩篇!

      在每一輪迭代之后輸出模型的權重意味著我們可以在訓練時在一些節點上裝載模型的快照。當我們觀察最終模型的前期迭代時,很顯然,詩歌機器人會立刻領悟換行技巧。我預料到了這一點,因為根據設計,訓練設計最顯著的特征是每行字符數很少。下面是一個經過一輪迭代的訓練生成的詩:

      簡簡單單用 LSTM 創造一個寫詩機器人

      詩歌機器人已經學習到了一些真實的詞匯,并且模仿在行與行之間留出空白的常見做法。乍看之下,如果你不仔細探究,這看上去就像一首詩。在單層 LSTM 模型的損失函數收斂之后,除了換行,模型還學會了詩的分節,甚至顯示出了一些常見的重復的詩歌修辭手法。

      簡簡單單用 LSTM 創造一個寫詩機器人

      LSTM 的強大之處在單行詩句中非常明顯了。除了本文題目的那一行,另一個我最喜歡的詩行是:

      簡簡單單用 LSTM 創造一個寫詩機器人

      在有史以來最有趣的格言機器人 Inspirobot 的輔助下,Demet從她最愛的詩行中學習,創造了這樣的佳句:

      簡簡單單用 LSTM 創造一個寫詩機器人

      盡管單一的 LSTM 模型在一首詩中并沒有完全掌握主題,但它在整個作品的創作過程中似乎都有一個共同的主線。下面是一個從所有單層 LSTM 模型生成的詩詞中產生的詞云:

      簡簡單單用 LSTM 創造一個寫詩機器人

      多么令人沉醉啊!這個詩歌機器人著迷于驕陽和星辰

      如果太陽是訓練數據中最常見的主題,那也就不足為奇了,然而事實并非如此!下面是一個訓練數據中產生的詞云:

      簡簡單單用 LSTM 創造一個寫詩機器人

      詩人熱衷于歌頌愛

      Emily Dickinson曾經描寫過關于自然和死亡的詩歌。我的詩歌機器人則描寫關于天體的詩歌。各有千秋!

      在增加了第二層 LSTM 網絡之后,我開始看到了其他的類似于頭韻和押韻的詩歌修辭手法:

      簡簡單單用 LSTM 創造一個寫詩機器人

      它也開始寫出一些十分有詩意的短語。這些短語有些類似于之前的模型偶爾產生的絕佳的詩句,但是他們有些時候跨越了不止一行。例如:

      簡簡單單用 LSTM 創造一個寫詩機器人

      天啊!這就很深刻了!

      到了這里,我們已經看到了換行、節律、押韻(包括在中間和結尾)、重復和頭韻。這還不錯!但是,除了偶得的佳句,這時詩歌機器人寫出的詩大多數都是不通順的單詞的集合。在大多數情況下,它沒有意義的短語甚至都不符合語法結構規范。

      然而,隨著第三層 LSTM 的加入,這個情況產生了改觀。即使仍然沒有意義,模型產生的詩句更加可能合乎語法規范。例如:

      簡簡單單用 LSTM 創造一個寫詩機器人

      這個句子似乎說不通,但是它恰當地安排了語言的各個組成部分。它也包含頭韻的修辭手法,名詞性從句也有詩意的感覺。三層 LSTM 的網絡模型也產生了三行我認為非常有功力,飽含詩意的詩句:

      簡簡單單用 LSTM 創造一個寫詩機器人

      但是,下面這首完整的詩卻可以被稱作這個三層LSTM模型取得的最高成就!

      簡簡單單用 LSTM 創造一個寫詩機器人

      這首詩并不是節選自一大段文字的文本。這些詩行被牢牢地分隔在兩個「++++\n」之間!

      簡簡單單用 LSTM 創造一個寫詩機器人

      看啊,人性是多么有趣!我們是如此獨一無二,我們身上有無限的可能!

      特別鳴謝與我合作完成這個有趣的實驗的詩人們!請大家一定要去訪問他們的網站欣賞他們的佳作哦!

      O at the Edges – Robert Okaji

      Wolff Poetry – Linda J. Wolff

      Poetry, Short Prose and Walking – Frank Hubeny

      Perspectives on Life, the Universe and Everything – Aurangzeb Bozdar

      via Data for Breakfast,雷鋒網 AI 科技評論編譯

      相關文章:

      "LSTM之父"Jürgen Schmidhuber:我一直在努力實現三十年前的目標 “AI奴役人類”很愚蠢

      詳解如何用 LSTM 自動識別驗證碼

      《安娜卡列尼娜》文本生成——利用 TensorFlow 構建 LSTM 模型

      雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知

      簡簡單單用 LSTM 創造一個寫詩機器人

      分享:
      相關文章

      知情人士

      當月熱門文章
      最新文章
      請填寫申請人資料
      姓名
      電話
      郵箱
      微信號
      作品鏈接
      個人簡介
      為了您的賬戶安全,請驗證郵箱
      您的郵箱還未驗證,完成可獲20積分喲!
      請驗證您的郵箱
      立即驗證
      完善賬號信息
      您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
      立即設置 以后再說
      主站蜘蛛池模板: 亚洲 欧美 变态 另类 综合| 黄色日本视频| 欧美老熟妇又粗又长| 77777av| 少妇人妻88久久中文字幕| 老肥熟女| 国产精品成人无码久久久| 中文字幕人妻伦伦| 麻豆精品久久久久久久99蜜桃| 久久日产一线二线三线| 亚洲成人黄色网| 国产精品无码久久久久久| 国产成人av| 亚洲精品欧美综合二区| 亚洲成人影片| 韩国办公室三级hd激情| 亚洲另类激情专区小说图片| 鲁鲁AV| 高h纯肉无码视频在线观看| 久久中文字幕人妻| 家庭激情网| 国产成人精品一区二区秒拍1o| 中文字幕久久久久久久系列| 无码人妻精品一区二| 国产精品天堂avav在线| 在线 | 一区二区三区| 国产精品午夜视频自在拍| 欧美色aⅴ欧美综合色| 哈巴河县| 国产人妻精品无码av在线| 日韩伊在线| 成在线人免费| 亚洲制服丝袜在线| 亚洲不卡中文字幕| 亚洲无码流出| 俺来也俺也啪www色| 水蜜桃视频在线观看免费18| 男人的天堂色偷偷亚洲京东| 国产一级r片内射免费视频| 久久热这里只有精品国产| 精品无人乱码一区二区三区的优势 |