基於 Tensorflow eager 的文本生成,注意力,圖像注釋的完整代碼
本文為 AI 研習社編譯的技術博客,原標題 Complete code examples for Machine Translation with Attention, Image Captioning, Text Generation, and DCGAN implemented with tf.keras and eager execution,作者為 Yash Katariyae(開發者項目工程師實習生)。
翻譯 | 老趙 整理 | 凡江
我總是發現生成和序列模型令人著迷:他們提出的問題與我們剛開始學習機器學習時常遇到的問題不同。當我第一次開始學習ML時,我學了分類和回歸(和大多數人一樣)。這些幫助我們提出並回答以下問題:
這是貓還是狗的照片? (分類)
明天會下雨的幾率是多少? (回歸)
掌握分類和回歸是非常有用的技能,並且這些領域的應用對現實問題幾乎沒有限制。但是,我們可能會問其他不同類型的問題。
我們能生成一首詩嗎? (文字生成)
我們可以生成一張貓的照片嗎? (GANs)
我們可以將句子從一種語言翻譯成另一種語言嗎? (NMT)
我們可以描述圖像內容嗎? (圖像注釋)
在暑期實習期間,我使用TensorFlow的兩個最新API開發了這些示例:tf.keras,以及eager function,我在下面分享了它們。我希望你發現它們有用,有趣。
eager function是一個逐步運行的界面,其中操作在從Python調用時即刻執行。這使得TensorFlow上手容易,並且可以是研究和開發更加直觀。
tf.keras是一個定義模型的高級API,就像積木建造的樂高一樣。我使用模型子類化實現了這些示例,它允許通過子類化tf.keras.Model並定義自己的前向傳遞來製作完全可自定義的模型。 當啟用eager function時,模型子類化特別有用,因為可以強制寫入前向傳遞。
如果你對這些APIs不了解,你可以通過探索tensorflow.org/tutorials(http://tensorflow.org/tutorials)上的序列來了解更多信息,其中包含最近更新的示例。
以下每個示例都是端到端的,並遵循類似的模式:
自動下載訓練數據集。
預處理訓練數據,並創建tf.data數據集以在輸入管道中使用。
使用tf.keras模型子類API定義模型。
使用eager function訓練模型。
演示如何使用訓練模型。
示例 1:文本生成
我們的第一個例子(https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/text_generation.ipynb)是文本生成,我們使用RNN生成與莎士比亞類似的文本。您可以使用上面的鏈接在Colaboratory上運行它(或者您也可以從GitHub下載它作為Jupyter筆記本)。代碼在筆記本中詳細解釋。
基於莎士比亞的大量作品,這個例子學會了生成聽起來和風格相似的文字:
在訓練莎士比亞寫作集合的30個時期的後,筆記本生成了示例文本。
雖然大多數句子沒有意義(當然,這個簡單的模型還沒有學會語言的意義),令人印象深刻的是大多數單詞是有效的,並且它生成出的戲劇的結構看起來類似於來自原文的那些。 (這是一個基於角色的模型,在訓練的短時間內 - 它已經成功地從頭開始學習這兩件事)。如果您願意,可以通過更改單行代碼來更改數據集。
了解更多關於RNN的最好方法是Andrej Karpathy的文章,即The Unreasonable Effectiveness of Recurrent Neural Networks。如果您想了解更多關於使用Keras或tf.keras實現RNN的信息,我們推薦由Francois Chollet提供的筆記。
示例 2:DCGAN
在這個例子(https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/dcgan.ipynb)中,我們使用DCGAN生成手寫數字。生成式對抗網路(GAN)由生成器和鑒別器組成。生成器的工作是創建令人信服的圖像以欺騙鑒別器。鑒別器的工作是在真實圖像和偽圖像(由生成器創建)之間進行分類。下面看到的輸出是在使用 Unsupervised Representing Learning with Deep Convolutional Generative Adversarial Networks。
這篇文章所述的體系結構和超參數訓練150個曆元的生成器和鑒別器之後生成的。
示例 3:注意力的神經機器翻譯
這個例子(https://colab.sandbox.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/nmt_with_attention/nmt_with_attention.ipynb)訓練模型將西班牙語句子翻譯成英語句子。訓練模型後,您將能夠輸入西班牙語句子,例如「?todavia estan en casa?」,並返回英文翻譯:「你還在家嗎?」
您在下面看到的圖像是注意力圖。它顯示了輸入句子的哪些部分在翻譯時具有模型的注意力。例如,當模型翻譯「cold」這個詞時,它看著「mucho」,「frio」,「aqui」。我們使用tf.keras和eager function從頭開始實現Neural Machine Translation by Jointly Learning to Align and Translate這篇文章中的例子,詳細解釋在筆記中。您還可以將此實現用作完成自己的自定義模型的基礎。
示例 4:注意圖像標題
在此示例(https://colab.sandbox.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/image_captioning_with_attention.ipynb)中,我們訓練模型以預測圖像的注釋。 我們還生成了一個注意力圖,它顯示了模型在生成標題時所關注的圖像部分。 例如,當模型預測單詞「surfboard」時,模型會聚焦在圖像中的衝浪板附近。 使用MS-COCO數據集的子集訓練該模型,該數據集可自動下載。
下一步
要了解有關tf.keras和eager的更多信息,請密切關注tensorflow.org/tutorials(http://tensorflow.org/tutorials)以獲取更新內容,並定期查看此博客和TensorFlow的推特供稿。 謝謝閱讀!
致謝
非常感謝Josh Gordon,Mark Daoust,Alexandre Passos,Asim Shankar,Billy Lamberta,Daniel"Wolff"Dobson和Francois Chollet的貢獻和幫助!
https://medium.com/tensorflow/complete-code-examples-for-machine-translation-with-attention-image-captioning-text-generation-51663d07a63d
※如何從數據挖掘比賽中脫穎而出?快來 get 阿里媽媽廣告演算法賽亞軍套路吧!
※NLP 教程:詞性標註、依存分析和命名實體識別解析與應用
TAG:AI研習社 |