コード リポジトリ TC-Bot と論文の End-to-End Task-Completion Neural Dialogue Systems に基づいています。このリポジトリは TC-Bot の簡易バージョンであり、直接比較することはできませんが、同様のレベルの精度で実行されます。
これは、単純なユーザー シミュレーターを使用して、深層強化学習を使用して目標指向のチャットボットとして単純な DQN エージェントをトレーニングする方法を示しています。このコードは、MiuLab による TC-Bot の簡易バージョンです。主な違いは、このコードには NLG または NLU コンポーネントが含まれておらず、ダイアログ マネージャーをトレーニングするだけであるという点です。 NL コンポーネントは、GO チャットボットが DRL でどのようにトレーニングされるかを理解するために必要ではないため、実装されていません。
以下は TC-Bot の論文からの図で、LU コンポーネントと NLG コンポーネント以外はこのプロジェクトで使用される対話の流れと似ています。
NL の削除に加えて、成功条件、DQN エージェント オプティマイザー、およびその他のいくつかの小さな変更が変更されました。したがって、TC-Bot とこのリポジトリの間で精度を直接比較するべきではありません。
データベースは映画チケットのもので、TC-Bot で使用されているものと同じです。データの pickle バージョンとテキスト バージョンの両方がデータ ディレクトリに表示されます。
このコードを詳細に説明して実行する 5 部構成のチュートリアル シリーズは、ここのメディアにあります。
python train.py
を使用してエージェントを最初からトレーニングできます。
constants.json では、「save_weights_file_path」と「load_weights_file_path」(どちらも相対パス)を含むハイパーパラメータを変更して、それぞれ重みを保存およびロードできます。たとえば、weights フォルダー内の事前トレーニングされた重みを使用するには、「load_weights_file_path」の値を「weights/model.h5」に設定します。ターゲット (tar) と動作 (beh) の両方の keras モデルの重みは、現在の成功率が新たな最高値になるたびに保存されます。
python test.py
を使用してエージェントをテストすることもできます。ただし、constants.json の「load_weights_file_path」を動作とターゲットの重みの両方を含む相対パスに設定して、重みをロードするようにしてください。
DQN (true) または Double DQN (false) を意味するエージェントの下の「vanilla」を除いて、すべての定数は一目瞭然です。デフォルトはバニラ DQN です。
注: トレーニングまたはテストで unpickle エラーが発生した場合は、 python pickle_converter.py
実行すると修正されるはずです。
constants.json の run の下にある "usersim" を false に設定することで、(ユーザー sim を使用する代わりに) ユーザーとして独自のアクションを入力してエージェントをテストできます。コンソールでエピソード/会話の各ステップごとにアクションと成功インジケーターを入力します。アクション入力の形式は、インテント/通知スロット/リクエスト スロットです。
アクション入力の例:
さらに、コンソールは、エージェントがまだ成功したかどうかを示すインジケーターを要求します (エピソードの最初のアクション入力後を除く)。許可される入力は、損失の場合は -1、結果がまだない場合は 0、成功の場合は 1 です。
constants.json のハイパーパラメータを使用しました。
そのエピソードまでの期間/トレイン頻度 (100 エピソードごと) の最大成功率別のエピソード (40000 のうち 2000 ごと) のテーブル: