基於程式碼庫 TC-Bot 和論文端到端任務完成神經對話系統。該儲存庫是 TC-Bot 的簡化版本,儘管不能直接比較,但它的準確度水平相似。
這展示瞭如何使用簡單的使用者模擬器將具有深度強化學習的簡單 DQN 代理訓練為目標導向的聊天機器人。該程式碼是 MiuLab 的 TC-Bot 的簡化版本,主要區別在於該程式碼不包含 NLG 或 NLU 元件,而僅訓練對話管理器。 NL 元件不需要了解 GO 聊天機器人如何使用 DRL 進行訓練,因此未實現。
以下是 TC-Bot 論文中的圖表,除了 LU 和 NLG 元件之外,與該專案中使用的對話流程類似:
除了刪除 NL 之外,還對成功條件、DQN 代理優化器和其他一些細微更改進行了更改。因此,不應直接比較 TC-Bot 和此儲存庫之間的準確性。
該資料庫是電影票的資料庫,與 TC-Bot 中使用的資料庫相同。資料的 pickle 和文字版本都可以在資料目錄中看到。
可以在此處的 Medium 上找到詳細描述和詳細介紹此程式碼的 5 部分教學系列!
您可以使用python train.py
從頭開始訓練代理程式。
在constants.json中,您可以變更超參數,包括「save_weights_file_path」和「load_weights_file_path」(都是相對路徑)以分別儲存和載入權重。例如,若要使用權重資料夾中的預訓練權重,請將「load_weights_file_path」的值設為「weights/model.h5」。每次目前成功率達到新高時,都會保存目標 (tar) 和行為 (beh) keras 模型的權重。
您也可以使用python test.py
測試代理程式。但請確保透過將constants.json中的「load_weights_file_path」設定為具有行為和目標權重的相對路徑來載入權重。
除了代理下的「vanilla」之外,所有常數都非常不言自明,這意味著 DQN(真)或 Double DQN(假)。預設為普通 DQN。
注意:如果在訓練或測試中出現 unpickling 錯誤,請執行python pickle_converter.py
,這應該可以修復它
您可以透過將 Constants.json 中 run 下的「usersim」設為 false,以使用者身分輸入您自己的操作(而不是使用使用者 sim)來測試代理程式。您可以在控制台中輸入一個事件/對話的每個步驟的操作和成功指示符。操作輸入的格式為:意圖/通知槽/請求槽。
操作輸入範例:
此外,控制台將詢問代理是否成功的指示符(除了在劇集的初始操作輸入之後)。允許的輸入為 -1 表示失敗,0 表示尚未結果,1 表示成功。
使用constants.json 中的超參數。
劇集表(每 2000 集,共 40000 集),以週期/列車頻率(每 100 集)的最大成功率計算,直至該集: