自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何用深度學(xué)習(xí)訓(xùn)練一個像你一樣會聊天的機器人?

人工智能 深度學(xué)習(xí)
本文主要會詳細(xì)介紹聊天機器人在文本方面的運作,我們將看到如何使用深度學(xué)習(xí)模型訓(xùn)練聊天機器人用我們所希望的方式在社交媒體上進行對話。

[[201242]]

聊天機器人到底是什么呢?說白了,就是計算機程序通過聽覺或文本方法進行對話。當(dāng)今最流行的四個對話機器人是:蘋果的Siri、微軟Cortana、谷歌助理、亞馬遜的Alexa。他們能夠幫你查比分、打電話,當(dāng)然,偶爾他們也會出錯。

本文主要會詳細(xì)介紹聊天機器人在文本方面的運作,我們將看到如何使用深度學(xué)習(xí)模型訓(xùn)練聊天機器人用我們所希望的方式在社交媒體上進行對話。

意圖&深度學(xué)習(xí)

如何訓(xùn)練一個高水平的聊天機器人呢?

高水平的工作聊天機器人是應(yīng)當(dāng)對任何給定的消息給予最佳反饋。這種“最好”的反應(yīng)應(yīng)該滿足以下要求:

  • 回答對方問題
  • 反饋相關(guān)信息
  • 問后續(xù)問題或用現(xiàn)實方法繼續(xù)對話

這三個方面是機器人表現(xiàn)出來的內(nèi)容,而隱含其中沒有表現(xiàn)出來的則是一系列流程:理解發(fā)送者的意圖,確定反饋信息的類型(問一個后續(xù)問題,或者直接反應(yīng)等),并遵循正確的語法和詞法規(guī)則。

請注意,“意圖”二字至關(guān)重要。只有明確意圖,才能保證在后續(xù)流程的順利進行。對于“意圖”,讀者通過本篇文章,將會看到,深度學(xué)習(xí)是最有效的解決“意圖”問題的方法之一。

深度學(xué)習(xí)的方法

聊天機器人使用的深度學(xué)習(xí)模型幾乎都是 Seq2Seq。2014年,Ilya Sutskever, Oriol Vinyals, and Quoc Le 發(fā)表了《Sequence to Sequence Learning with Neural Networks》一文。摘要顯示,盡管機器翻譯已經(jīng)做的很好,但Seq2Seq卻模型能更好的完成各種各樣的NLP的任務(wù)。

 

Seq2Seq模型由兩個主要部件組成,一個是編碼器RNN,另一個是解碼器RNN。從高層次上來說,編碼器的工作是將輸入文本信息生成固定的表示。解碼器則是接收這個表示,并生成一個可變長度的文本,以響應(yīng)它。

 

讓我們來看看它是如何在更詳細(xì)的層次上工作的。正如我們所熟知的,編碼器RNN包含了許多隱藏的狀態(tài)向量,它們每個都表示從上一次時間步驟中獲取的信息。例如,在第3步序中的隱藏狀態(tài)向量是前三個單詞的函數(shù)。通過這個邏輯,編碼器RNN的最終隱藏狀態(tài)向量可以被認(rèn)為是對整個輸入文本的一種相當(dāng)精確的表示。

而解碼器RNN負(fù)責(zé)接收編碼器的最后隱藏狀態(tài)向量,并使用它來預(yù)測輸出應(yīng)答的單詞。讓我們看看第一個單元。該單元的工作是使用向量表示v,并決定其詞匯表中哪個單詞是最適合輸出響應(yīng)的。從數(shù)學(xué)上講,這就意味著我們計算詞匯中的每一個單詞的概率,并選擇值的極大似然。

第二單元是向量表示v的函數(shù),也是先前單元的輸出。LSTM的目標(biāo)是估計以下條件概率。

 

讓我們來解構(gòu)這個方程式意味著什么。

左側(cè)指的是輸出序列的概率,這取決于給定輸入序列。右側(cè)包含p(yt | v,y1,…,yt),它是所有單詞的概率向量,條件是在前一步的向量表示和輸出的情況下。其中pi等價于西格瑪(或累計求和)的乘法。則右側(cè)可降為p(Y1 | V)*p(y2 | v,y1)*p(Y3 | v,y1,y2)。

在繼續(xù)之前,讓我們先做一個簡單的例子。讓我們在第一張圖片中輸入文本:“你明天有空嗎?”大多數(shù)人都會怎么回答呢?一般都會用“yes”、“yeah”、“no”開始。

