saju-naming / README.md
KevRiver's picture
Update README.md
d61995c verified
---
library_name: transformers
tags: []
---
## Model Details
### Model Description
<!-- Provide a longer summary of what this model is. -->
- **Developed by:** κ°•μŠΉκ³€, μœ ν˜μ§„, 이도건
- **Model type:** Casual Language Model
- **Language(s) (NLP):** Korean
- **License:** -
- **Finetuned from model [optional]:** rtzr/ko-gemma-2-9b-it
### Model Sources [optional]
<!-- Provide the basic links for the model. -->
- **Repository:** https://github.com/5KLetsGo/saju_naming
- **Demo [optional]:** -
## Training Details
### **LoRA μ„€μ •**
```python
lora_config = LoraConfig(
lora_alpha = 8,
lora_dropout = 0.1,
r=16,
target_modules=["k_proj", "o_proj", "v_proj", "q_proj", "gate_proj", "up_proj", "down_proj"],
bias="none",
task_type="CAUSAL_LM",
)
```
lora_alpha = 8: lora_alphaλŠ” LoRA의 ν•™μŠ΅ 속도λ₯Ό μ‘°μ ˆν•˜λŠ” ν•˜μ΄νΌνŒŒλΌλ―Έν„°μž…λ‹ˆλ‹€. 큰 κ°’μΌμˆ˜λ‘ ν•™μŠ΅ 속도가 λŠλ €μ§€λ©°, μž‘μ€ 값은 더 λΉ λ₯΄κ²Œ ν•™μŠ΅λ©λ‹ˆλ‹€. 보톡 이 값은 LoRA의 μ—…λ°μ΄νŠΈ 강도λ₯Ό μ‘°μ ˆν•˜λŠ” μŠ€μΌ€μΌλ§ νŒ©ν„°λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
lora_dropout = 0.1: λ“œλ‘­μ•„μ›ƒ ν™•λ₯ μ„ μ˜λ―Έν•©λ‹ˆλ‹€. λ“œλ‘­μ•„μ›ƒμ€ ν•™μŠ΅ 쀑 일뢀 λ‰΄λŸ°μ„ μž„μ‹œλ‘œ μ œκ±°ν•¨μœΌλ‘œμ¨ λͺ¨λΈμ˜ μΌλ°˜ν™” λŠ₯λ ₯을 ν–₯μƒμ‹œν‚€λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 0.1은 10%의 λ‰΄λŸ°μ„ λ“œλ‘­μ•„μ›ƒ ν•˜κ² λ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.
r = 16: r은 LoRAμ—μ„œ μ‚¬μš©λ˜λŠ” 저차원 ν–‰λ ¬μ˜ 랭크(rank)λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 이 값은 λͺ¨λΈμ— μΆ”κ°€λ˜λŠ” 저차원 ν–‰λ ¬μ˜ 크기λ₯Ό κ²°μ •ν•˜λ©°, μ„±λŠ₯κ³Ό λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ— 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€. 일반적으둜 μž‘μ€ κ°’μΌμˆ˜λ‘ λ©”λͺ¨λ¦¬ νš¨μœ¨μ μž…λ‹ˆλ‹€.
target_modules=["k_proj", "o_proj", "v_proj", "q_proj", "gate_proj", "up_proj", "down_proj"]: LoRAκ°€ 적용될 λͺ¨λ“ˆ λ¦¬μŠ€νŠΈμž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ "k_proj", "o_proj", "v_proj", "q_proj" 등은 트랜슀포머 λͺ¨λΈμ˜ λ‹€μ–‘ν•œ 투영(projection) λ ˆμ΄μ–΄λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 각각 ν‚€(key), κ°’(value), 쿼리(query) λ“± 주둜 μ–΄ν…μ…˜ λ©”μ»€λ‹ˆμ¦˜μ— μ‚¬μš©λ˜λŠ” λ ˆμ΄μ–΄λ“€μž…λ‹ˆλ‹€.
bias = "none": 편ν–₯(bias)을 μΆ”κ°€ν• μ§€ μ—¬λΆ€λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” "none"으둜 μ„€μ •λ˜μ–΄ μžˆμ–΄ 편ν–₯이 μ μš©λ˜μ§€ μ•ŠμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
task_type = "CAUSAL_LM": LoRAκ°€ μ μš©λ˜λŠ” μž‘μ—… μœ ν˜•μ„ μ •μ˜ν•©λ‹ˆλ‹€. "CAUSAL_LM"은 인과적 μ–Έμ–΄ λͺ¨λΈ(Causal Language Modeling)을 μ˜λ―Έν•©λ‹ˆλ‹€. μ΄λŠ” GPT처럼 λ‹€μŒ 단어λ₯Ό μ˜ˆμΈ‘ν•˜λŠ” λ°©μ‹μ˜ μ–Έμ–΄ λͺ¨λΈμ— ν•΄λ‹Ήν•©λ‹ˆλ‹€.
rtzr/ko-gemma-2-9b-it Β· Hugging Face
### **λͺ¨λΈ μ„€μ •**
```python
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
formatting_func=generate_prompt,
max_seq_length=512,
args=TrainingArguments(
output_dir="./output",
num_train_epochs = 1,
max_steps=3000,
per_device_train_batch_size=1,
gradient_accumulation_steps=4,
optim="paged_adamw_8bit",
warmup_steps=1,
learning_rate=2e-4,
fp16=True,
logging_steps=100,
push_to_hub=False,
report_to='none',
),
peft_config=lora_config
)
```
model=model: ν•™μŠ΅ν•  사전 ν›ˆλ ¨λœ λͺ¨λΈμ„ μ§€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ model은 이전에 μ •μ˜λœ λͺ¨λΈ 객체λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
train_dataset=dataset: ν•™μŠ΅μ— μ‚¬μš©ν•  데이터셋을 μ§€μ •ν•©λ‹ˆλ‹€. 이 데이터셋(dataset)μ—λŠ” 미리 μ€€λΉ„λœ ν•™μŠ΅μš© 데이터가 ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
formatting_func=generate_prompt: ν•™μŠ΅ λ°μ΄ν„°μ…‹μ—μ„œ 각 μƒ˜ν”Œμ„ μ–΄λ–»κ²Œ ν¬λ§·νŒ…ν• μ§€λ₯Ό μ •μ˜ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ generate_promptλΌλŠ” ν•¨μˆ˜κ°€ 각 데이터 μƒ˜ν”Œμ„ μ μ ˆν•œ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ λͺ¨λΈ μž…λ ₯으둜 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
max_seq_length=512: 각 μž…λ ₯ μƒ˜ν”Œμ˜ μ΅œλŒ€ μ‹œν€€μŠ€ 길이λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” μ΅œλŒ€ 512개의 ν† ν°μœΌλ‘œ μ‹œν€€μŠ€ 길이λ₯Ό μ œν•œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 즉, ν•˜λ‚˜μ˜ μž…λ ₯이 512개 μ΄μƒμ˜ ν† ν°μœΌλ‘œ 이루어진 경우 잘리게 λ©λ‹ˆλ‹€.
num_train_epochs=1: 전체 데이터셋을 λͺ‡ 번 λ°˜λ³΅ν•˜μ—¬ ν•™μŠ΅ν• μ§€λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
max_steps=3000: 총 ν•™μŠ΅ μŠ€ν… 수λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.
per_device_train_batch_size=1: ν•œ λ²ˆμ— 각 λ””λ°”μ΄μŠ€(GPU λ˜λŠ” CPU)μ—μ„œ ν•™μŠ΅ν•  배치 크기λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
gradient_accumulation_steps=4: κ·ΈλΌλ””μ–ΈνŠΈλ₯Ό μΆ•μ ν•˜λŠ” μŠ€ν… 수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 배치 크기가 μž‘μ„ λ•Œ μœ μš©ν•˜λ©°, 4번의 λ°°μΉ˜μ— λŒ€ν•΄ κ·ΈλΌλ””μ–ΈνŠΈλ₯Ό μΆ•μ ν•œ ν›„, μ—…λ°μ΄νŠΈκ°€ 이루어지도둝 μ„€μ •λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ€„μ΄λ©΄μ„œλ„ 효과적인 ν•™μŠ΅μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
optim="paged_adamw_8bit": μ΅œμ ν™” μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ paged_adamw_8bitλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λŠ” 8λΉ„νŠΈ AdamW μ΅œμ ν™” μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ, λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ€„μ—¬μ£Όλ©΄μ„œλ„ 효율적인 ν•™μŠ΅μ„ κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.
warmup_steps=1: ν•™μŠ΅ μ΄ˆκΈ°μ— μ›Œλ°μ—… μŠ€ν…μ„ 1둜 μ„€μ •ν•˜μ—¬ ν•™μŠ΅ 초기 λ‹¨κ³„μ—μ„œ ν•™μŠ΅ 속도λ₯Ό 천천히 μ¦κ°€μ‹œν‚€λŠ” κΈ°λ²•μž…λ‹ˆλ‹€.
learning_rate=2e-4: ν•™μŠ΅λ₯ μ„ μ„€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” 2e-4둜 맀우 μž‘μ€ 값을 μ‚¬μš©ν•˜μ—¬ μ•ˆμ •μ μΈ ν•™μŠ΅μ΄ μ§„ν–‰λ˜λ„λ‘ ν•©λ‹ˆλ‹€.
fp16=True: ν˜Όν•© 정밀도 ν•™μŠ΅μ„ μ‚¬μš©ν•˜κ² λ‹€λŠ” μ„€μ •μž…λ‹ˆλ‹€. FP16 (16-bit 뢀동 μ†Œμˆ˜μ )을 μ‚¬μš©ν•˜μ—¬ ν•™μŠ΅ 속도λ₯Ό 높이고, GPU λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.
logging_steps=100: 100 μŠ€ν…λ§ˆλ‹€ ν•™μŠ΅ 둜그λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
push_to_hub=False: λͺ¨λΈμ„ Hugging Face ν—ˆλΈŒλ‘œ μ—…λ‘œλ“œν•˜μ§€ μ•Šκ² λ‹€λŠ” μ„€μ •μž…λ‹ˆλ‹€.
report_to='none': ν•™μŠ΅ 쀑에 보고할 νˆ΄μ„ μ„€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” 아무 보고 νˆ΄λ„ μ‚¬μš©ν•˜μ§€ μ•Šκ² λ‹€λŠ” 의미둜 'none'으둜 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
peft_config=lora_config: LoRA(저차원 ν•™μŠ΅) 섀정을 μ μš©ν•©λ‹ˆλ‹€. lora_configλŠ” 이전에 μ •μ˜λœ LoraConfig 객체둜, LoRAλ₯Ό μ΄μš©ν•˜μ—¬ λ©”λͺ¨λ¦¬ 효율적인 ν•™μŠ΅μ„ μˆ˜ν–‰ν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.
## 데이터
- 2008 ~ 2024년도 λŒ€ν•œλ―Όκ΅­ 신생아 이름 톡계 [λŒ€ν•œλ―Όκ΅­ 법원 > μ „μžκ°€μ‘±κ΄€κ³„μ‹œμŠ€ν…œ](https://efamily.scourt.go.kr)
- λŒ€ν•œλ―Όκ΅­ 인λͺ…μš© ν•œμž 사전 [λŒ€ν•œλ―Όκ΅­ 법원](http://help.scourt.go.kr)
- 1950-01 ~ 2024-08 μŒμ–‘λ ₯ [곡곡데이터포털 ν•œκ΅­μ²œλ¬Έμ—°κ΅¬μ›](https://www.data.go.kr/data/15012679/openapi.do)
## Reference
[μ‚¬μ£ΌνŒ”μž](https://ko.wikipedia.org/wiki/%EC%82%AC%EC%A3%BC%ED%8C%94%EC%9E%90)