# Imple. log (seq2seq ver. gdc) ## 行ったこと - 基本的に`GPT2Model`と書いてあるものを、`BartModel`に書き換えた。 - 変数名・ファイル名で`gpt2`用になっているものを、`bart`用、もしくはより一般的っぽい名前に変更 (例: `gpt2_~`を`lm_~`にするなど。) - configの`gpt2`の名前を使っているパラメタの名前変更 - 要するに、`.json`で与える、`config`の仕様の決定 (source input とかに関しては仮決定)。exampleの作成。 - sample_sizeの変数にバッチサイズをそのまま代入するよう変更 - **要注意**:データセットのサイズに学習の更新頻度を合わせてしまっているので、だいぶ学習の進み方が変わる可能性がある。 - パラメタのdetach/freeze - ソースコードを読み間違えていた。pretraied modelはdetachしていない。 - seq2seqのbi-directional layerのsampleごとのfinetuneをやっている余裕はない。 - encoderはパラメタ更新しない。decoderも一部レイヤーは更新しない。 - ==**どの程度layerをdetachしてやると、それなりの結果がでるか。** 先行研究でそういうものがあればほしい。== - とりあえず、decoder最終層以外をdetach - 前から思っていたが、なんでEOSから生成を始める謎仕様になっているんだ? # ToDo ==マーカで引かれた部分に関しては、直近現時点で行ってもらっても、星野と衝突しません== - ==モデルの入出力に不整合が起きていないかの慎重な確認== - 星野は入出力に関して**ほとんど**確認せずに実装しています。 - transformersとpytorchのsource/tutorialを参照して、入出力について今一度ちゃんと確認する必要があると思います。 - 変数: model_input の変更 - queryとresponseをcatした変数、model_inputをBARTにそのままinputしているのは、おそらく不適切。 - 試運転をどうやるか - 使うfinetuned 要約・翻訳モデルの策定 - 星野的にはとりあえずCNN/DMで入出力がちゃんと機能するかだけ見るかも。 - 試運転時は、とりあえず入出力がヤバくないかだけをみれば良いので、pretrained modelのパラメタはdetachしてしまっていよいと思う。 ## future ToDo - コントロールするときに、ソースの内容 (entity) の内容を確認して、バッチを作る、discreminatorを作る等々の機能を盛り込む。 - 論文化するなら、sample結果に対してのdiscreminatorをどの程度工夫するかは鍵になるはず。それを組み込みやすくしておきたい。 - 元のseq2seqのデータセットはreferenceが存在するため、そいつを使ってtest時に評価するスクリプトとかを書きたい。 ## Apendix ### 依存関係 - Proposal Model に関しては `run.py` -> `pointwise-gdc.py` `run-distributional.py` -> `gdc.py` - `base_trainer.py`が全ての`trainer`系の継承元 ### freeze/detachの違い - detachは計算グラフの切断 - back propagateしない - freezeは勾配の更新をしない - layer を `requirs_grad = False` で指定すると、freezeと同義なはず - freezeだと、back propagateはしているはず(?) [Pytorchの「.detach()」と「with no_grad():」と「.requirs_grad = False」の違い (qiita)](https://qiita.com/tttamaki/items/28f13a1507eb63387901)