Model Card for Model ID
Model Details
Model Description
์ด ๋ชจ๋ธ์ Google์ ๊ฐ๋ ฅํ ์ํ ์ธ์ด ๋ชจ๋ธ์ธ Gemma-3-1B-it์ ๊ธฐ๋ฐ์ผ๋ก, ํ๊ตญ์ด ๋ฒ์ฃ ์ฌ๊ฑด ๋ณด๊ณ ์ ๋ถ์ ํ์คํฌ์ ๋ง๊ฒ ๋ฏธ์ธ ์กฐ์ (Fine-tuning)๋์์ต๋๋ค.
# ์ฃผ์ ๊ธฐ๋ฅ
์ฌ๊ฑด ์ฌ๊ตฌ์ฑ (Context Generation): ์ฌ๊ฑด ๋ณด๊ณ ์์ ๋ด์ฉ๊ณผ ์ฌ์ค ๊ด๊ณ๋ฅผ ๋ถ์ํ์ฌ ๋น์ ์ํฉ์ ๋
ผ๋ฆฌ์ ์ผ๋ก ์ฌ๊ตฌ์ฑํฉ๋๋ค.
์ฌ๊ฑด ์ ํ ๋ถ๋ฅ (Kind Classification): ์ฌ๊ตฌ์ฑ๋ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ฌ๊ฑด์ ์ข
๋ฅ๋ฅผ ์ ํํ ๋ถ๋ฅํ์ฌ ์ ์ํฉ๋๋ค.
# ํ์ต ์ ๋ต
(QLoRA)๋ชจ๋ธ ํ์ต์๋ QLoRA (Quantized Low-Rank Adaptation) ๊ธฐ๋ฒ์ด ์ ์ฉ๋์ด, ๋์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ๊ณผ ๋น ๋ฅธ ํ์ต ์๋๋ฅผ ๋ฌ์ฑํ์ต๋๋ค.
์์ํ: 4-bit NF4 ์์ํ (BitsAndBytes)
PEFT: LoRA ์ ์ฉ (Rank $r=16$, $\alpha=32$)
์ต์ ํ: adamw_torch, Learning Rate $2e-4$, Cosine Scheduler
ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ฒ์ ์ด ๋ชจ๋ธ์ ํ์ต ๋ฐ ์ฌ์ฉ์ ์ํด์๋ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ด ๊ถ์ฅ๋ฉ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์
transformers : 4.57.3
accelerate : 1.12.0
bitsandbytes : 0.48.2
peft : 0.15.2
torch : 2.9.0
Uses
from transformers import AutoModelForCausalLM, AutoTokenizer
base_model = "chyungwon/police-report-analysis-model"
tokenizer = AutoTokenizer.from_pretrained(base_model)
model = AutoModelForCausalLM.from_pretrained(
base_model,
torch_dtype=torch.bfloat16,
device_map="auto"
)
question = """๋ค์ ์ฌ๊ฑด ๋ณด๊ณ ์๋ฅผ ํตํด์ ๋น์ ๋ฒ์ฃ ์ฌ๊ฑด์ ์ฌ๊ตฌ์ฑํด์ฃผ๊ณ , ์ฌ๊ฑด ์ ํ์ ๋ถ๋ฅํด์ค.
[์ฌ๊ฑด ๋ณด๊ณ ์]
2024๋
4์ 25์ผ, ์์ธ ์ญ์ค๋์
๊ตฌ์ญ ์ธ๊ทผ์์ ์ด์ฟ์ง ํ๋ฌผ์ฐจ๊ฐ ์ธ๋๋ก ๋์งํด 60๋ ๋จ์ฑ์ ๋ถ์์ํจ ์ฌ๊ฑด์ด ๋ฐ์ํ์๋ค.
ํ์ฅ ์กฐ์ฌ ๊ฒฐ๊ณผ, ํ๋ฌผ์ฐจ ์ด์ ์ ๊น๋ฏผ์(35)๋ ์ฌ์ ์ ๋ธ๋ ์ดํฌ ํจ๋๋ฅผ ๋ง๋ชจ์ํค๊ณ ๋ธ๋ ์ดํฌ์ก์ ๋ฌผ์ ์์ด ๊ณ ์ฅ์ ์ ๋ฐํ ๊ฒ์ผ๋ก ํ์ธ๋์๋ค.
์ฌ๊ณ ์งํ ๊น์ ์ฐจ ๋ด๋ถ์ ์จ๊ฒจ์ง ๊ธ๊ณ ์์ ํ๊ธ 200๋ง ์๊ณผ ๊ฐ์ฃฝ ๊ฐ๋ฐฉ, ์ค๋งํธํฐ์ ๊บผ๋ด ์๊ฐ ์๊ฒฝ์ ์ง์์๊ฒ ์ ๋ฌํ๊ณ , ์ํ ๊ณ์ข๋ก ์ก๊ธํ์๋ค.
๊ฒฝ์ฐฐ์ ์ฐจ๋ GPS ๊ธฐ๋ก, ๋ธ๋ ์ดํฌ ํจ๋ ๋ง๋ชจ ์ํ, CCTV ์์ ์กฐ์ ์ฌ๋ถ๋ฅผ ์กฐ์ฌ ์ค์ด๋ฉฐ, ๊น์ ๊ตํต์ฌ๊ณ ์ฒ๋ฆฌํน๋ก๋ฒ์ ๋ฐ๋ผ ์น์ ํ์๋ก ์
๊ฑด๋์๋ค.
ํ์ฌ ์์ฌ๋ ๊น์ ์ํ ์ก๊ธ ๊ธฐ๋ก๊ณผ ๊ธ๊ณ ๋ด์ฉ๋ฌผ ํ๋ณด๋ฅผ ํตํด ๋ฒ์ฃ ๋๊ธฐ์ ๋ฒํ ๋ฐฉ๋ฒ์ ํ์
์ค์ด๋ค.
์ฌ๊ฑด์ ์์ง ๊ฒฐ๋ง์ด ๋ด๋ ค์ง์ง ์์์ผ๋ฉฐ, ์ถ๊ฐ ์ฆ๊ฑฐ ํ๋ณด๊ฐ ํ์ํ๋ค."""
messages = [
{"role": "system", "content": """๋น์ ์ ๋ฒํ๋ถ์ AI ๋ชจ๋ธ์
๋๋ค. ์ง๋ฌธ์ ์ ํํ๊ฒ ๋ต๋ณํ์ธ์."""},
{"role": "user", "content": question}
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt",
return_dict=True,
).to(model.device)
model.eval()
outputs = model.generate(
**inputs,
max_new_tokens=1024 * 2,
temperature=0.1,
do_sample=True,
)
generated = outputs[0][inputs["input_ids"].shape[-1] :]
answer = tokenizer.decode(generated, skip_special_tokens=True)
print('์ฌ๊ฑด ์ฌ๊ตฌ์ฑ : ', answer)
์ฌ๊ฑด ์ฌ๊ตฌ์ฑ : 2024๋
4์ 25์ผ ์คํ 1์ 30๋ถ, ์์ธ ์ญ์ค๋์
๊ตฌ์ญ ์ธ๊ทผ์์ ๋ฐ์ํ ์ด์ฟ์ง ํ๋ฌผ์ฐจ ์ฌ๊ณ ๋ ๋จ์ํ ๊ตํต์ฌ๊ณ ๊ฐ ์๋๋ผ ์ ๊ตํ๊ฒ ๊ณํ๋ ์ ๋ ์ฌ๊ฑด์ ์ผํ์ด์๋ค. ํ๋ฌผ์ฐจ ์ด์ ์์ธ ๊น๋ฏผ์(35)๋ 3๊ฐ์ ์ ๋ถํฐ ์ง์ญ ์๊ฐ์์ ์ผํ๋ 60๋ ๋จ์ฑ(ํผํด์)๊ณผ์ ๊ธ์ ์ ๊ฐ๋ฑ์ ํ๊ณ ์์๋ค. ๊น์ ํผํด์๊ฐ ์์ ์ด ์ด์ํ๋ ์์ ๊ฐ๊ฒ์์ ๋ฌผ๊ฑด์ ํ์ณ ๊ฐ๋ ๊ฒ์ ๋ชฉ๊ฒฉํ๊ณ , ๊ทธ ์ฌ์ค์ ํญ๋กํ๋ฉด ์์ ์ ์ฌ์
์ด ๋ง๊ฐ์ง ์ํ์ด ์๋ค๊ณ ํ๋จํ๋ค. ์ด์ ๊น์ ํผํด์๋ฅผ ์ ๊ฑฐํ๊ณ ๋์์ ๊ฐ๊ฒ์์ ํ์น ๋ฌผ๊ฑด์ ํ์ํ๋ ค๋ ๊ณํ์ ์ธ์ ๋ค.
๊ณํ ๋จ๊ณ์์ ๊น์ ํ๋ฌผ์ฐจ์ ๋ธ๋ ์ดํฌ ํจ๋๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ชจ์ํค๊ณ , ๋ธ๋ ์ดํฌ์ก์ ๋ฌผ์ ์์ด ๋ธ๋ ์ดํฌ๊ฐ ๊ฐ์๊ธฐ ์๋ํ์ง ์๋๋ก ์กฐ์ํ๋ค. ๋ํ, ์ฐจ ๋ด๋ถ์ ์จ๊ฒจ์ง ์์ ๊ธ๊ณ ์ ํ์น ๋ฌผ๊ฑด(ํ๊ธ 200๋ง ์, ๊ฐ์ฃฝ ๊ฐ๋ฐฉ, ์ค๋งํธํฐ)์ ๋ณด๊ดํ๋ค. ์ฌ๊ณ ๋ฐ์ ์ ํผํด์๊ฐ ์ฐจ์ ๋ถ๋ชํ ๋ถ์์ ์
์ผ๋ฉด, ๊น์ ์ฆ์ ์ฐจ๋ฅผ ๋ฉ์ถ๊ณ ๊ธ๊ณ ๋ฅผ ์ด์ด ๋ฌผ๊ฑด์ ๊บผ๋ด์ด ์๊ฐ ์๊ฒฝ์ ์ง์์๊ฒ ์ ๋ฌํ๋ค. ์ด ์ง์์ ๊น์ด ์ฌ์ ์ ํ์ํ ์ธ๋ฌผ๋ก, ๋ฌผ๊ฑด์ ์๊ฑฐํด ๊น์ ์ํ ๊ณ์ข๋ก ์ก๊ธํ๋๋ก ํ๋ค.
์คํ ๋จ๊ณ์์ ๊น์ ํ๋ฌผ์ฐจ๋ฅผ ์ญ์ค๋์
๊ตฌ์ญ ์ธ๊ทผ ์ธ๋์ ์ฃผ์ฐจํ ๋ค, ํผํด์๊ฐ ์ฐจ๋ฅผ ์ง๋๊ฐ๋ ์๊ฐ ๋ธ๋ ์ดํฌ๋ฅผ ๊ณ ์๋ก ์๋์ํค์ง ์๋๋ก ์กฐ์ํ๋ค. ์ฐจ๊ฐ ์ธ๋๋ฅผ ๋์งํ๋ฉด์ ํผํด์๋ ์ฐจ์ฒด์ ๋ถ๋ชํ ๋ค๋ฆฌ๋ฅผ ํฌ๊ฒ ๋ค์ณค๊ณ , ์ฆ์ ๋ณ์์ผ๋ก ์ด์ก๋์๋ค. ๊น์ ์ฌ๊ณ ์งํ ์ฐจ๋ฅผ ๋ฉ์ถ๊ณ , ํผํด์๊ฐ ๋ถ์์ผ๋ก ์์ง์ผ ์ ์๋ค๋ ์ํฉ์ ์ด์ฉํด ๊ธ๊ณ ๋ฅผ ์ด์ด ๋ฌผ๊ฑด์ ๊บผ๋๋ค. ๊ทธ๋ ๋ฌผ๊ฑด์ ์๊ฐ ์๊ฒฝ์ ์ง์์๊ฒ ์ ๋ฌํ๊ณ , ์ง์์ ์ฆ์ ํ๊ธ๊ณผ ๋ฌผ๊ฑด์ ๊น์ ์ํ ๊ณ์ข๋ก ์ก๊ธํ๋ค.
์ํ ๋จ๊ณ์์๋ ๊น์ ์ฌ๊ณ ํ์ฅ์ ๋น ๋ฅด๊ฒ ์ ๋ฆฌํ๊ณ , ์ฐจ ๋ด๋ถ์ ๋จ์ ํ์ ์ ์ต์ํํ๋ค. ๊ทธ๋ ์ฐจ๋ฅผ ๋ค๋ฅธ ์ง์ญ์ผ๋ก ์ด๋์์ผ CCTV๊ฐ ๊ฐ์๋์ง ์๋ ๊ณณ์ ์ฃผ์ฐจํ๋ค. ๋ํ, ์ฌ๊ณ ๋น์ ์ฐจ๊ฐ ์ ์งํ ์์น์ ํผํด์์ ๋ถ์ ์ ๋๋ฅผ ์ด์ฉํด ๊ฒฝ์ฐฐ์ด ์ฌ๊ณ ๋ฅผ ๋จ์ํ ๊ตํต์ฌ๊ณ ๋ก ํ๋จํ๋๋ก ์ ๋ํ๋ค. ๊น์ ์ดํ ์ํ ๊ณ์ข์์ ๋ฌผ๊ฑด์ ํ๊ธ์ผ๋ก ์ธ์ถํด ํ์ง ํธ์์ ์์ ํ๊ธํํ๊ณ , ๋จ์ ๊ธ์ก์ ๊ฐ์ง ์ ๋ถ์ฆ์ผ๋ก ๋ง๋ ๊ฐ์ ๊ณ์ข์ ์ก๊ธํ๋ค.
์์ฌ ๊ณผ์ ์์ ๊ฒฝ์ฐฐ์ CCTV ์์์ ๋ถ์ํด ํ๋ฌผ์ฐจ๊ฐ ์ธ๋๋ฅผ ๋์งํ ์๊ฐ์ ํ์ธํ๊ณ , ๋ธ๋ ์ดํฌ ํจ๋ ๋ง๋ชจ์ ๋ธ๋ ์ดํฌ์ก์ ๋ฌผ์ด ์์ธ ํ์ ์ ๋ฐ๊ฒฌํ๋ค. ๋ํ, ๊น์ด ์ฌ์ ์ ์๊ฐ ์๊ฒฝ์ ์ง์๊ณผ ์ฐ๋ฝ์ ์ฃผ๊ณ ๋ฐ์๋ค๋ ์ฆ๊ฑฐ๊ฐ ํ๋ณด๋์๋ค. ๊ทธ๋ฌ๋ ๊น์ ๊ตํต์ฌ๊ณ ์ฒ๋ฆฌํน๋ก๋ฒ์ ๋ฐ๋ผ ์น์ ํ์๋ก ์
๊ฑด๋์์ผ๋ฉฐ, ํ์ฌ๋ ๊ตฌ์์์ฅ์ด ์ ์ฒญ ์ค์ด๋ค. ์ฌ๊ฑด์ ์์ง ์์ฌ ๋จ๊ณ์ด๋ฉฐ, ๊น์ด ์ค์ ๋ก ๋ฌผ๊ฑด์ ํ์ณค๋์ง, ๊ทธ๋ฆฌ๊ณ ํผํด์์์ ๊ฐ๋ฑ์ด ๋ฒํ ๋๊ธฐ์ ์ผ๋ง๋ ์ํฅ์ ๋ฏธ์ณค๋์ง์ ๋ํ ์ถ๊ฐ ์กฐ์ฌ๊ฐ ํ์ํ๋ค. ์ฌ๊ฑด์ ์์ง ๊ฒฐ๋ง์ด ๋ด๋ ค์ง์ง ์์์ผ๋ฉฐ, ๊ฒฝ์ฐฐ์ ๊น์ ์ํ ๊ณ์ข์ ์๊ฐ ์๊ฒฝ์ ์ง์์ ์ฆ์ธ์ ํตํด ๋ฒํ์ ์ ๋ชจ๋ฅผ ํ์
ํ๋ ค ํ๊ณ ์๋ค.
์ฌ๊ฑด ์ ํ : ์ ๋
Training Details
base_model = "./gemma-3-1b-it"
tokenizer = AutoTokenizer.from_pretrained(base_model)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4"
)
model = AutoModelForCausalLM.from_pretrained(
base_model,
quantization_config=bnb_config,
torch_dtype=torch.bfloat16,
device_map="auto"
)
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=[
"q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj"
],
lora_dropout=0.05,
bias="none",
task_type=TaskType.CAUSAL_LM,
)
model2 = get_peft_model(model, lora_config)
Preprocessing [optional]
def format_prompt(ex, max_length=1775):
global max_length_cal, row
title = '๋ค์ ์ฌ๊ฑด ๋ณด๊ณ ์๋ฅผ ํตํด์ ๋น์ ์ฌ๊ฑด์ ์ฌ๊ตฌ์ฑํด์ฃผ๊ณ , ์ฌ๊ฑด ์ ํ์ ๋ถ๋ฅํด์ค\n'
question = ex["report"]
answer = ex["context"]
kind = f'\n์ฌ๊ฑด ์ ํ : {ex["kind"]}'
prompt = f"""<start_of_turn>system
๋น์ ์ ๋ฒํ๋ถ์ AI ๋ชจ๋ธ์
๋๋ค.
์ง๋ฌธ์ ์ ํํ๊ฒ ๋ต๋ณํ์ธ์.
<end_of_turn>
<start_of_turn>user
{title}
[์ฌ๊ฑด ๋ณด๊ณ ์]
{question}\n<end_of_turn>\n<start_of_turn>model\n"""
prompt_ids = tokenizer(prompt, add_special_tokens=False)["input_ids"]
model_part = f"""{answer} {kind}<end_of_turn>"""
answer_ids = tokenizer(model_part, add_special_tokens=False)["input_ids"]
input_ids = prompt_ids + answer_ids
labels = [-100] * len(prompt_ids) + answer_ids
attention_mask = [1] * len(input_ids)
pad_len = max_length - len(input_ids)
input_ids += [tokenizer.pad_token_id] * pad_len
attention_mask += [0] * pad_len
labels += [-100] * pad_len
return {
"input_ids": input_ids,
"attention_mask": attention_mask,
"labels": labels,
}
Training Hyperparameters
training_args = TrainingArguments(
output_dir=model_path,
per_device_train_batch_size=16,
gradient_accumulation_steps=2,
num_train_epochs=4,
learning_rate=2e-4,
bf16=True,
fp16=False,
gradient_checkpointing = False,
logging_steps=5,
eval_steps=300,
save_strategy="steps",
save_steps=300,
save_total_limit=2,
report_to="none",
lr_scheduler_type="cosine",
warmup_ratio=0.05,
optim="adamw_torch"
)
Speeds, Sizes, Times [optional]
[4844/4844 5:28:09, Epoch 4/4]
Step Training Loss
10 2.668900
20 2.386700
30 2.226000
40 2.026500
50 1.896800
60 1.778100
70 1.733700
80 1.678000
90 1.622100
100 1.583400
200 1.399400
300 1.343400
400 1.290700
500 1.286000
600 1.229200
700 1.226100
800 1.216800
900 1.204500
1000 1.158700
1100 1.153700
1200 1.157400
1300 1.106100
1400 1.114300
1500 1.091600
1600 1.087400
1700 1.087200
1800 1.093100
1900 1.082200
2000 1.084200
2100 1.090000
2200 1.084300
2300 1.058100
2400 1.062100
2500 1.021800
2600 1.028800
2700 1.034700
2800 1.040300
2900 1.033000
3000 1.016200
3100 1.015800
3200 0.983400
3300 1.010900
3400 1.015900
3500 1.028600
3600 1.019400
3700 0.971100
3800 0.947100
3900 0.984500
4000 0.965500
4100 0.973800
4200 0.968100
4300 0.969000
4400 0.953500
4500 0.988400
4505 0.942400
4510 0.931300
4515 0.973200
4520 0.989900
4525 0.979900
4530 0.963000
4535 0.981700
4540 0.953700
4545 0.963700
4550 0.961500
4555 0.972000
4560 0.958600
4565 0.970500
4570 0.987800
4575 0.974500
4580 0.968700
4585 0.982000
4590 0.961300
4595 0.968400
4600 0.966000
4700 0.998300
4800 0.966200
4805 0.973900
4810 0.975200
4815 0.974400
4820 0.973400
4825 0.972000
4830 0.960200
4835 0.961700
4840 0.974000
Evaluation Result :
{'eval_loss': 1.062408447265625, 'eval_runtime': 15.7428, 'eval_samples_per_second': 24.9, 'eval_steps_per_second': 3.113, 'epoch': 4.0}
Best checkpoint :
4510 0.931300
Model Card Authors [optional]
(์ฃผ)์ธ์ ๋ณด
ํํ์ด์ง : http://www.ijbinfo.com
์ ๋ณดํต์ ์ฐ์
์งํฅ์์ ์ง์์ ๋ฐ์์ ์งํํ์ต๋๋ค.
Model Card Contact
(์ฃผ)์ธ์ ๋ณด
์ฃผ์ : ์์ธ์ ๊ธ์ฒ๊ตฌ ๊ฐ์ฐ๋ 60-5 ๊ฐ์ฌ๊ทธ๋ ์ดํธ๋ฐธ๋ฆฌA๋ 805ํธ
์ฐ๋ฝ์ฒ : TEL : 02-3397-7765 FAX : 02-3397-7769 E-mail : sales@injungbo.co.kr
๋ด๋น์ : ์ฅํ์(chyungwon@ijbinfo.com)
- Downloads last month
- 5