訪客須知:
python3 manage.py runserver
。如果您不熟悉以這種方式執行 Flask,請參閱 Flask-Script 的文檔。如有不便,請諒解!截至2017年5月9日,項目主要包裝如下:
python3 manage.py runserver
從使用者/開發人員的角度來看,該專案提供了一個更清晰的介面,用於修補序列到序列模型。理想的結果是聊天機器人 API 具有 Keras 的可讀性,但具有更接近 TensorFlow 的靈活性。
在「客戶端」端,使用模型參數並運行它們就像製作配置 (yaml) 檔案、打開 python 解釋器並發出一些命令一樣簡單。例如,以下程式碼片段是使用您的配置開始對康乃爾資料集進行訓練(當然是在下載之後)所需的全部內容:
import data
import chatbot
from utils import io_utils
# Load config dictionary with the flexible parse_config() function,
# which can handle various inputs for building your config dictionary.
config = io_utils . parse_config ( config_path = 'path_to/my_config.yml' )
dataset = getattr ( data , config [ 'dataset' ])( config [ 'dataset_params' ])
bot = getattr ( chatbot , config [ 'model' ])( dataset , config )
bot . train ()
這只是與專案互動的一種方式。例如,使用者還可以透過命令列參數傳入參數,這些參數也會與他們指定的任何設定檔合併(如果發生衝突,則優先考慮命令列參數)。您還可以傳遞之前保存的聊天機器人的位置以繼續訓練它或開始對話。有關更多詳細信息,請參閱main.py
Ubuntu對話語料庫:預處理方法可以在notebooks資料夾中的ubuntu_reformat.ipynb中看到。該資料集的預期用途是多輪對話的回應排名,但我採用了相當簡單的方法,提取話語對並將其解釋為單句到單響應,這與編碼器和解碼器的輸入相對應,分別在模型中。
康乃爾電影對話:我從康乃爾語料庫的這個預處理版本開始,並進行了一些細微的修改以減少噪音。
Reddit 評論:大約。 17 億則 Reddit 評論。目前正在對這個龐大的資料集進行預處理並將其縮減為適合訓練對話模型的格式。完成後將發布處理後的資料集下載連結!
DynamicBot:使用 model_components.py 中的自訂類別提供的更物件導向的方法。結果是更快的線上批量串聯嵌入和更自然的聊天方法。它利用了 TensorFlow 1.0 版本中的(非常棒的)新的 python API,特別是dynamic_rnn。它還遵循良好的變數範圍實踐和我在文件和原始程式碼中觀察到的常見張量流約定,這具有很好的副作用,例如 TensorBoard 中清晰的圖形視覺化。
SimpleBot:基於下面更複雜的「ChatBot」模型的簡化分桶模型。儘管它在自訂儲存桶分割區方面不太靈活,並且在完整詞彙表上使用稀疏 softmax 而不是取樣,但它的實作要透明得多。與 ChatBot 不同,它很少使用 tf.contrib,並且或多或少是從「從頭開始」實現的,即主要依賴基本張量流方法。如果您是 TensorFlow 新手,那麼通讀其實現以了解張量流編程中的常見約定可能會很有用,因為這是我閱讀 ChatBot 中所有方法的源代碼並編寫自己的更緊湊的結果解釋。
ChatBot:本 TensorFlow 教學中所述的模型的擴展版本。架構特徵:分桶輸入,解碼器使用注意機制(請參閱我的筆記第69 頁,輸入嵌入了tf.contrib 庫中提供的簡單函數。還採用了採樣的softmax 損失函數以允許更大的詞彙量(第69 頁)註 67):由於儲存桶模型的性質,與其他模型相比,創建模型需要更長的時間,主要瓶頸似乎是最大儲存桶的大小以及如何基於儲存桶創建梯度操作。
此網頁目錄展示了一種在 Flask 應用程式中部署 TensorFlow 模型的簡單且節省空間的方法。模型被「凍結」-聊天不需要的所有元件(例如最佳化器)都被刪除,所有剩餘的變數都被轉換為常數。當使用者點擊模型名稱時,就會建立該模型的 REST API。當使用者在表單中輸入句子時,會發出 (AJAX) POST 請求,其中回應是聊天機器人的回應句。有關 REST API 的更多詳細信息,請參閱views.py。
Flask應用程式遵循最佳實踐,例如使用藍圖來實例化應用程式、根據應用程式環境(例如開發或生產)使用不同的資料庫等等。
在這裡,我將更詳細地介紹如何建立模型以及如何將它們視覺化。本部分正在進行中,尚未完成。
它不是使用feed_dict
參數將資料批次輸入到模型中,而是在圖結構本身中更快地編碼輸入資訊和預處理技術。這意味著我們在訓練時不會向模型提供任何內容。相反,該模型使用一系列佇列來存取 google 的 protobuf 格式的文件中的數據,將文件解碼為張量序列,動態批次和填充序列,然後將這些批次提供給嵌入解碼器。全部在圖結構內。此外,該資料處理是由多個執行緒並行協調的。我們可以使用張量板(以及變數範圍的最佳實踐)來在高層視覺化這種類型的管道。
(更多描述即將推出!)
對這些模型進行了大量研究,我在深度學習筆記的最後一部分中記錄了我對最「重要」論文的筆記。這些筆記還包括我如何嘗試將論文中的材料翻譯成 TensorFlow 代碼。隨著更多論文中的想法融入這個專案中,我將對其進行更新。
文件:
線上資源: