このリポジトリは、論文「コンテキストを意識した局所的注意によるニューラル応答生成の強化」の実装をホストします。
THRED は、状況に応じたトピックを意識した応答を生成することを目的としたマルチターン応答生成システムです。コードベースは Tensorflow NMT リポジトリから発展したものです。
このフレームワークを使用して対話エージェントを作成する手順:
conda env create -f thred_env.yml
を使用して依存関係をインストールします ( pip
使用するには、「依存関係」を参照)MODEL_DIR
モデルが保存されるディレクトリであることに注意してください。少なくとも 2 つの GPU でトレーニングすることをお勧めします。そうでない場合は、データ サイズ (トレーニング ファイルから会話を省略することによって) とモデル サイズ (構成ファイルを変更することによって) を減らすことができます。 python -m thred --mode train --config conf/thred_medium.yml --model_dir
--train_data --dev_data --test_data
python -m thred --mode interactive --model_dir
1パッケージは Reddit データの解析とクリーニングにのみ必要です。 2コマンドライン対話モードで対話モデルをテストする場合にのみ使用されます。
pip
使用して依存関係をインストールするには、 pip install -r requirements
実行します。 Anaconda の場合は、 conda env create -f thred_env.yml
を実行します (推奨)。依存関係の処理が完了したら、 pip install -e .
thred パッケージをインストールします。
Reddit Conversation Corpus (RCC) と呼ばれる Reddit データセットは、選ばれた 95 のサブレディット (ここにリストされています) から収集されています。私たちは、2016 年 11 月から 2018 年 8 月までの 20 か月間 Reddit を処理しました (2017 年 6 月と 2017 年 7 月を除く。この 2 か月間を 2016 年 10 月のデータと合わせて LDA モデルのトレーニングに利用しました)。 Reddit データセットの構築方法(生の Reddit ファイルの前処理やクリーニングなど)の詳細については、こちらをご覧ください。次の表は、RCC 情報をまとめたものです。
コーパス | #電車 | #dev | #テスト | ダウンロード | 話題の単語と一緒にダウンロード |
---|---|---|---|---|---|
1 ラインあたり 3 ターン | 920万 | 508K | 406K | ダウンロード(773MB) | ダウンロード(2.5GB) |
1 ラインあたり 4 ターン | 4M | 223K | 178K | ダウンロード(442MB) | ダウンロード(1.2GB) |
1 ラインあたり 5 ターン | 1.8M | 100K | 80K | ダウンロード(242MB) | ダウンロード(594MB) |
データ ファイルでは、各行が 1 つの会話に対応し、発話が TAB で区切られています。トピックワードは、最後の発話の後に同じく TAB で区切られて表示されます。
3 ターン、4 ターン、5 ターン ファイルには、1 行あたりの発話数は異なりますが、同様のコンテンツが含まれていることに注意してください。それらはすべて同じソースから抽出されています。データに誤りや不適切な発言が見つかった場合は、ここで懸念事項を報告してください。
モデル構成ファイル (つまり、conf 内の YAML ファイル) では、埋め込みタイプはglove840B
、 fastText
、 word2vec
、およびhub_word2vec
のいずれかになります。事前トレーニングされた埋め込みベクトルを処理するために、Pymagnitude と Tensorflow-Hub を活用します。応答生成モデルのトレーニング中にベクトルを学習するために、 random300
(300 は埋め込みベクトルの次元を指し、任意の値に置き換えることができます) を使用することもできることに注意してください。埋め込みモデルに関する設定は、word_embeddings.yml で提供されます。
トレーニング構成は、Tensorflow NMT と同様の YAML ファイルで定義する必要があります。 THRED およびその他のベースラインのサンプル構成がここに提供されます。
実装されたモデルは、Seq2Seq、HRED、Topic Aware-Seq2Seq、および THRED です。
パラメータのほとんどは異なるモデル間で共通ですが、一部のモデルには追加のパラメータがある場合があることに注意してください(たとえば、トピックモデルにはtopic_words_per_utterance
とboost_topic_gen_prob
パラメータがあります)。
モデルをトレーニングするには、次のコマンドを実行します。
python main.py --mode train --config < YAML_FILE >
--train_data < TRAIN_DATA > --dev_data < DEV_DATA > --test_data < TEST_DATA >
--model_dir < MODEL_DIR >
にはボキャブラリーファイルと Tensorflow モデルファイルが格納されます。トレーニングは以下を実行することで再開できます。
python main.py --mode train --model_dir < MODEL_DIR >
次のコマンドを使用すると、テスト データセットに対してモデルをテストできます。
python main.py --mode test --model_dir < MODEL_DIR > --test_data < TEST_DATA >
テスト中にテスト パラメータをオーバーライドすることができます。これらのパラメータは、ビーム幅--beam_width
、長さペナルティ重み--length_penalty_weight
、およびサンプリング温度--sampling_temperature
です。
シンプルなコマンド ライン インターフェイスが実装されており、学習したモデルと対話できるようになります (テスト モードと同様に、テスト パラメーターもオーバーライドできます)。
python main.py --mode interactive --model_dir < MODEL_DIR >
インタラクティブ モードでは、推定されたトピック単語をモデルにフィードするために、事前トレーニングされた LDA モデルが必要です。この目的のために収集された Reddit コーパス上で Gensim を使用して LDA モデルをトレーニングしました。ここからダウンロードできます。ダウンロードしたファイルは圧縮を解除し、 --lda_model_dir
経由でプログラムに渡す必要があります。
研究に私たちの成果を使用した場合は、次の論文を引用してください。
@article{dziri2018augmenting,
title={Augmenting Neural Response Generation with Context-Aware Topical Attention},
author={Dziri, Nouha and Kamalloo, Ehsan and Mathewson, Kory W and Zaiane, Osmar R},
journal={arXiv preprint arXiv:1811.01063},
year={2018}
}