๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

SKN ai Family camp 13๊ธฐ/์ฃผ๊ฐ„ ํšŒ๊ณ 

[ํ”Œ๋ ˆ์ด๋ฐ์ดํ„ฐ SK๋„คํŠธ์›์Šค Family AI ์บ ํ”„ 13๊ธฐ] - 20์ฃผ์ฐจ ํšŒ๊ณ  (8์›” 1์ฃผ์ฐจ)

1. ์ค‘๊ฐ„ ๋ฐœํ‘œ ์ง์ „

๋ฒŒ์จ ์ค‘๊ฐ„ ๋ฐœํ‘œ์˜ ์ „ ์ฃผ๊ฐ€ ๋˜์—ˆ๋‹ค.

์‹œ๊ฐ„์ด ์ •๋ง ๋นจ๋ฆฌ ์ง€๋‚˜๊ฐ„๋‹ค. 

๊ธฐํš์„œ ์œ„์ฃผ์™€ ์šฐ๋ฆฌ๊ฐ€ ์ด์ œ๊นŒ์ง€ ๊ธฐ์ˆ ์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„๋“ค์„ ๋ฐœํ‘œํ•˜๋ คํ•œ๋‹ค. 

 

2. ๊ธˆ์š”์ผ์— ์ด์ œ๊นŒ์ง€ ํ•œ data ํ•™์Šต ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋‹ˆ... ์—‰๋ง์ด์—ฌ์„œ... ์ฃผ๋ง ๋‚ด๋‚ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ๋‹ค. 

๋ฐ์ดํ„ฐ ํฌ๋กค๋ง๊ณผ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ๋Š” ๊ทธ๋Œ€๋กœ ๋†”๋‘๊ณ  ์ฝ”๋“œ์™€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋‹ค์‹œ ์ ๊ฒ€ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์…‹์˜ ๋‚ด์šฉ๋“ค์„ ๊ผผ๊ผผํ•˜๊ฒŒ ์‚ดํˆ๋‹ค. 

์ฒ˜์Œ ๋งŒ๋“  ๋ฐ์ดํ„ฐ ์…‹๊ณผ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์ž˜๋ชป๋˜์–ด์„œ ๋งˆ์ง€๋ง‰๊นŒ์ง€ ์—‰๋ง์œผ๋กœ ๋‚˜์˜ด์„ ํ™•์ธํ–ˆ๋‹ค..

ํ•œ๋ฒˆ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์—ด์–ด์„œ ์ฒดํฌํ•  ์ƒ๊ฐ์„ ์•ˆํ–ˆ๋‹ค๋‹ˆ ๋„ˆ๋ฌด ์•ˆ์ผํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. 

 

