---
# System prepended metadata

title: Imple. log (seq2seq ver. gdc)

---

# 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)