SKT-AI์์ ์ฝ 20GB์ ํ๊ตญ์ด ๋ฐ์ดํฐ๋ฅผ Pre-Training ์ํจ KoGPT2๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ก ๊ฐ์ฌ ์์ฌ๋ฅผ ์ํด์, ์ ์ ๋ ํ๊ตญ์ด ๊ฐ์ฌ ๋ฐ์ดํฐ 486MB๋ฅผ Fine-tuning ํ ๊ฒฐ๊ณผ๋ฌผ์ ๋๋ค. ์๋์์, ๋ค์ํ ํ๊ตญ์ด ๊ฐ์ฌ๋ฅผ ํ์ตํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด์ธ์๋ ๋ค์ํ ํ๋ก์ ํธ๋ฅผ ์งํํ ๊ฒ์ ๋๋ค.
python main.py --epoch=200 --data_file_path=./dataset/All_make_lyrics_dataset.txt --save_path=./checkpoint/ --load_path=./checkpoint/auto_enter/KoGPT2_checkpoint_18500.tar --batch_size=8
parser.add_argument('--epoch', type=int, default=200,
help="epoch ๋ฅผ ํตํด์ ํ์ต ๋ฒ์๋ฅผ ์กฐ์ ํฉ๋๋ค.")
parser.add_argument('--save_path', type=str, default='./checkpoint/',
help="ํ์ต ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ๋ก์
๋๋ค.")
parser.add_argument('--load_path', type=str, default='./checkpoint/Alls/KoGPT2_checkpoint_296000.tar',
help="ํ์ต๋ ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒฝ๋ก์
๋๋ค.")
parser.add_argument('--samples', type=str, default="samples/",
help="์์ฑ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๊ฒฝ๋ก์
๋๋ค.")
parser.add_argument('--data_file_path', type=str, default='dataset/lyrics_dataset.txt',
help="ํ์ตํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒฝ๋ก์
๋๋ค.")
parser.add_argument('--batch_size', type=int, default=8,
help="batch_size ๋ฅผ ์ง์ ํฉ๋๋ค.")
Colab์ ์ด์ฉํด์ Fine-tuning Code๋ฅผ ์คํํ ์ ์์ต๋๋ค.
function ClickConnect() {
// ๋ฐฑ์๋๋ฅผ ํ ๋นํ์ง ๋ชปํ์ต๋๋ค.
// GPU์ด(๊ฐ) ์๋ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ์๊ธฐ๊ฐ ์๋ ๋ฐํ์์ ์ฌ์ฉํ์๊ฒ ์ต๋๊น?
// ์ทจ์ ๋ฒํผ์ ์ฐพ์์ ํด๋ฆญ
var buttons = document.querySelectorAll("colab-dialog.yes-no-dialog paper-button#cancel");
buttons.forEach(function(btn) {
btn.click();
});
console.log("1๋ถ ๋ง๋ค ๋ค์ ์ฐ๊ฒฐ");
document.querySelector("#top-toolbar > colab-connect-button").click();
}
setInterval(ClickConnect,1000*60);
function CleanCurrentOutput(){
var btn = document.querySelector(".output-icon.clear_outputs_enabled.output-icon-selected[title$='ํ์ฌ ์คํ ์ค...'] iron-icon[command=clear-focused-or-selected-outputs]");
if(btn) {
console.log("10๋ถ ๋ง๋ค ์ถ๋ ฅ ์ง์ฐ๊ธฐ");
btn.click();
}
}
setInterval(CleanCurrentOutput,1000*60*10);
nvidia-smi.exe
python generator.py --temperature=1.0 --text_size=1000 --tmp_sent=""
python generator.py --temperature=5.0 --text_size=500 --tmp_sent=""
parser.add_argument('--temperature', type=float, default=0.7,
help="temperature ๋ฅผ ํตํด์ ๊ธ์ ์ฐฝ์์ฑ์ ์กฐ์ ํฉ๋๋ค.")
parser.add_argument('--top_p', type=float, default=0.9,
help="top_p ๋ฅผ ํตํด์ ๊ธ์ ํํ ๋ฒ์๋ฅผ ์กฐ์ ํฉ๋๋ค.")
parser.add_argument('--top_k', type=int, default=40,
help="top_k ๋ฅผ ํตํด์ ๊ธ์ ํํ ๋ฒ์๋ฅผ ์กฐ์ ํฉ๋๋ค.")
parser.add_argument('--text_size', type=int, default=250,
help="๊ฒฐ๊ณผ๋ฌผ์ ๊ธธ์ด๋ฅผ ์กฐ์ ํฉ๋๋ค.")
parser.add_argument('--loops', type=int, default=-1,
help="๊ธ์ ๋ช ๋ฒ ๋ฐ๋ณตํ ์ง ์ง์ ํฉ๋๋ค. -1์ ๋ฌดํ๋ฐ๋ณต์
๋๋ค.")
parser.add_argument('--tmp_sent', type=str, default="์ฌ๋",
help="๊ธ์ ์์ ๋ฌธ์ฅ์
๋๋ค.")
parser.add_argument('--load_path', type=str, default="./checkpoint/Alls/KoGPT2_checkpoint_296000.tar",
help="ํ์ต๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ ์ฅํ๋ ๊ฒฝ๋ก์
๋๋ค.")
Colab์ ์ด์ฉํด์ generator๋ฅผ ์คํํ ์ ์์ต๋๋ค.
ํ์ต์ ๋ฐ๋ฅธ ๋ณํ๋ฅผ ํ์ธํ๊ธฐ ์ํด์, tensorboard๋ก ์ ๊ทผํ์ฌ loss์ text๋ฅผ ํ์ธํฉ๋๋ค.
tensorboard --logdir=runs
@misc{KoGPT2-FineTuning,
author = {gyung},
title = {KoGPT2-FineTuning},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/gyunggyung/KoGPT2-FineTuning}},
}
์์ธํ ๊ฒฐ๊ณผ๋ฌผ์ samples์์ ํ์ธ ํ ์ ์์ต๋๋ค. ํ์ต์ ๋ํด์๋ ๊ด๋ จ ํฌ์คํ ์์ ํ์ธํ ์ ์์ต๋๋ค.
https://github.com/openai/gpt-2
https://github.com/nshepperd/gpt-2
https://github.com/SKT-AI/KoGPT2
https://github.com/asyml/texar-pytorch/tree/master/examples/gpt-2
https://github.com/graykode/gpt-2-Pytorch
https://gist.github.com/thomwolf/1a5a29f6962089e871b94cbd09daf317
https://github.com/shbictai/narrativeKoGPT2
https://github.com/ssut/py-hanspell
https://github.com/likejazz/korean-sentence-splitter