丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能開(kāi)發(fā)者 正文
發(fā)私信給skura
發(fā)送

0

如何用 GPT2 和 BERT 建立一個(gè)可信的 reddit 自動(dòng)回復(fù)機(jī)器人?

本文作者: skura 2020-02-15 11:58
導(dǎo)語(yǔ):這是一份詳細(xì)的實(shí)操教程

上個(gè)月,我嘗試構(gòu)建一個(gè) reddit 評(píng)論機(jī)器人,通過(guò)結(jié)合兩個(gè)預(yù)先訓(xùn)練的深度學(xué)習(xí)模型 GPT-2 和 BERT 生成自然語(yǔ)言回復(fù)。在這里我想一步一步地介紹一下我的工作,這樣其他人就可以用我所建立的東西來(lái)工作了。如果愿意,可以直接跳轉(zhuǎn)到項(xiàng)目代碼:https://github.com/lots-of-things/gpt2-bert-reddit-bot 。這項(xiàng)工作還參考了以下內(nèi)容:https://colab.research.google.com/drive/1VLG8e7YSEwypxU-noRNhsv5dW4NfTGce;https://colab.research.google.com/github/google-research/bert/blob/master/predicting_movie_reviews_with_bert_on_tf_hub.ipynb               

模型概述              

在討論細(xì)節(jié)之前,我想對(duì)整個(gè)過(guò)程做一個(gè)概述。這個(gè)流程圖顯示了我需要訓(xùn)練的 3 個(gè)模型,以及將模型連接在一起以生成輸出的過(guò)程。

如何用 GPT2 和 BERT 建立一個(gè)可信的 reddit 自動(dòng)回復(fù)機(jī)器人?

這里有很多步驟,但我希望它們不要太混亂。以下是我將在這篇文章中解釋的步驟。              

  • 步驟 0:從你最喜歡的 reddit 文章中獲取一些 reddit 評(píng)論數(shù)據(jù),并將其格式化為類似「comment[SEP]reply」的字符串              

  • 步驟 1:微調(diào) GPT-2 以生成格式為「comment[SEP]reply」的 reddit 文本              

  • 步驟 2:微調(diào)兩個(gè) BERT 分類器:              

a: 區(qū)分真實(shí)回復(fù)和 GPT-2 生成的回復(fù)              

b: 預(yù)測(cè)評(píng)論將獲得多少次支持             

  • 步驟 3:使用 praw 下載當(dāng)前評(píng)論              

  • 步驟 4:使用微調(diào)的 GPT2 為每個(gè)評(píng)論生成多個(gè)回復(fù)              

  • 步驟 5:將生成的回復(fù)傳遞給兩個(gè) BERT 模型,以生成對(duì)真實(shí)性和投票數(shù)的預(yù)測(cè)              

  • 步驟 6:使用一些標(biāo)準(zhǔn)來(lái)選擇要提交的回復(fù)              

  • 步驟 7:使用 praw 提交所選評(píng)論              

  • 步驟 8:享受成果!             

獲取大量 reddit 評(píng)論數(shù)據(jù)              

與任何機(jī)器學(xué)習(xí)項(xiàng)目一樣,只有獲得用于訓(xùn)練模型的數(shù)據(jù),才能啟動(dòng)項(xiàng)目。              

我用來(lái)微調(diào)模型的數(shù)據(jù)來(lái)自之前檢索到的 reddit 評(píng)論大型數(shù)據(jù)庫(kù):https://bigquery.cloud.google.com/dataset/fh-bigquery:reddit_comments?pli=1 。有一個(gè)正在進(jìn)行的項(xiàng)目(https://www.reddit.com/r/bigquery/wiki/datasets ),它在 web 上搜索許多站點(diǎn),并將它們存儲(chǔ)在一堆 Google BigQuery 表中。對(duì)我來(lái)說(shuō),我很驚訝竟然找不到一個(gè)關(guān)于如此大的項(xiàng)目的中心頁(yè)面,但我用了幾個(gè) reddit 和 medium 帖子來(lái)拼湊我需要的查詢格式。              

