# GPT-2 (RL fine tuning) ## Dowload File (training_dataset & fine tune過一次的GPT2) - 下載網址: [Google雲端](https://drive.google.com/drive/folders/1cFVYS0MRIWRFwLH6IDxcc5_Na2d2mhlR?usp=sharing) ## 1. Dataset - **原始的資料架構。** ![](https://i.imgur.com/qmseSnd.png) - **整理成第一次fine tune GPT-2的架構。** ![](https://i.imgur.com/e5XFXRo.png) * <font color="#3338FF">所以模型的input是"post[emotional_label_of_reply 中文意義]"。</font> ## 2. 參考([CHAI](https://github.com/siddharthverma314/chai-naacl-2022))的流程: 1. 使用已經fine tune過一次的GPT-2生成n個候選句子(n是可變的)。 2. 使用[這篇](https://github.com/natashamjaques/neural_chat/tree/master/BatchRL)的獎勵函數對上一步所生成的候選句子進行打分。(所需要用到的獎勵函數會在下面附上)。 3. 利用Soft Q sampling的方式(和CHAI的sample方式一樣)對打完分數的候選句子進行sample。 - <font color="#3338FF">模型要能夠分別輸出 "sample前所有的候選句子及其相應的分數" 以及 "sample後,被選中的那個結果"</font> 4. 利用[這篇](https://github.com/yzpang/gold-off-policy-text-gen-iclr21)如下的objective function對GPT-2進行update。 ![](https://i.imgur.com/L7tGmGL.jpg) * objective function裡的Q的R是用下面的獎勵函數算出來的。 ## 3. 所需的獎勵函數(參考[[1]](https://github.com/natashamjaques/neural_chat/tree/master/BatchRL)[[2]](https://arxiv.org/pdf/1606.01541.pdf)) - 有以下7個,希望可以視情況自行選擇要用哪幾個獎勵函數的組合。ex: 要7個全用,還是只要其中部分幾個的組合,有點像ablation study的感覺(?) - 獎勵函數的1~4項是在[這裡](https://github.com/natashamjaques/neural_chat/blob/master/BatchRL/rewards.py),括號()裡的數字代表在第幾行。 1. (85) reward_answer_length_words 2. (229) reward_deepmoji_coherence 3. (377) reward_question 4. (398) reward_traditional_embedding_metrics 5. reward_toxicity - 類似像443行的reward_compliments的作法,會有一個字典檢測response是否含"敏感字眼"。<font color="#3338FF">此項為負獎勵(其餘為正獎勵)</font> 6. reward_ease_of_answering (額外的,請參考[[2]](https://arxiv.org/pdf/1606.01541.pdf)中,如下的式子) $$ \begin{gathered} r_{6}=-\frac{1}{N_{\mathbb{S}}} \sum_{s \in \mathbb{S}} \frac{1}{N_{s}} \log p_{\text {seq2seq }}(s \mid a) \end{gathered} $$ * $$\mathbb{S} \text{: a list of non-sense responses.}$$ * non-sense response,如: 我不知道、都可以、嗯嗯、還好...等。 7. reward_semantic_coherence (額外的,請參考[[2]](https://arxiv.org/pdf/1606.01541.pdf)中,如下的式子) $$ \begin{gathered} r_{7}=\frac{1}{N_{a}} \log p_{\text {seq2seq}}\left(a \mid q_{i}, p_{i}\right)+\frac{1}{N_{q_{i}}} \log p_{\mathrm{seq2seq} }^{\text {backward }}\left(q_{i} \mid a\right) \end{gathered} $$ - Total Reward with weighted sum: $$ \begin{gathered} R =\lambda_{1} r_{1}+\lambda_{2} r_{2}+\lambda_{3} r_{3}+\lambda_{4} r_{4}+\lambda_{5} r_{5}+\lambda_{6} r_{6}+\lambda_{7} r_{7} \end{gathered} $$ * 希望最後的模型,r的權重(lambda)可以依據r的重要程度而不同。 ## 4. 問題 1. 各個r算出來的scale可能不同,所以要做normalize? 2. 如何得到最好的 "各個r其所對應的權重(lambda)? 權重要怎麼train或決定? ## 5. 檢測(最後的模型) 1. 跑BLEU score 2. 跑Perplexity (PPL) 3. 跑Accuracy 謝謝您!!