κ΅λ¦½κ΅μ΄μ μΈκ³΅μ§λ₯(AI)λ§ν - 2024λ μΈκ³΅μ§λ₯μ νκ΅μ΄ λ₯λ ₯ νκ° κ²½μ§ λν π κΈμ(κ΅λ¦½κ΅μ΄μμ₯μ) μμ
λ³Έ 리ν¬μ§ν 리λ κ΅λ¦½κ΅μ΄μ '2024λ μΈκ³΅μ§λ₯μ νκ΅μ΄ λ₯λ ₯ νκ°' κ²½μ§ λν κ³Όμ μ€ 'λν λ§₯λ½ μΆλ‘ (λ μ ν)'μ λν μ μΆ λͺ¨λΈμ νμ΅ λ° μΆλ‘ μ μ¬ννκΈ° μν μ½λλ₯Ό ν¬ν¨νκ³ μμ΅λλ€.
'λν λ§₯λ½ μΆλ‘ ' κ³Όμ λ AI λͺ¨λΈμ΄ μ£Όμ΄μ§ λν λ΄μ©μ μ΄ν΄νκ³ , μ£Όμ΄μ§ λ°νμ λν 5κ°μ§ μΆλ‘ μ ν (μμΈ, νν μ¬κ±΄, μ μ 쑰건, λ΄μ λκΈ°, κ°μ λ°μ) μ€ κ°μ₯ μ ν©ν κ²μ μ ννλ λ₯λ ₯μ νκ°ν©λλ€.
(κ° μ νμ μΈλΆ λ°μ΄ν°λ₯Ό μ¬μ©νκ±°λ λ°μ΄ν° μ¦κ°μ΄ λΆκ°λ₯ν μ νμ΄κ³ , λ μ νμ μΈλΆ λ°μ΄ν°λ₯Ό μ¬μ©νκ±°λ λ°μ΄ν°λ₯Ό μ¦κ°νμ¬ μ¬μ© κ°λ₯ν μ νμ
λλ€.)
μμΈν λ΄μ©μ λͺ¨λΈ κΈ°μ μμμ νμΈνμ€ μ μμ΅λλ€.
λν λ§₯λ½ μΆλ‘ κ³Όμ λ₯Ό μννκΈ° μν΄, λ€μν λ°©λ²μΌλ‘ λ°μ΄ν°μ μ ꡬμ±νκ³ , μ¬μ νμ΅λ LLMλ€μ λ―ΈμΈμ‘°μ νμ¬, μμλΈμ ν΅ν΄ μΌλ°ννμμ΅λλ€.
μμΈν λ΄μ©μ λͺ¨λΈ κΈ°μ μμμ νμΈνμ€ μ μμ΅λλ€.
κ΅λ¦½κ΅μ΄μ μΈκ³΅μ§λ₯(AI)λ§νμμ μ 곡λλ λν λ§₯λ½ μΆλ‘ λ§λμΉ λ°μ΄ν°μ μ μμλ μλμ κ°μ΅λλ€.
EDA (Exploratory Data Analysis) λΆμ κ²°κ³Όλ resource/EDA
λ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ.
- κ°νλ¬Έμλ 곡백μ λ°λ³΅μ μΆμ½ (
'\n'
β' '
,' '
β' '
) - νΉμ μ΄μ±μ²΄λ₯Ό λ³Έλμ μλ―Έλ‘ λ체 (
'γ γ γ '
β'μ'
) '.'
,'?'
λ±μ νΉμλ¬Έμ λ°λ³΅μ μΆμ½ ('.......'
β'...'
,'?????'
β'??'
)- μλ―Έ μλ νΉμλ¬Έμλ₯Ό μμ (
'~'
,'@'
,'_'
,'/'
,'-'
,':'
,';'
,'('
,')'
,'^'
λ±) - λν λ΄μ©κ³Ό κ΄λ ¨ μλ μΈμ¬λ§λ€μ μμ (
'μλ νμΈμ'
β''
,'λ°κ°μ΅λλΉ'
β''
) - μ΅λͺ
ν νκΈ° λ³κ²½ (
'name1'
β'νμ1'
,'name2'
β'νμ2'
) - μμ λ° λͺ¨μλ§ μλ κ²½μ° μ κ±° (
'γ γ ‘γ '
β''
,'γ γ±γ γ²γ '
β''
) - ν λ°νμ νκΈμ΄ μκ³ , νΉμλ¬Έμλ§ μλ κ²½μ°μλ λ°ν μ 체λ₯Ό μμ
- λμΌν νμμ μ°μ λ°νλ₯Ό λ³ν©
λ°μ΄ν°μ
μ μ²λ¦¬ λ° μ μ κ³Όμ κ³Ό κ΄λ ¨νμ¬ μΈλΆ ꡬν μ½λλ run/refine.py
μ°Έμ‘°ν΄μ£ΌμΈμ.
λͺ¨λΈμ μ±λ₯μ λμ΄κΈ° μν΄, λ€μν ν둬ννΈλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°μ μ ꡬμ±νμμΌλ©°, ν둬νν μ΄ μ μ©λ λ°μ΄ν°μ μ μ’ λ₯λ μλμ κ°μ΅λλ€.
CustomRefDataset
: λνμ νΉμ λ°ν(Utterance References)λ₯Ό ν둬ννΈμ μ 곡νλ κΈ°λ³Έ λ°μ΄ν°μ CustomRefOfficialTermDataset
:CustomRefDataset
μμ μ¬μ©λ μΆμ½λ μΆλ‘ λ¬Έ μ νμ ννμ 곡μ μ©μ΄λ‘ λ체νμ¬ ν둬ννΈλ₯Ό ꡬμ±ν λ°μ΄ν°μ CustomRefDefinitionDataset
:CustomRefDataset
μμ μ¬μ©λ μΆμ½λ μΆλ‘ λ¬Έ μ νμ νν λμ κ° μΆλ‘ λ¬Έ μ νμ μ μλ₯Ό ν둬ννΈμ μ 곡ν λ°μ΄ν°μ CustomRefInstructionDataset
:CustomRefDefinitionDataset
μμ μ¬μ©λ Question λμ Instructionμ ν둬ννΈμ μ 곡ν λ°μ΄ν°μ SystemRefOfficialTermDataset
:CustomRefOfficialTermDataset
μμ μ¬μ©λ λ¨μν System Prompt λμ , ν둬ννΈ μμ§λμ΄λ§μ ν΅ν΄ λ ꡬ체μ μΈ System Promptλ₯Ό μ 곡ν λ°μ΄ν°μ
λν λ§₯λ½ μΆλ‘ κ³Όμ λ₯Ό μννκΈ° μν΄ μ¬μ©λ λͺ¨λΈμ μ’ λ₯λ 4μ’ λ₯λ‘ μλμ κ°μ΅λλ€.
- beomi/Solar-Ko-Recovery-11B
- x2bee/POLAR-14B-v0.2
- x2bee/POLAR-14B-v0.5
- chihoonlee10/T3Q-ko-solar-dpo-v7.0
μ λͺ¨λΈλ€μ μλμ κ°μ κΈ°μ€λ€μ κ±°μ³ μ μ νμμ΅λλ€.
- LLMμ νκ΅μ΄ μ±λ₯ 리λ보λμΈ Open Ko-LLM Leaderboardμμ λμ μ μλ₯Ό κΈ°λ‘ν λͺ¨λΈ
- μΆλ‘ μμλ λν κ·μ μ λ°λΌ RTX 4090 (24GB) GPU 1λλ₯Ό μ¬μ©ν΄μΌ νλ―λ‘, μ μ ν νλΌλ―Έν° μ¬μ΄μ¦λ₯Ό κ°λ λͺ¨λΈμ μ μ
- λν κ·μ μ λ°λΌ β24. 7. 1. μ΄νμ 곡κ°λ λͺ¨λΈμ μ μΈ
- μ€ν μμ€λ‘ 곡κ°λ λͺ¨λΈ μ€ λΌμ΄μ μ€ λ¬Έμ κ° μλ λͺ¨λΈ
- μ¬μ©ν λͺ¨λΈλ€μ λͺ¨λ "Apache License 2.0"μ λ°λ¦ λλ€.
λͺ¨λΈμ Weightλ₯Ό λͺ¨λ νλ ¨μν€λ κ²μ λΉν¨μ¨μ μ΄λ―λ‘, Parameter Efficient Fine Tuning κΈ°λ²μΈ LoRAμ QLoRAλ₯Ό μ¬μ©νμ¬ λ©λͺ¨λ¦¬ μ©λκ³Ό κ³μ° 리μμ€λ₯Ό λμ± ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλλ‘ νμμ΅λλ€. LoRAλ "Low-Rank Adaptation"μ μ½μλ‘, μ ν λ³νμ μν μ μ°¨μ λ체 맀κ°λ³μλ₯Ό μ¬μ©νμ¬ LLMμ ν¨μ¨μ μΌλ‘ λ―ΈμΈ μ‘°μ νλ λ°©λ²μ λλ€. QLoRAλ "Quantized Low-Rank Adaptation"μ μ½μλ‘, μ΄λ LoRAμ μ μ¬νμ§λ§ μμνλ μ μ°¨μ λ체 맀κ°λ³μλ₯Ό μ¬μ©νμ¬ νλ ¨μ λμ± ν¨μ¨μ μΌλ‘ λ§λ€μ΄ μ€λλ€.
κ³΅ν΅ νμ΄νΌ νλΌλ―Έν°
torch_dtype
: bfloat16seed
: 42SFTConfig
epoch
: 4per_device_train_batch_size
: 1per_device_eval_batch_size
: 1weight_decay
: 0.1lr_scheduler_type
: "cosine"warmup_steps
: 20neftune_noise_alpha
: Nonegradient_accumulation_steps
: 64gradient_checkpointing
: Truegradient_checkpointing_kwargs
: {"use_reentrant": False}max_seq_length
: 1024
LoraConfig
r
: 16lora_alpha
: 32lora_dropout
: 0.01target_modules
: ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj", "lm_head"]
Backbone Model | Fine-tuning Method | Learning Rate | Dataset Type | Refinement |
---|---|---|---|---|
x2bee/POLAR-14B-v0.2 | QLoRA | 2e-4 | CustomRefOfficialTermDataset | X |
x2bee/POLAR-14B-v0.5 | QLoRA | 2e-4 | SystemRefOfficialTermDataset | O |
x2bee/POLAR-14B-v0.5 | QLoRA | 2e-4 | CustomRefDefinitionDataset | X |
x2bee/POLAR-14B-v0.5 | QLoRA | 1e-4 | CustomRefInstructionDataset | X |
beomi/Solar-Ko-Recovery-11B | LoRA | 2e-4 | CustomRefDataset | O |
beomi/Solar-Ko-Recovery-11B | LoRA | 2e-4 | CustomRefDataset | X |
beomi/Solar-Ko-Recovery-11B | LoRA | 1e-4 | CustomRefDataset | X |
beomi/Solar-Ko-Recovery-11B | LoRA | 1e-4 | CustomRefInstructionDataset | X |
beomi/Solar-Ko-Recovery-11B | LoRA | 1e-4 | CustomRefDefinitionDataset | X |
beomi/Solar-Ko-Recovery-11B | LoRA | 1e-4 | SystemRefOfficialTermDataset | X |
chihoonlee10/T3Q-ko-solar-dpo-v7.0 | LoRA | 2e-4 | CustomRefInstructionDataset | X |
λͺ¨λΈμ μΆλ‘ κ²°κ³Όλ₯Ό μΌλ°ν νκΈ° μν΄, λ€μν λ°©μμΌλ‘ λ―ΈμΈμ‘°μ ν λͺ¨λΈλ€μ μΆλ‘ κ²°κ³Όλ₯Ό Hard Voting λ°©μμΌλ‘ μμλΈνμ¬ μ΅μ’ κ²°κ³Όλ₯Ό λμΆν©λλ€.
KR-Conversation-Inference_Refined
βββ resource # νμ΅μ νμν 리μμ€λ€μ 보κ΄νλ λλ ν 리
β βββ EDA # λ°μ΄ν° λΆμ κ²°κ³Όλ₯Ό 보κ΄νλ λλ ν 리
β βββ data # λ°μ΄ν°μ
μ 보κ΄νλ λλ ν 리
β β βββ λνλ§₯λ½μΆλ‘ _λ°μ΄ν°.zip
β βββ refined_data # μ μ²λ¦¬λ λ°μ΄ν°μ
μ 보κ΄νλ λλ ν 리
β βββ results # νμ΅λ λͺ¨λΈμ΄ μ μ₯λ λλ ν 리
β βββ predictions # μΆλ‘ κ²°κ³Όλ₯Ό 보κ΄νλ λλ ν 리
βββ run # μ€ν κ°λ₯ν python μ€ν¬λ¦½νΈλ₯Ό 보κ΄νλ λλ ν 리
β βββ refine.py
β βββ EDA.py
β βββ train.py
β βββ test.py
βββ scripts # νμ΅ λ° μΆλ‘ μ μ€ννκΈ° μν bash μ€ν¬λ¦½νΈλ₯Ό 보κ΄νλ λλ ν 리
β βββ train_model_1.sh
β βββ ...
β βββ train_model_11.sh
β βββ train.sh # νμ΅μ μ€ννκΈ° μν bash μ€ν¬λ¦½νΈ
β βββ test_model_1.sh
β βββ ...
β βββ test_model_11.sh
β βββ hard_voting.sh # μμλΈμ μν bash μ€ν¬λ¦½νΈ
β βββ test.sh # μΆλ‘ μ μ€ννκΈ° μν bash μ€ν¬λ¦½νΈ
βββ src # νμ΅μ μ¬μ©λ ν¨μλ€μ 보κ΄νλ λλ ν 리
βββ data.py
μ½λ μ€νμ μν΄ μλμ κ°μ νκ²½μ΄ νμν©λλ€.
- Ubuntu 20.04.5 LTS
- Python 3.9.19
- Miniconda 24.1.2
- git
condaκ° μ€μΉλμ΄ μμ§ μμ κ²½μ° μλλ₯Ό μ°Έκ³ νμ¬ μ€μΉν΄μ£ΌμΈμ.
$ cd ~ # μ€μΉ νμΌμ λ€μ΄λ‘λν κ²½λ‘λ‘ μ΄λ (to home directory)
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # Miniconda μ€μΉ νμΌ λ€μ΄λ‘λ
$ bash Miniconda3-latest-Linux-x86_64.sh # μ€μΉ νμΌ μ€ν
$ export PATH=~/miniconda3/bin:$PATH # νκ²½ λ³μ μ€μ
$ source ~/.bashrc # Anaconda μ€μΉ ν bash shell νκ²½ μ¬μ€μ
$ conda init # conda μ΄κΈ°ν
$ conda --version # conda λ²μ νμΈ
$ git clone https://github.com/oneonlee/KR-Conversation-Inference_Refined.git
$ cd KR-Conversation-Inference_Refined
$ conda create -n KR-Conversation-Inference python=3.9.19 # κ°,λ μ ν λͺ¨λ λμΌ
$ conda activate KR-Conversation-Inference # κ°,λ μ ν λͺ¨λ λμΌ
$ pip install -r requirements.txt # κ°,λ μ ν λͺ¨λ λμΌ
$ curl -o nanumfont.zip http://cdn.naver.com/naver/NanumFont/fontfiles/NanumFont_TTF_ALL.zip
$ sudo unzip -d /usr/share/fonts/nanum nanumfont.zip
$ sudo fc-cache -f -v
$ fc-list | grep Nanum
$ rm ~/.cache/matplotlib/fontlist*
μΈκ³΅μ§λ₯(AI)λ§ν κ³Όμ νμ΄μ§μμ λν λ§₯λ½ μΆλ‘ λ§λμΉλ₯Ό λ€μ΄λ‘λ λ°μ resource/data
λλ ν 리μ μμΉμν΅λλ€.
# λ°μ΄ν°μ
μμΆ ν΄μ
$ cd resource/data
$ unzip λνλ§₯λ½μΆλ‘ _λ°μ΄ν°.zip
$ mv λνλ§₯λ½μΆλ‘ _λ°μ΄ν°/λνλ§₯λ½μΆλ‘ _train.json train.json
$ mv λνλ§₯λ½μΆλ‘ _λ°μ΄ν°/λνλ§₯λ½μΆλ‘ _dev.json dev.json
$ mv λνλ§₯λ½μΆλ‘ _λ°μ΄ν°/λνλ§₯λ½μΆλ‘ _test.json test.json
$ rm -r λνλ§₯λ½μΆλ‘ _λ°μ΄ν°
# train.jsonκ³Ό dev.jsonμ ν©μ³ train+dev.json νμΌ μμ±
$ head -n -1 train.json > temp.json
$ truncate -s -2 temp.json
$ echo "," >> temp.json
$ tail -n +2 dev.json >> temp.json
$ mv temp.json train+dev.json
$ cd ../../
# λ°μ΄ν°μ
μ μ²λ¦¬ λ° μ μ
$ python run/refine.py
λ°μ΄ν°μ μ λΆμνκΈ° μν΄ μλ λͺ λ Ήμ΄λ₯Ό μ€νν©λλ€.
$ python run/EDA.py
$ python run/EDA.py --refined
λΆμ κ²°κ³Όλ resource/EDA
λλ ν 리μ μ μ₯λλ©°, μλμ κ°μ νμΌλ€μ΄ μμ±λ©λλ€.
category_distribution.png
: μΆλ‘ λ¬Έ μ νλ³ λΆν¬conversation_length_distribution.png
: λν ν΄ μ λΆν¬output_distribution.png
: μ λ΅ μΆλ‘ λ¬Έ μ νμ λΆν¬total_utterance_length_distribution.png
: λν μ 체 κΈΈμ΄ λΆν¬total_utterance_lengths.csv
: λν λ³ μ 체 κΈΈμ΄ λ°μ΄ν°wordcloud.png
: λν λ΄μ© μλν΄λΌμ°λ
νμ΅μλ A100-PCIe-40GB GPU 1λκ° μ¬μ©λμμ΅λλ€. λͺ¨λΈμ νμ΅νλ €λ©΄ μλμ κ°μ΄ μ€νν©λλ€.
$ sh scripts/train.sh
μΆλ‘ μλ RTX 4090 (24GB) GPU 1λκ° μ¬μ©λμμ΅λλ€. λͺ¨λΈμ μΆλ‘ νλ €λ©΄ μλμ κ°μ΄ μ€νν©λλ€.
$ sh scripts/test.sh
μ΅μ’
κ²°κ³Όλ resource/results/predictions
λλ ν 리μ final-result.json
νμΌμ μ μ₯λ©λλ€.
μ΅μ’ κ²°κ³Όλ μ½ 98.01%μ μ νλλ‘ λ¦¬λ보λ 1μλ₯Ό λ¬μ±νμμ΅λλ€.
λ³Έ 리ν¬μ§ν 리λ Apache License 2.0μ λ°λ¦ λλ€.
- κ΅λ¦½κ΅μ΄μ μΈκ³΅μ§λ₯(AI)λ§ν - 2024λ μΈκ³΅μ§λ₯μ νκ΅μ΄ λ₯λ ₯ νκ° κ²½μ§ λν
- κ΅λ¦½κ΅μ΄μ μΈκ³΅μ§λ₯(AI)λ§ν - λν λ§₯λ½ μΆλ‘ (λ μ ν) κ³Όμ
- GitHub - teddysum/Korean_CCI_2024
- HuggingFace - beomi/Solar-Ko-Recovery-11B
- HuggingFace - x2bee/POLAR-14B-v0.5
- HuggingFace - x2bee/POLAR-14B-v0.2
- HuggingFace - chihoonlee10/T3Q-ko-solar-dpo-v7.0