當前位置:
首頁 > 知識 > OpenAI「假新聞」生成器GPT-2的最簡Python實現

OpenAI「假新聞」生成器GPT-2的最簡Python實現

選自GitHub

機器之心整理

由 OpenAI 推出的文本生成模型 GPT-2 最近引發了人們的廣泛關注,這種演算法不僅在很多任務上超過了此前的最佳水平,還可以根據一小段話自動「腦補」出大段連貫的文本,並模擬不同的寫作風格。它看起來可以用來自動生成「假新聞」。

然而這個GPT-2模型內含多達 15 億個參數,過高的算力要求讓大多數開發者望而卻步。而且 OpenAI 還曾「出於對模型可能遭惡意應用的擔憂,並不會立即發布所有預訓練權重。」一時引發機器學習社區的吐槽。

近日,由 Buzzfeed 數據科學家 Max Woolf 開源的「GPT-2 精簡版」出現在 GitHub 上。這是一個簡單的 Python 軟體包,它封裝了 OpenAI GPT-2 文本生成模型(特別是它是具有 1.17 億超參數的「較小」版本)的現有模型微調和生成腳本。此外,這個軟體包讓我們可以更容易地生成文本,生成一個文件以便於管理,從而允許前綴強制文本以給定的短語開頭。

項目鏈接:https://github.com/minimaxir/gpt-2-simple

文本生成示意

該 Python 包包含以下內容,並對其進行了最小程度的低級更改:

來自 OpenAI 官方 GPT-2 庫的模型管理(MIT 許可證)

來自 GPT-2 中 Neil Shepperd fork 的模型微調(MIT 許可證)

來自 textgenrnn 的文本生成輸出管理(MIT 許可證)

為了微調,該項目強烈建議你使用 GPU,雖然你用 CPU 也可以生成(但速度會慢很多)。如果你在雲端訓練,強烈建議你使用 Colaboratory notebook 或帶有 TensorFlow 深度學習圖像的谷歌計算引擎 VM(因為 GPT-2 模型位於 GCP 上)。

你可以使用 gpt-2-simple 在這個 Colaboratory notebook 中免費用 GPU 來重新訓練模型,該 notebook 還演示了這個軟體包的其它功能。

Colaboratory notebook 地址:https://colab.research.google.com/drive/1VLG8e7YSEwypxU-noRNhsv5dW4NfTGce

安裝

gpt-2-simple 可以通過 PyPI 來安裝:

你還要為你的系統安裝相應的TensorFlow(如 tensorflow 或 tensorflow-gpu)

使用

將模型下載到本地系統的示例,在數據集上對它進行微調,然後生成一些文本。

警告:模型是預訓練的,因此任何微調模型都是 500MB。

生成模型的檢查點默認在/checkpoint/run1 中。如果你想從該文件夾中載入模型並從中生成文本:

與 textgenrnn 一樣,你可以用 return_as_list 參數生成並保存文本供以後使用(如 API 或機器人)。

如果你想在 checkpoint 文件夾中存儲或載入多個模型,可以把 run_name 參數傳遞給 finetune 和 load_gpt2。

注意:如果你想在另一個數據集上進行微調或載入另一個模型,先重啟 Python 會話。

gpt-2-simple 和其它文本生成程序的區別

GPT-2 用來生成文本的方法與 textgenrnn 等其它安裝包(特別是純粹使用 GPU 生成完整文本序列並隨後對其進行解碼的安裝包)使用的方法略有不同,這些方法在沒有破解底層模型代碼的情況下無法輕易修復。

所以:

一般來說,GPT-2 更擅長在整個生成長度上維護上下文,從而能夠有效地生成對話文本。文本在語法上通常也是正確的,並且有適當的大寫和較少的列印錯誤。

原始 GPT-2 模型在大量來源的文本上進行訓練,使該模型包含輸入文本中看不到的趨勢。

GPT-2 針對每個請求最多只能生成 1024 個 token(約是 3-4 段英語文本)。

GPT-2 在到達特定的結束 token 時無法提前停止。(暫時解決方法:將 truncate 參數傳遞給 generate 函數,以便只收集文本,直至到達特定的結束 token。你可能想適當地縮小 length。)

較高溫度(如 0.7-1.0)能夠更好地生成更有趣的文本,而其它框架在溫度 0.2-0.5 之間運轉更好。

當對 GPT-2 進行微調時,它並不清楚較大文本中文檔的開頭或結尾。你需要使用定製的字元序列來顯示文檔的開頭或結尾。之後在文本生成中,你可以指定針對開始 token 序列的 prefix 和針對結束 token 序列的 truncate。

通過設置一個可分成 nsamples 的 batch_size,你可以使用 GPT-2 生成並行文本,從而加快生成速度。GPT-2 與 GPU 配合得很好(可以在 Colaboratory K80 上將 batch_size 設置為 20)!

計劃工作

注意:除非需求另有規定,否則本項目的範圍非常小。

允許用戶生成超過 1024 個 token 的文本。

允許用戶使用 Colaboratory 的 TPU 進行微調。

允許用戶使用多個 GPU(如 Horovod)。

對於 Colaboratory,允許模型在訓練期間自動將檢查點保存至 Google Drive,以防止超時。

使用 gpt-2-simple 的示例

ResetEra:生成視頻遊戲論壇討論

地址:https://www.resetera.com/threads/i-trained-an-ai-on-thousands-of-resetera-thread-conversations-and-it-created-hot-gaming-shitposts.112167/

項目創建者:Max Woolf

基於 GPT-2 的「故事生成器」

GPT-2 強大的模型不僅吸引了眾多機器學習從業者的關注,其「腦補」故事的能力也讓人們不禁有了很多大膽的想法。為了讓更多人能夠接觸最新技術,另一個開發者 eukaryote 最近還推出了一個新網站:This Story Does Not Exist

鏈接:https://www.thisstorydoesnotexist.com/

這是一個基於 GPT-2 的文本生成器。在這裡,每個人都可以輸入一段文字,看看人工智慧會給你講一段什麼樣的故事,比如:

改寫冰與火之歌的結局,就靠你了!

本文為機器之心整理,轉載請聯繫本公眾號獲得授權。

------------------------------------------------


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

SysML 2019論文解讀:推理優化
AI擊敗人類法律翻譯,前獵豹首席科學家為何跨界法律AI公司?

TAG:機器之心 |