このリポジトリには、生成会話エージェント (GCA) の新しい敵対的トレーニング方法が含まれています。
この新しいトレーニング方法の詳細については、Oswaldo Ludwig 著「End-to-end Adversarial Learning for Generative Conversational Agents」、arXiv:1711.10122 cs.CL、2017 年 11 月の論文を参照してください。このリポジトリのコードについては、この論文を引用してください。
私たちの方法では、GCA が、対話を人間が生成したものまたは機械が生成したものとして分類する識別子をだますことを目的とした生成器であると想定しています。私たちのアプローチでは、ディスクリミネーターはトークンレベルの分類を実行します。つまり、現在のトークンが人間によって生成されたか機械によって生成されたかを示します。そうするために、弁別器はコンテキスト発話 (対話履歴) と現在のトークンまでの不完全な回答も入力として受け取ります。この新しいアプローチにより、バックプロパゲーションによるエンドツーエンドのトレーニングが可能になります。自己対話プロセスにより、敵対的トレーニング用に、より多様性のある一連の生成データを生成できます。このアプローチにより、トレーニング データに関連しない質問に対するパフォーマンスが向上します。
ここで利用できるトレーニング済みモデルは、オンラインの英語コースの対話から収集されたデータセットを使用しました (ここから利用できます)。
私たちの GCA モデルは、次のフローチャートで説明できます。
一方、次の疑似コードは GCA アルゴリズムを説明しています。
新しいエンドツーエンドの敵対的トレーニングは、ジェネレーターとディスクリミネーターによって構成される次の Keras モデル (ファイル train_bot_GAN.py に実装) によって説明できます。黄色のブロックは GCA (ジェネレーター) に属し、緑色のブロックはディスクリミネーターに属します。白いブロックはジェネレーターとディスクリミネーターの間で共有されます。
一方、次の疑似コードは新しいアルゴリズムを説明しています (変数の定義については論文を参照してください)。
事前トレーニングされたモデルとチャットするには:
事前トレーニングされた識別子を使用してダイアログ行を評価するには:
新しい敵対的手法を使用してエンドツーエンドでトレーニングするには:
敵対的トレーニングを最初から開始したい場合は、重みファイル my_model_weights.h5 (新しい敵対的メソッドで事前トレーニング済み) を my_model_weights20.h5 (教師の強制によって事前トレーニング済み) と同じにして、train_script.py を実行します。