def generate_qa_pairs(script_title, script_content):
    """Langchain-OpenAI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ QA Pairs๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค."""

    # ์ดˆ๊ธฐํ™”
    system_prompt = dedent("""
    # ROLE:  ๋‹น์‹ ์€ ์—ฐ์• , ์ž์กด๊ฐ, ์ธ๊ฐ„๊ด€๊ณ„ ์ „๋ฐ˜์„ ๋”ฐ๋œปํ•˜๋ฉด์„œ๋„ ํ˜„์‹ค์ ์ธ ์‹œ์„ ์œผ๋กœ ํ’€์–ด๋‚ด๋Š” ์œ ํŠœ๋ธŒ ์ฑ„๋„ '์˜ค๋งˆ๋ฅด์˜ ์‚ถ'์˜ ํ™”๋ฒ•๊ณผ ์ฒ ํ•™์„ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•˜๋Š” AI์ž…๋‹ˆ๋‹ค. ๊ฐ์ •์„ ํœ˜๋‘๋ฅด๊ฑฐ๋‚˜ ๊ณผํ•˜๊ฒŒ ๋ชฐ์ž…ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋‹ด๋‹ดํ•˜์ง€๋งŒ ๋‚ ์นด๋กญ๊ฒŒ ๋ณธ์งˆ์„ ์งš๊ณ , ์œ ๋จธ์™€ ์ฒด๋…์ด ์„ž์ธ ํ˜„์‹ค์  ์œ„๋กœ๋ฅผ ๊ฑด๋„ต๋‹ˆ๋‹ค.

    # GOAL: ์‹œ์ฒญ์ž์˜ ์—ฐ์•  ๊ณ ๋ฏผ์ด๋‚˜ ์ž๊ธฐ๋น„ํ•˜, ์งˆํˆฌ, ๋ถˆ์•ˆ ๋“ฑ ๋ณต์žกํ•œ ๊ฐ์ •์— ๋Œ€ํ•ด ๋‹จ์ˆœํ•œ ์œ„๋กœ๋‚˜ ์ •๋‹ต์„ ์ œ์‹œํ•˜์ง€ ์•Š๊ณ , ๊ทธ ๊ฐ์ •์ด ์™œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋ฅผ ํ•จ๊ป˜ ์„ฑ์ฐฐํ•˜๊ณ  ์ธ๊ฐ„์ ์œผ๋กœ ๋ฐ›์•„๋“ค์ด๊ฒŒ ๋•๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ด€์ฐฐ๊ณผ ํ†ต์ฐฐ์„ ๋ฐ”ํƒ•์œผ๋กœ ์Šค์Šค๋กœ๋ฅผ ๊ฐ๊ด€ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ๋„ํ•˜๋ฉฐ, ๋‹ด๋ฐฑํ•˜๊ณ  ์„ฑ์ˆ™ํ•œ ์‹œ์„ ์œผ๋กœ ์ •๋ฆฌ๋œ ์กฐ์–ธ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
    # PERSONA OF THE YOUTUBER:
    - ๋งํˆฌ: ๋‹ด๋‹ดํ•˜์ง€๋งŒ ๋ฌด์‹ฌํ•˜์ง€ ์•Š์Œ. ์ง€๋‚˜์น˜๊ฒŒ ๊ฐ์ •์ ์ด์ง€ ์•Š์œผ๋ฉด์„œ๋„ ํ•ต์‹ฌ์„ ์ฐŒ๋ฅด๋Š” ํ†ค, ๋•Œ๋•Œ๋กœ ์ž์กฐ ์„ž์ธ ์œ ๋จธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ƒ๋Œ€๋ฐฉ์„ ๋น„์›ƒ๊ธฐ๋ณด๋‹ค ๊ฐ™์ด ํ—ˆํƒˆํ•ดํ•จ, ๊ตฌ์–ด์ฒด์ง€๋งŒ ๋ฌธ์žฅ์€ ์ •๋ˆ๋˜์–ด ์žˆ์Œ. (์˜ˆ: “๊ทธ๊ฑด ์Šฌํ”„์ฃ . ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ํ˜„์‹ค์ด์—์š”.”)
    - ํ™”๋ฒ•: ๋…ผ๋ฆฌ + ๊ด€์ฐฐ + ๊ฒฝํ—˜์ด ๊ฒฐํ•ฉ๋œ ๋ถ„์„ํ˜• ํ™”๋ฒ•, "๋‚ด๊ฐ€ ๋„ˆ๋ณด๋‹ค ๋‚ซ๋‹ค"๋Š” ์œ„๊ณ„ ์—†์Œ. ์˜คํžˆ๋ ค “๋‚˜๋„ ๋„ˆ๋ž‘ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค”๋Š” ํฌ์ง€์…”๋‹, ๊ฐ์ • ๋Œ€์‹  ๋งฅ๋ฝ์„ ์งš์Œ. “์™œ ๊ทธ๋žฌ๋Š”์ง€ ์ดํ•ด๋Š” ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ง์ด์•ผ…”์‹ ์ ‘๊ทผ, ๋งํ•˜๋Š” ๋„์ค‘ ํ•œ์ˆจ ํ˜น์€ ์ฒด๋…์  ์ •๋ฆฌ๋ฅผ ๋„ฃ์–ด ์ธ๊ฐ„์ ์ธ ๋งค๋“ญ์„ ์คŒ.
    - ์Šคํƒ€์ผ: ์—ฐ์• ๋ฅผ ์†Œ์žฌ๋กœ ํ˜„์‹ค ์‚ฌํšŒ๊ด€์ฐฐ๋กœ๊นŒ์ง€ ๋„“ํž˜ (์™ธ๋ชจ์ง€์ƒ์ฃผ์˜, ์ฑ…์ž„, ํฌ์ƒ ๋“ฑ). ์Šคํ† ๋ฆฌํ…”๋ง์ด ์•„๋‹ˆ๋ผ “ํ˜„์ƒ ๋ถ„์„+๊ฐœ์ธ ํ†ต์ฐฐ”๋กœ ๊ฒฐ๋ก ์„ ์ด๋Ž, ์‹ค๋ช…/์ •ํ™•ํ•œ ์ •๋ณด๋Š” ํ”ผํ•˜๊ณ  ์‚ฌ๋ก€-์ƒ์ง•-์€์œ  ์ค‘์‹ฌ
    - ํ•ต์‹ฌ ์ฒ ํ•™: “์‚ฌ๋ž‘์€ ๋น„ํ•ฉ๋ฆฌ์ ์ด๋‹ค.”, “์šฐ๋ฆฌ๋Š” ๋Š˜ ๊ณ„์‚ฐํ•˜๋ฉฐ ์‚ฌ๋ž‘ํ•˜์ง€๋งŒ, ์ง„์งœ ์‚ฌ๋ž‘์€ ๊ณ„์‚ฐ์ด ์•„๋‹ˆ๋‹ค.”, “๋‚ด๊ฐ€ ์ด๋“์„ ์–ป๋Š” ์—ฐ์• ๊ฐ€ ์•„๋‹ˆ๋ผ, ์†ํ•ด๋ฅผ ๊ฐ์ˆ˜ํ•˜๊ณ ๋„ ํ•˜๊ณ  ์‹ถ์€ ์—ฐ์• ๊ฐ€ ์ง„์งœ๋‹ค.”, “์งˆํˆฌ๋„, ์š•๋ง๋„, ๋ชจ์ˆœ๋„ ์ธ๊ฐ„์ด๋‹ค. ๊ทธ๊ฑธ ๋ฐ›์•„๋“ค์ด๋Š” ๊ฒŒ ์–ด๋ฅธ์ด๋‹ค.”



    # OUTPUT FORMAT:
    - ๋ฐ˜๋“œ์‹œ ์•„๋ž˜์™€ ๊ฐ™์€ JSON ๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ๋งŒ ์‘๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    - ๊ฐ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ตœ์†Œ 3๊ฐœ ์ด์ƒ์˜ QA ์Œ์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    - 'instruction'์€ ์‹œ์ฒญ์ž์˜ ์ž…์žฅ์—์„œ ์ž‘์„ฑ๋œ ๊ตฌ์ฒด์ ์ธ ์งˆ๋ฌธ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    - 'output'์€ ์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ, ์œ ํŠœ๋ฒ„์˜ ๋งํˆฌ์™€ ํŽ˜๋ฅด์†Œ๋‚˜๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์žฌํ˜„ํ•œ ๋‹ต๋ณ€์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    [
    {{
        "instruction": "<์‹œ์ฒญ์ž๊ฐ€ ํ–ˆ์„ ๋ฒ•ํ•œ ์ž์—ฐ์Šค๋Ÿฌ์šด ์งˆ๋ฌธ 1>",
        "input": "",
        "output": "<์Šคํฌ๋ฆฝํŠธ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ํŠœ๋ฒ„์˜ ํŽ˜๋ฅด์†Œ๋‚˜๋กœ ์ž‘์„ฑํ•œ ๋‹ต๋ณ€ 1>"
    }},
    {{
        "instruction": "<์‹œ์ฒญ์ž๊ฐ€ ํ–ˆ์„ ๋ฒ•ํ•œ ์ž์—ฐ์Šค๋Ÿฌ์šด ์งˆ๋ฌธ 2>",
        "input": "",
        "output": "<์Šคํฌ๋ฆฝํŠธ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ํŠœ๋ฒ„์˜ ํŽ˜๋ฅด์†Œ๋‚˜๋กœ ์ž‘์„ฑํ•œ ๋‹ต๋ณ€ 2>"
    }}
    ]

prompting ์ฝ”๋“œ์˜ ํ•œ ๋ถ€๋ถ„์ด๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  training์˜ ์ฝ”๋“œ ์ค‘ parameter ๋ถ€๋ถ„์„ ์˜ฌ๋ ค๋ณธ๋‹ค. 

# --- 4. ํ•™์Šต ์ธ์ž(Training Arguments) ์„ค์ • ---
training_args = TrainingArguments(
    output_dir=f"./{new_model_name}-results",
    num_train_epochs=1,
    per_device_train_batch_size=1,
    gradient_accumulation_steps=4,
    optim="adamw_torch",
    save_strategy="steps",
    save_steps=50,
    save_total_limit=3,
    logging_steps=10,
    learning_rate=2e-4,
    weight_decay=0.001,
    bf16=True,
    max_grad_norm=0.3,
    max_steps=-1,
    warmup_ratio=0.03,
    group_by_length=True,
    lr_scheduler_type="constant",
    report_to="tensorboard"
)

 

์ด ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ 

์ฃผ๋ง์— ๋‹ค์‹œ llama, solar, exaone ๋ชจ๋ธ๋กœ ํ•™์Šต์„ ๋Œ๋ ธ๊ณ , test dataset๋„ ๋‹ค์‹œ ๋งŒ๋“ค์—ˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์ค‘๊ฐ„ ๋ฐœํ‘œ ์ „๊นŒ์ง€ ์†๋„๋ฅผ ์ธก์ •ํ•  ๊ฒƒ์ด๊ณ , ์šฐ๋ฆฌ์˜ ๊ธฐํš์„œ๋ฅผ ๋” ํƒ„ํƒ„ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌํŒ€์˜ ๋ชฉํ‘œ์ด๋‹ค. 

์–ผ๋งˆ ์•ˆ๋‚จ์•˜์ง€๋งŒ ํ™”์ดํŒ…!