首先,我下載了一堆評(píng)論和回復(fù)信息,分別是「寫作」、「科幻」、「科幻小說(shuō)」、「機(jī)器學(xué)習(xí)」、「哲學(xué)」、「COGSICI」、「神經(jīng)學(xué)」和「未來(lái)學(xué)」。此查詢用于從 bigquery 中提取特定年份和月份({ym})的注釋。

SELECT s.subreddit as subreddit,
s.selftext as submission, a.body AS comment, b.body as reply,
s.score as submission_score, a.score as comment_score, b.score as reply_score,
s.author as submission_author, a.author as comment_author, b.author as reply_author
FROM `fh-bigquery.reddit_comments.{ym}` a
LEFT JOIN `fh-bigquery.reddit_comments.{ym}` b
ON CONCAT('t1_',a.id) = b.parent_id
LEFT JOIN  `fh-bigquery.reddit_posts.{ym}` s
ON CONCAT('t3_',s.id) = a.parent_id
where b.body is not null
 and s.selftext is not null and s.selftext != ''
 and b.author != s.author
 and b.author != a.author
 and s.subreddit IN ('writing',
                     'scifi',
                     'sciencefiction',
                     'MachineLearning',
                     'philosophy',
                     'cogsci',
                     'neuro',
                     'Futurology')

我使用 bigquery python API 自動(dòng)生成查詢,以便下載 2017 年和 2018 年的幾個(gè)月的數(shù)據(jù)。這個(gè)腳本在我需要的時(shí)間段內(nèi)迭代,并將它們下載到 raw_data/ 文件夾中的本地磁盤。              

最后,我希望能夠給 GPT-2 網(wǎng)絡(luò)加上一條評(píng)論并生成一個(gè)回復(fù)。為此,我需要重新格式化數(shù)據(jù),使其包含由特殊 [SEP] 字符串分隔的兩部分,以便讓算法分清每個(gè)部分。每行訓(xùn)練數(shù)據(jù)看起來(lái)是如下的樣子。

"a bunch of primary comment text [SEP] all of the reply text”

在我用這種格式訓(xùn)練模型之后,我可以給訓(xùn)練模型一個(gè)字符串,比如「一些新的主要評(píng)論文本」,它將開(kāi)始根據(jù)訓(xùn)練數(shù)據(jù)生成它認(rèn)為最適合的剩余的「一些新回復(fù)」。下面我將更詳細(xì)地解釋如何將此類數(shù)據(jù)輸入 GPT-2 微調(diào)腳本?,F(xiàn)在,你可以使用此腳本將數(shù)據(jù)轉(zhuǎn)換為 GPT-2 微調(diào)所需的格式,并將其保存為 gpt2_finetune.csv。              

微調(diào) GPT-2 并為 reddit 生成文本              

使用 GPT-2 的主要優(yōu)勢(shì)在于,它已經(jīng)在互聯(lián)網(wǎng)上數(shù)百萬(wàn)頁(yè)文本的海量數(shù)據(jù)集上進(jìn)行了預(yù)訓(xùn)練。然而,如果你直接使用 GPT-2,你最終生成的文本會(huì)看起來(lái)像你在互聯(lián)網(wǎng)上找到的任何東西。有時(shí)它會(huì)生成一篇新聞文章,有時(shí)它會(huì)生成一個(gè)烹飪博客菜譜,有時(shí)它會(huì)生成一個(gè)充滿憤怒情緒的 facebook 帖子。你沒(méi)有太多的控制權(quán),因此,你將無(wú)法真正使用它來(lái)有效地生成 reddit 評(píng)論。              

為了克服這個(gè)問(wèn)題,我需要「微調(diào)」預(yù)先訓(xùn)練的模型。微調(diào)意味著采用一個(gè)已經(jīng)在大數(shù)據(jù)集上訓(xùn)練過(guò)的模型,然后只使用你想要在其上使用的特定類型的數(shù)據(jù)繼續(xù)對(duì)它進(jìn)行訓(xùn)練。這個(gè)過(guò)程(有點(diǎn)神奇地)允許你從大的預(yù)訓(xùn)練模型中獲取大量關(guān)于語(yǔ)言的一般信息,并用所有關(guān)于你正試圖生成的確切輸出格式的特定信息對(duì)其進(jìn)行調(diào)整。              