在我們完成了網(wǎng)絡(luò)訓(xùn)練之后,概率p(Y1 | V)將是一個類似于下面的分布。 

 

再來看我們需要計算的第二個概率,p(y2 | v,y1)表是一個函數(shù),詞的分布y1以及向量的表示結(jié)果v,而pi將產(chǎn)生最終結(jié)果并作為我們的最終反應(yīng)。

Seq2Seq模型的最重要特性之一是它提供的多功能性。當(dāng)你想到傳統(tǒng)的ML方法(線性回歸,支持向量機)和深等深學(xué)習(xí)方法時,這些模型需要一個固定的大小輸入,并產(chǎn)生固定大小的輸出。但是輸入的長度必須事先知道。這是對諸如機器翻譯、語音識別和問答等任務(wù)的一個很大的限制。這些任務(wù)我們都不知道輸入短語的大小,我們也希望能夠生成可變長度響應(yīng),而不僅僅局限于一個特定的輸出表示。而Seq2Seq模型允許這樣的靈活性!

自2014以來,Seq2Seq模型已經(jīng)有了很多改進,你可以在這篇文章結(jié)尾“相關(guān)論文”部分中閱讀更多關(guān)于Seq2Seq的文章。

數(shù)據(jù)集的選擇

在考慮將機器學(xué)習(xí)應(yīng)用于任何類型的任務(wù)時,我們需要做的第一件事都是選擇數(shù)據(jù)集,并對我們需要的模型進行訓(xùn)練。對于序列模型,我們需要大量的會話日志。從高層次上講,這個編碼器-解碼器網(wǎng)絡(luò)需要能夠正確理解每個查詢(編碼器輸入)所期望的響應(yīng)類型(解碼器輸出)。一些常見的數(shù)據(jù)集包括:康奈爾電影對話語料庫、ubuntu語料庫和微軟的社交媒體對話語料庫。

雖然大多數(shù)人都在訓(xùn)練聊天機器人來回答具體信息或提供某種服務(wù),但我更感興趣的是更多的有趣的應(yīng)用程序。有了這篇文章,我想看看我是否可以用我自己的生活中的對話日志來訓(xùn)練一個Seq2Seq的模型來學(xué)習(xí)對信息的反應(yīng)。

獲取數(shù)據(jù) 

 

我們需要創(chuàng)建一個大量的對話數(shù)據(jù),在我的社交媒體上,我使用了Facebook、Google Hangouts、SMS、Linkedin、Twitter、Tinder和Slack 等著與人們保持聯(lián)系。

  • Facebook:這是大部分培訓(xùn)數(shù)據(jù)的來源。facebook有一個很酷的功能,讓你可以下載你所有的Facebook數(shù)據(jù)。包含所有的信息、照片、歷史信息。
  • Hangouts:您可以根據(jù)這個文章的指示來提取聊天數(shù)據(jù)。
  • SMS:可以快速獲得所有之前的聊天記錄(sms備份+是一個不錯的應(yīng)用程序),但我很少使用短信。
  • Linkedin:Linkedin確實提供了一種工具,可以在這里獲取數(shù)據(jù)的歸檔。
  • Twitter:這其中沒有足夠的私人信息。
  • Tinder:這其中的對話不是數(shù)據(jù)集。
  • Slack:我的Slack剛剛開始使用,只有幾個私有消息,計劃手動復(fù)制。

創(chuàng)建數(shù)據(jù)集

數(shù)據(jù)集的創(chuàng)建是機器學(xué)習(xí)的一個重要組成部分,它涉及到數(shù)據(jù)集預(yù)處理。這些源數(shù)據(jù)存檔格式不同,并且包含我們不需要的部分(例如,fb數(shù)據(jù)的圖片部分)。

 

正如您所看到的,Hangouts數(shù)據(jù)的格式與facebook數(shù)據(jù)有一點不同,而linkedin的消息以csv格式進行。我們的目標(biāo)是使用所有這些數(shù)據(jù)集來創(chuàng)建一個統(tǒng)一的文件,命名為(FRIENDS_MESSAGE,YOUR_RESPONSE)。

