ICLR2018からのGoogleのQanet(以前は速い読解(FRC))のTensorflow実装。 (注:これは、論文の著者からの公式の実装ではありません)
Qanetの実装に関するブログ投稿を書きました。詳細については、こちらをご覧ください!
トレーニングと前処理パイプラインは、hkust-knocompによってr-netから採用されています。デモモードが機能しています。トレーニング後、 python config.py --mode demoを使用して、インタラクティブなデモサーバーを実行します。
記憶の問題により、元の論文のように8ヘッドのマルチヘッドの注意とは対照的に、単一のヘッドドット製品の注意が使用されています。また、紙で使用されているP100と比較して、GTX1080の使用により、隠されたサイズは128から96に減少します。 (8GBのGPUメモリは不十分です。12GBメモリGPUがある場合は、トレーニングの結果を共有してください。)
現在、最良のモデルは60kステップ(6〜8時間)でEM/F1 = 70.8/80.1に達しています。詳細な結果を以下に示します。

このタスクに使用されるデータセットは、Stanfordの質問データセットです。単語に使用される840bのトークンを備えた一般的なクロールから得られた前処理された手袋の埋め込み。
データをダウンロードして前処理するには、実行します
# download SQuAD and Glove
sh download.sh
# preprocess the data
python config.py --mode preprohkust-knowcompによるr-netと同様に、ハイパーパラメーターはconfig.pyに保存されます。デバッグ/トレーニング/テスト/デモに、実行します
python config.py --mode debug/train/test/demo公式コードでモデルを評価するには、実行します
python evaluate-v1.1.py ~ /data/squad/dev-v1.1.json train/{model_name}/answer/answer.jsonテンソルボードログファイルのデフォルトディレクトリはtrain/{model_name}/eventです
Docker画像を構築するには(nvidia-dockerが必要)、実行します
nvidia-docker build -t tensorflow/qanet .
ボリュームマウントパスとポートマッピングを設定します(デモモード用)
export QANETPATH={/path/to/cloned/QANet}
export CONTAINERWORKDIR=/home/QANet
export HOSTPORT=8080
export CONTAINERPORT=8080
コンテナにバッシュします
nvidia-docker run -v $QANETPATH:$CONTAINERWORKDIR -p $HOSTPORT:$CONTAINERPORT -it --rm tensorflow/qanet bash
コンテナ内に入ったら、分隊とグローブのデータセットをダウンロードすることから、上記のコマンドに従ってください。
事前に保護されたモデルの重みは一時的に利用できません。
このリポジトリと元の論文の収集結果は次のとおりです。
| モデル | トレーニング手順 | サイズ | 注意ヘッド | データサイズ(8月) | em | F1 |
|---|---|---|---|---|---|---|
| 私のモデル | 35,000 | 96 | 1 | 87k(8月なし) | 69.0 | 78.6 |
| 私のモデル | 60,000 | 96 | 1 | 87k(8月なし) | 70.4 | 79.6 |
| 私のモデル(@jasonbwによって報告) | 60,000 | 128 | 1 | 87k(8月なし) | 70.7 | 79.8 |
| 私のモデル(@chesterkuoによって報告) | 60,000 | 128 | 8 | 87k(8月なし) | 70.8 | 80.1 |
| オリジナルペーパー | 35,000 | 128 | 8 | 87k(8月なし) | Na | 77.0 |
| オリジナルペーパー | 150,000 | 128 | 8 | 87k(8月なし) | 73.6 | 82.7 |
| オリジナルペーパー | 340,000 | 128 | 8 | 240K(8月) | 75.1 | 83.8 |
視覚化のためにテンソルボードを実行します。
$ tensorboard --logdir=./