由於實驗評估需要,我想嘗試一下在OpenNMT中使用Transformer,不過還是遇到了一些問題,這裏記錄一下:
在之前的實驗中,我注意到OpenNMT的Seq2Seq model的performance實際上比不上最簡單的PyTorch的Seq2Seq示例代碼。覺得很疑惑,稍微搜索後發現,其他網友也提出了類似的問題:
https://github.com/OpenNMT/OpenNMT-py/issues/139
不過似乎這個問題並沒有引起足夠的重視,OpenNMT的開發者回覆說,我們已經實現了SOTA的Transformer模型,所以不需要仔細處理這個issue了(這個態度也是呵呵了,你們可是哈佛的組啊,不應該更嚴謹認真一點麼?)
所以想試試Transformer,按照這裏的介紹:
http://opennmt.net/OpenNMT-py/FAQ.html
Transformer對超參很敏感,他們通過以下參數復現了論文的結果:
python train.py -data /tmp/de2/data -save_model /tmp/extra \
-layers 6 -rnn_size 512 -word_vec_size 512 -transformer_ff 2048 -heads 8 \
-encoder_type transformer -decoder_type transformer -position_encoding \
-train_steps 200000 -max_generator_batches 2 -dropout 0.1 \
-batch_size 4096 -batch_type tokens -normalization tokens -accum_count 2 \
-optim adam -adam_beta2 0.998 -decay_method noam -warmup_steps 8000 -learning_rate 2 \
-max_grad_norm 0 -param_init 0 -param_init_glorot \
-label_smoothing 0.1 -valid_steps 10000 -save_checkpoint_steps 10000 \
-world_size 4 -gpu_ranks 0 1 2 3
由於我目前測試的機子上沒有GPU,所以嘗試一下去掉最後的參數,結果發現去掉之後,程序很快停止,也沒有任何報錯或者輸出。呵呵,難道不應該考慮沒有GPU的情況嗎?看來開源項目要做到真正人性,普適,要細心測試和開發的細節還有很多啊。這篇日誌就簡單吐槽一下。