KoAI; Korean AI Project. ํ๊ตญ์ด๋ฅผ ์ํ ์ธ๊ณต์ง๋ฅ ํ๋ก์ ํธ
$ pip install koai
FineTuning
ํ๊น ํ์ด์ค ํ๋ธ(huggingface-hub) ๋๋ ํ๊น ํ์ด์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๋ก๋ ๊ฐ๋ฅํ ๋ก์ปฌ ํ์ผ์, klue ๋ฒค์น ๋งํฌ์ ๋ํ์ฌ ํ ์คํธํ๋ ์์์ ๋๋ค.
from koai import finetune
# finetuning and evaluating on klue-sts dataset
finetune(
task_name="klue-sts",
model_name_or_path="klue/bert-base",
do_train=True,
do_eval=True,
num_train_epochs=5,
evaluation_strategy="epoch",
save_strategy="no",
logging_strategy="epoch"
)
# finetuning and evaluating on all klue dataset (except 'wos')
# if "finetune_model_across_the_tasks" is True, the model train all the tasks in KLUE
# but it is false(default is false), finetuning the language model individually.
finetune(
"klue",
"klue/bert-base",
do_train=True,
do_eval=True,
num_train_epochs=5,
evaluation_strategy="epoch",
save_strategy="no",
logging_strategy="epoch"
)
-
task_name: str, ๊ณผ์ ์ ์ด๋ฆ์ ์ค์ ํฉ๋๋ค(klue ์ ์ฒด๋ฅผ ํ ์คํธ ํ๋ ค๋ฉด, "klue". ํน์ ํ ์คํฌ๋ฅผ ์ ํํ๋ ค๋ฉด "klue-mrc"์ ๊ฐ์ด ์ ๋ ฅํด์ฃผ์ธ์. "mrc"์ ๊ฐ์ ํ์ ํ ์คํฌ ์ด๋ฆ์ ํ๊น ํ์ด์ค ํ๋ธ๋ฅผ ๋ฐ๋ฆ ๋๋ค.)
-
model_name_or_path: str, ๋ชจ๋ธ์ ํ๊น ํ์ด์ค ํ๋ธ ์ด๋ฆ ๋๋ ๋ก์ปฌ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํด ์ฃผ์ธ์.
-
remove_columns: bool = True, ๋ฐ์ดํฐ ๋ก๋ ํ ๋ชจ๋ธ ์ ๋ ฅ์ ์ํ ํ๋ก์ธ์ค ์๋ฃ ํ ๊ธฐ์กด ์ปฌ๋ผ ์ด๋ฆ์ ์ญ์ ํ ์ง ์ฌ๋ถ๋ฅผ ์ค์ ํฉ๋๋ค.
-
custom_task_infolist: Optional[List[TaskInfo]] = None, ์ง์ TaskInfo ํด๋์ค๋ฅผ ์ค์ ํ๊ณ ์ด๋ฅผ ๋ฆฌ์คํธ ์์ ๋ฃ์ด ๋ฒค์น๋งํฌ ํ ์คํธ๋ฅผ ํ ์ ์์ต๋๋ค.
-
max_source_length: int = 512, ์ ๋ ฅ ํ ์คํธ์ ์ต๋ ๊ธธ์ด๋ฅผ ์ค์ ํฉ๋๋ค.
-
max_target_length: Optional[int] = None, (๋ง์ฝ ์๋ค๋ฉด) ์ถ๋ ฅ ํ ์คํธ์ ์ต๋ ๊ธธ์ด๋ฅผ ์ค์ ํฉ๋๋ค.
-
padding: str = "longest", padding์ ๋ฐฉ๋ฒ์ ์ค์ ํฉ๋๋ค(
transformers.PretrainedTokenizerBase.__call__
์ 'padding'์ธ์์ ๋์ผํฉ๋๋ค). -
save_model: bool = False, ๋ชจ๋ธ์ ๋ด๋ถ์ ์ ์ฅํ ์ง ์ฌ๋ถ๋ฅผ ์ค์ ํฉ๋๋ค.
-
return_models: bool = False, ํจ์๊ฐ ํ์ต๋ ๋ชจ๋ธ์ ๋ฐํํ ์ง ์ฌ๋ถ๋ฅผ ์ค์ ํฉ๋๋ค.
-
output_dir: str = "runs/", (save_model=True์ผ ๋), ์ ์ฅํ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค.
-
finetune_model_across_the_tasks: bool = False, ๋ชจ๋ธ์ ์ ๋ ฅ ๋ฐ์ ์ฌ๋ฌ ๋ฒค์น๋งํฌ์ ๋ํด์ ์กฐ์ ํ์ต ์, ์ด๊ธฐํ ํ ์ง๋ฅผ ์ค์ ํฉ๋๋ค(True๋ฉด ํ๋์ ๋ชจ๋ธ์ด ์ฌ๋ฌ ๋ฒค์น๋งํฌ์ ๋ํ์ฌ ํ์ตํฉ๋๋ค).
-
add_sp_tokens_to_unused:bool, ๊ณผ์ ์์ special_token ์ unused ํ ํฐ๊ณผ ๋์นํ ์ง๋ฅผ ์ค์ ํฉ๋๋ค.
(๊ทธ ๋ฐ์ ํ๊น ํ์ด์ค์ transformers.TrainingArguments ์ ๋ชจ๋ ์ธ์๋ฅผ ์ ๋ ฅํ ์ ์์ต๋๋ค.)
Custom Task
์ปค์คํ ํ ์คํฌ๋ฅผ ์ ์ํ๊ณ ์ด๋ฅผ ์กฐ์ ํ์ต ํ ์ ์์ต๋๋ค. ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
from koai import finetune
from koai.benchmarks.finetune_utils import TaskInfo
custom_task = TaskInfo(
task="custom-task",
task_type='sequence-classification',
text_column = "text",
label_column = "label",
num_labels=3,
eval_split = "test",
custom_train_dataset = dataset['train'],
custom_eval_dataset = dataset['test'],
metric_name='f1'
)
models = finetune(
"custom-task",
"klue/roberta-base",
custom_task_infolist=[custom_task],
do_train=True,
do_eval=True,
num_train_epochs=10,
per_device_train_batch_size=16,
per_device_eval_batch_size=8,
evaluation_strategy="epoch",
logging_strategy="epoch",
save_strategy="no",
padding=True,
return_models=True,
output_dir="runs"
)
Available Tasks
- GLUE(except "glue-mnli_matched","glue-mnli_mismatched", and "glue-ax")
- KLUE(except "klue-wos")
- koai.benchmarks.finetune_utils.TaskInfo๋ฅผ ์ด์ฉํ์ฌ ์ปค์คํ ํ ์คํฌ์๋ ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
Issue
- ํ์ฌ ๊ฐ๋ฐ ์ค์ ์๋ ํ๋ก์ ํธ์ ๋๋ค. ํฅํ ๋ฒค์น๋งํฌ๊ฐ ์ถ๊ฐ๋ ์์ ์ ๋๋ค.
- ์์ค์ ๋ง์ ๋ถ๋ถ๋ค์ด, https://github.com/huggingface/transformers/ ๋ฅผ ์ฐธ๊ณ ๋ฐ ์ธ์ฉํ์ฌ ์ ์๋์์ต๋๋ค.