為了做到這一點,我編寫了一個python腳本,可以在這里查看。此腳本將創(chuàng)建兩個不同的文件。其中一個是Numpy對象(conversationDictionary.npy)包含所有輸入輸出對。另一個是一個大的txt文件(conversationData.txt)包含這些輸入輸出對的句子形式,一個對應(yīng)一個。通常,我喜歡共享數(shù)據(jù)集,但是對于這個特定的數(shù)據(jù)集,我會保持私有,因為它有大量的私人對話。這是最后一個數(shù)據(jù)集的快照。

 

詞向量

LOL,WTF,這些都是在我們的會話數(shù)據(jù)文件中經(jīng)常出現(xiàn)的所有單詞。雖然它們在社交媒體領(lǐng)域很常見,但它們并不是在很多傳統(tǒng)的數(shù)據(jù)集中。通常情況下,我在接近NLP任務(wù)時的第一個直覺是簡單地使用預(yù)先訓(xùn)練的向量,因為它們能在大型主體上進行大量迭代的訓(xùn)練。然而,由于我們有這么多的單詞和縮寫,而不是在典型的預(yù)先訓(xùn)練的單詞向量列表中,因此,生成我們自己的單詞向量對于確保單詞正確表達是至關(guān)重要的。

為了生成單詞向量,我們使用了word2vec模型的經(jīng)典方法。其基本思想是,通過觀察句子中單詞出現(xiàn)的上下文,該模型會創(chuàng)建單詞向量。在向量空間中,具有相似上下文的單詞將被置于緊密的位置。關(guān)于如何創(chuàng)建和訓(xùn)練word2vec模型的更詳細(xì)的概述,請查看我的一個好友Varma羅漢的博客。