微調(diào)是一個(gè)標(biāo)準(zhǔn)的過(guò)程,但并不是很容易做到。我不是一個(gè)深度學(xué)習(xí)專家,但幸運(yùn)的是,對(duì)我來(lái)說(shuō),一個(gè)非常優(yōu)秀的專家已經(jīng)建立了一些非常簡(jiǎn)單的打包好的實(shí)用程序,它就是 gpt-2-simple,可以用于微調(diào) gpt-2,是不是很簡(jiǎn)單?!              

最棒的是,gpt-2-simple 的作者甚至建立了一個(gè)經(jīng)過(guò)微調(diào)的 Google Colab notebook。Google Colab 是一個(gè)令人驚嘆的免費(fèi)資源,可以讓你在 Google GPU 服務(wù)器上運(yùn)行 python jupyter notebook。這項(xiàng)資源完全公開(kāi),因此我正式成為了谷歌的終身粉絲。              

你可以跟隨教程(https://colab.research.google.com/drive/1VLG8e7YSEwypxU-noRNhsv5dW4NfTGce )學(xué)習(xí)如何使用 GPT-2-simple 微調(diào) GPT-2 模型。對(duì)于我的用例,我把所有的代碼壓縮并重新格式化了一點(diǎn),以生成自己的 gpt-2 notebook(https://colab.research.google.com/drive/1VyOU81rsPsP_8WSKq-VZfB8TcMkPszG- ),它運(yùn)行在我在上一步生成的 gpt2_finetune.csv 文件上。和在原始教程中一樣,你需要授予筆記本從 Google 驅(qū)動(dòng)器讀寫的權(quán)限,然后將模型保存到 Google 驅(qū)動(dòng)器中,以便從以后的腳本重新加載。              

用于偽檢測(cè)和上投票預(yù)測(cè)的訓(xùn)練BERT模型              

即使經(jīng)過(guò)微調(diào),這個(gè)模型的輸出也可能會(huì)相當(dāng)怪異。為了提高回復(fù)的質(zhì)量,我修改了 GAN 的概念,創(chuàng)建了另一個(gè)元模型,這個(gè)模型能夠找出所有奇怪的回復(fù)。因此,我使用 GPT-2 為每條評(píng)論生成 10+ 個(gè)候選回復(fù),然后使用另一個(gè)模型篩選出我能發(fā)布的最佳回復(fù)。              

為了確定最佳方案,我實(shí)際上想做兩件事:              

  • 過(guò)濾掉不切實(shí)際的回復(fù)              

  • 對(duì)于具有現(xiàn)實(shí)性的回答,選擇一個(gè)我認(rèn)為最有說(shuō)服力的              

因此,為了做到這一點(diǎn),我必須訓(xùn)練兩個(gè)分類器,一個(gè)是預(yù)測(cè)真實(shí)回復(fù)的概率,另一個(gè)是預(yù)測(cè)高分回復(fù)的概率。有很多方法可以執(zhí)行這個(gè)預(yù)測(cè)任務(wù),但是最近為這類問(wèn)題構(gòu)建的最成功的語(yǔ)言模型之一是另一種深度學(xué)習(xí)架構(gòu),稱為 Transformers 或 BERT 的雙向編碼器表示。使用這個(gè)模型的一個(gè)很大的好處是,與 GPT-2 類似,研究人員已經(jīng)在我永遠(yuǎn)無(wú)法獲得的超大型數(shù)據(jù)集上預(yù)先訓(xùn)練了網(wǎng)絡(luò)。         

同樣,我不是使用深度學(xué)習(xí)基礎(chǔ)設(shè)施最厲害的專家,但幸運(yùn)的是,其他優(yōu)秀的 tensorflowhub 專家編寫了一個(gè) GoogleColab 教程(https://colab.research.google.com/github/google-research/bert/blob/master/predicting_movie_reviews_with_bert_on_tf_hub.ipynb ),使用預(yù)先訓(xùn)練的 BERT 網(wǎng)絡(luò)對(duì)文本分類器模型進(jìn)行微調(diào)。所以我所要做的就是把兩者結(jié)合起來(lái)。              

在下一節(jié)中,我將介紹微調(diào)和一些模型評(píng)估,但是如果你想快速啟動(dòng)而不想自己費(fèi)心微調(diào),可以從這里(https://drive.google.com/open?id=1GmGNqihV0nCQ6evLBmopOhjups_RESv- )、這里(https://drive.google.com/open?id=1-Bov5PtPrP2DvFw4yD-lxp2wTjGw0bwB )和這里(https://drive.google.com/file/d/1DTfYUxXEz80S0baCb4xPSrzx85F0FVTP/view?usp=sharing )下載三個(gè)微調(diào)的模型。

BERT 鑒別器性能              

評(píng)估現(xiàn)實(shí)性的模型的訓(xùn)練就和在傳統(tǒng)的 GAN 中一樣。我讓另一個(gè) Colab notebook 生成了成千上萬(wàn)的虛假評(píng)論,然后創(chuàng)建了一個(gè)數(shù)據(jù)集,將我的虛假評(píng)論與成千上萬(wàn)的真實(shí)評(píng)論混在一起。然后,我把這個(gè)數(shù)據(jù)集輸入一個(gè) BERT 現(xiàn)實(shí)性微調(diào)的 notebook 進(jìn)行訓(xùn)練和評(píng)估。該模型實(shí)際上具有驚人的區(qū)分真假評(píng)論的能力。              

BERT 現(xiàn)實(shí)性模型度量

'auc': 0.9933777,
'eval_accuracy': 0.9986961,
'f1_score': 0.99929225,
'false_negatives': 3.0,
'false_positives': 11.0,
'precision': 0.9988883,
'recall': 0.99969655,
'true_negatives': 839.0,
'true_positives': 9884.0

接下來(lái),生成器創(chuàng)建的每個(gè)回復(fù)都可以通過(guò)這個(gè) BERT 鑒別器運(yùn)行,根據(jù)其真實(shí)性會(huì)得到從 0 到 1 的分?jǐn)?shù)。然后我只過(guò)濾返回最具有真實(shí)性的評(píng)論。              

為了預(yù)測(cè)一個(gè)回復(fù)將獲得多少次支持,我以類似的方式(https://drive.google.com/open?id=1vXJjQbBZZ0Jo-LvcwRaNzCSAgAVem1cC )構(gòu)建了另一個(gè)模型。這一次,這個(gè)模型只是在一個(gè)數(shù)據(jù)集上訓(xùn)練,這個(gè)數(shù)據(jù)集包含了一堆真實(shí)的 reddit 評(píng)論,用來(lái)預(yù)測(cè)他們實(shí)際獲得了多少投票。       

該模型還具有令人驚訝的高預(yù)測(cè)精度。下面這個(gè) ROC 曲線表明,我們可以得到很多正確的真陽(yáng)性,而不會(huì)有太多的假陽(yáng)性。關(guān)于真陽(yáng)性和假陽(yáng)性的含義,請(qǐng)參閱本文:https://developers.google.com/machine-learning/crash-course/classification/true-false-positive-negative

如何用 GPT2 和 BERT 建立一個(gè)可信的 reddit 自動(dòng)回復(fù)機(jī)器人?

基于BERT 的支持票預(yù)測(cè)的 ROC 曲線              

在模型交叉驗(yàn)證性能的支持下,我很高興將它連接到一個(gè)實(shí)時(shí)評(píng)論系統(tǒng),并開(kāi)始發(fā)布我的機(jī)器人的想法!

用PRAW拉實(shí)時(shí)評(píng)論              

盡管我可以使用 bigquery 上的數(shù)據(jù)生成訓(xùn)練集,但大多數(shù)數(shù)據(jù)實(shí)際上都是幾個(gè)月前的。在社交媒體網(wǎng)站上回復(fù)幾個(gè)月前的評(píng)論是一件非常不正常的事情,因此能夠以某種方式從 reddit 上獲取最新的數(shù)據(jù)非常重要。

幸運(yùn)的是,我可以使用 praw 庫(kù)和下面的代碼片段,從幾個(gè)我認(rèn)為會(huì)產(chǎn)生一些有趣響應(yīng)的 reddit 中的前 5 個(gè)「上升」帖子中獲取所有評(píng)論。

for subreddit_name in ['sciencefiction',
                      'artificial',
                      'scifi',
                      'BurningMan',
                      'writing',
                      'MachineLearning',
                      'randonauts']:
 subreddit = reddit.subreddit(subreddit_name)

 for h in subreddit.rising(limit=5):

我可以在生成器和鑒別器中運(yùn)行每條評(píng)論以生成一個(gè)回復(fù)。              

運(yùn)行生成器和鑒別器              

最后,我只需要構(gòu)建一些東西來(lái)重新加載所有經(jīng)過(guò)微調(diào)的模型,并通過(guò)它們傳遞新的 reddit 評(píng)論來(lái)獲得回復(fù)。在理想的情況下,我會(huì)在一個(gè)腳本中運(yùn)行 GPT-2 和 BERT 模型。不幸的是,設(shè)計(jì)人員在實(shí)現(xiàn) gpt2-simple 包的過(guò)程中有一個(gè)怪癖,使得在同一個(gè)環(huán)境中無(wú)法實(shí)例化兩個(gè)計(jì)算圖。

所以,我自己運(yùn)行了一個(gè) GPT-2 生成器 notebook(https://drive.google.com/open?id=1Z-sXQUsC7kHfLVQSpluTR-SqnBavh9qC ),下載最新的評(píng)論,生成一批候選回復(fù),并將它們存儲(chǔ)在我的 Google 驅(qū)動(dòng)器上的 csv 文件中。然后,我在一個(gè)單獨(dú)的 BERT 鑒別器 notebook(https://drive.google.com/open?id=1mWRwK1pY34joZul5gBeMortfTu8M9OPC )中重新加載了候選的回復(fù),選擇最好的回復(fù)并將其提交回 reddit。              

你可以在項(xiàng)目的 github repo(https://github.com/lots-of-things/gpt2-bert-reddit-bot )或 Google Drive文件夾(https://drive.google.com/open?id=1by97qt6TBpi_o644uKnYmQE5AJB1ybMK )中查看整個(gè)工作流。如果你認(rèn)為事情可以解釋得更清楚,或者你發(fā)現(xiàn)了錯(cuò)誤,請(qǐng)將問(wèn)題提交給項(xiàng)目。    

最后一步:享受成果              

我在 tupperware party 的 reddit 帳戶下提交了所有回復(fù)(希望不會(huì)因?yàn)樯虡?biāo)問(wèn)題而被關(guān)閉)。你可以在這里(https://www.bonkerfield.org/2020/02/combining-gpt-2-and-bert/#replies )查看模型輸出的一些亮點(diǎn),或者查看注釋的完整列表,以檢查系統(tǒng)輸出的所有內(nèi)容。我也在 Google Drive 上共享了一個(gè)文件夾(https://drive.google.com/drive/folders/1a2MhIqL6jvyJ-3bGCXAweLbYtNXSUei7?usp=sharing ),其中包含了所有的候選答案以及 BERT 模型中的分?jǐn)?shù)。  

最后,我知道在創(chuàng)作這樣的作品時(shí),肯定有一些倫理上的考慮。所以,請(qǐng)盡量負(fù)責(zé)任地使用這個(gè)工具。

via:https://www.bonkerfield.org/2020/02/reddit-bot-gpt2-bert/

雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng) 

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。

如何用 GPT2 和 BERT 建立一個(gè)可信的 reddit 自動(dòng)回復(fù)機(jī)器人?

分享:
相關(guān)文章
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說(shuō)