我后來了解到TensorFlow Seq2Seq函數(shù)從零開始對單詞embeddings進行訓(xùn)練,因此我不會使用這些單詞向量,盡管它們?nèi)匀皇呛芎玫膶嵺`。

用TensorFlow創(chuàng)建Seq2Seq模型

現(xiàn)在我們創(chuàng)建了數(shù)據(jù)集并生成了我們的單詞向量,我們就可以繼續(xù)編碼Seq2Seq模型了。我在python腳本中創(chuàng)建和訓(xùn)練了模型,我試著對代碼進行評論,希望你能跟著一起。該模型的關(guān)鍵在于TensorFlow的嵌入_RNN_seq2seq()函數(shù)。你可以在這里找到文檔。

跟蹤培訓(xùn)進展

 

這個項目的一個有趣的地方是,能看到網(wǎng)絡(luò)訓(xùn)練時,響應(yīng)是如何發(fā)生變化的。訓(xùn)練回路中,我在輸入字符串上測試了網(wǎng)絡(luò),并輸出了所有非pad和非eos口令。

首先,您可以看到,響應(yīng)主要是空白,因為網(wǎng)絡(luò)重復(fù)輸出填充和eos口令。這是正常的,因為填充口令是整個數(shù)據(jù)集中最常見的口令。然后,您可以看到,網(wǎng)絡(luò)開始輸出“哈哈”的每一個輸入字符串。這在直覺上是有道理的,因為“哈哈”經(jīng)常被使用,它是對任何事情都可以接受的反應(yīng)。慢慢地,你開始看到更完整的思想和語法結(jié)構(gòu)在反應(yīng)中出現(xiàn)。現(xiàn)在,如果我們有一個經(jīng)過適當(dāng)訓(xùn)練的Seq2Seq模型,那么就可以建立facebook messenger聊天機器人。

如何建立一個簡單的fb messenger聊天機器人

這個過程并不是太難,因為我花了不到30分鐘的時間來完成所有步驟。基本的想法是,我們使用簡單的express應(yīng)用程序建立了一個服務(wù)器,在Heroku上安裝它,然后設(shè)置一個facebook頁面連接。但最終,你應(yīng)該有一個類似這樣的 Facebook 聊天應(yīng)用程序。

 

您可以向您的聊天機器人發(fā)送消息(這種初始行為只是響應(yīng)它所發(fā)送的所有內(nèi)容)。

 

部署訓(xùn)練有素的TensorFlow模型

現(xiàn)在是時候把一切都放在一起了。由于tensorflow和node之間還沒有找到一個很好的接口(不知道是否有一個官方支持的包裝器),所以我決定使用slack服務(wù)器部署我的模型,并讓聊天機器人的表達與它進行交互。您可以在這里查看slack服務(wù)器代碼以及聊天機器人的index.js文件。

測試它!

如果你想和這個機器人聊天,那就繼續(xù)點擊這個鏈接或者點擊facebook頁面,發(fā)送消息。第一次響應(yīng)可能需要一段時間,因為服務(wù)器需要啟動。

也許很難判斷機器人是否真的像我那樣說話(因為沒有很多人在網(wǎng)上和我聊天),但是它做的很好!考慮到社會媒體標(biāo)準(zhǔn),語法是可以通過的。你可以選擇一些好的結(jié)果,但大多數(shù)都是相當(dāng)荒謬的。這能幫助我在晚上睡得更好的,畢竟不能在任何時間用skynet。 

 

我認(rèn)為第一個是特別有趣的,因為“juju green”實際上似乎是一種 Juju Smith-Schuster,鋼人隊寬接收器,和 Draymond Green,前鋒金州勇士。有趣的組合。

雖然現(xiàn)在的表現(xiàn)還不太好。讓我們來考慮一下改善它的方法吧!

改進方法

從與chatbot的交互中可以看到的改進方法,有很大的改進空間。經(jīng)過幾條信息后,很快就會明白,不僅僅是進行持續(xù)的對話就行了。chabtot不能夠把思想聯(lián)系在一起,而一些反應(yīng)似乎是隨機的、不連貫的。下面是一些可以提高我們聊天機器人性能的方法。

  • 合并其他數(shù)據(jù)集,以幫助網(wǎng)絡(luò)從更大的會話語料庫中學(xué)習(xí)。這將消除聊天機器人的“個人特性”,因為它現(xiàn)在已經(jīng)被嚴(yán)格訓(xùn)練了。然而,我相信這將有助于產(chǎn)生更現(xiàn)實的對話。
  • 處理編碼器消息與解碼器消息無關(guān)的場景。例如,當(dāng)一個對話結(jié)束時,你第二天就開始一個新的對話。談話的話題可能完全無關(guān)。這可能會影響模型的訓(xùn)練。
  • 使用雙向LSTMs,注意機制和套接。
  • 優(yōu)化超參數(shù),如LSTM單元的數(shù)量、LSTM層的數(shù)量、優(yōu)化器的選擇、訓(xùn)練迭代次數(shù)等。

你如何建立像你一樣的聊天機器人,流程回顧

如果你一直在跟進,你應(yīng)該對創(chuàng)建一個聊天機器人所需要的東西已經(jīng)有了一個大致的概念。讓我們再看一遍最后的步驟。在GitHub repo中有詳細(xì)的說明。

  • 找到所有你與某人交談過的社交媒體網(wǎng)站,并下載你的數(shù)據(jù)副本。
  • 從CreateDataset中提取所有(消息、響應(yīng))對py或您自己的腳本。
  • (可選)通過Word2Vec.py為每一個在我們的對話中出現(xiàn)的單詞 生成單詞向量。
  • 在Seq2Seq.py中創(chuàng)建、訓(xùn)練和保存序列模型。
  • 創(chuàng)建Facebook聊天機器人。
  • 創(chuàng)建一個Flask服務(wù)器,在其中部署保存的Seq2Seq模型。
  • 編輯索引文件,并與Flask服務(wù)器通信。 
責(zé)任編輯:龐桂玉 來源: CSDN大數(shù)據(jù)
相關(guān)推薦

2022-08-08 09:02:54

Meta聊天機器人智能

2021-11-30 10:56:43

ChatterBot機器人人工智能

2021-05-24 15:29:24

人工智能機器人聊天

2022-08-04 07:03:41

AnswersInfobip無代碼

2022-09-30 13:55:46

Python機器人

2020-12-02 13:00:17

Recast.AI聊天機器人人工智能

2016-08-04 10:04:49

PythonFlaskFacebook Me

2023-02-26 11:53:20

2024-11-08 15:31:55

2016-10-09 13:40:44

PythonSlack聊天機器人

2021-03-30 17:51:25

機器人系統(tǒng)聊天

2023-04-27 08:00:00

2022-11-29 12:53:36

機器人物理MIT

2023-02-23 15:35:14

人工智能ChatGPT聊天機器人

2021-10-28 22:46:13

Python機器人數(shù)據(jù)

2020-02-26 17:39:18

Python機器人Word

2017-06-08 10:07:53

機器人銀行微軟

2023-07-27 14:38:58

人工智能機器人開發(fā)

2018-10-25 22:34:34

機器人人工智能系統(tǒng)

2017-03-28 12:21:21

機器人定義
點贊
收藏

51CTO技術(shù)棧公眾號