Gemma 3 LoRA Adapter Composition 실험
두 개의 LoRA 로 범죄와의 전쟁, 최민식 배우님 캐릭터에 의료 전문성을 더하는 테스트
01.실험의 출발점
하나의 LLM 을 여러 업무에 활용하려면 업무별로 모델을 파인튜닝하는 방법을 생각할 수 있는데 별도의 모델을 하나 하나 배포하고 운영하는게 비효율적일 수 있다.
그래서 vLLM 은 요청별로 하나의 Base 모델에 연결된 서로 다른 Adapter 지정과 여러 Adapter 에 대한 요청을 병렬로 처리할 수 있도록 지원하고 있다.
또한 허깅페이스 PEFT 는 여러 Adapter의 가중치를 결합하는 기능을 제공하여 하나의 Base 모델에 서로 다른 데이터로 학습한 여러 Adapter 를 적용하면 각기 다른 특성을 가진 모델처럼 활용할 수 있다.
이번 포스트에서는 "범죄와의 전쟁"에서 최민식 배우님이 연기한 최익현이라는 캐릭터의 말투를 학습한 Adapter 와 의료상담 데이터를 학습한 Adapter 의 가중치를 PEFT의 Adapter Composition 방식으로 결합해 보려고 한다.
과연 두 Adapter 를 결합하면 부산 사투리를 사용하는 최익현이 마치 의사가 된 것처럼 사용자와 의료 상담을 나누는 AI 를 구현할 수 있을지 확인해 보기로 했다.
02.목적에 따른 학습방법의 차이
학습을 하기 위해 우선 Base 모델은 Gemma 3 4B IT 를 쓰기로 했다. 최익현 캐릭터의 말투를 위한 Adapter, 의료상담을 위한 Adapter 모두 LoRA 파인튜닝을 사용하지만 학습시키려는 목적과 대상이 다르기 때문에 데이터 구성과 학습 전략도 달라야 했다.
- 캐릭터 LoRA : 모델이 어떻게 말할 것인가를 학습
- 메디컬 LoRA : 모델이 어떤 내용을 어떤 절차로 답할 것인가를 학습
특히 메디컬 LoRA 는 단순 암기가 아니라 맥락에 맞는 질문과 절차를 학습하는 데 초점을 맞추어야 한다. 정리를 하자면 다음표와 같다.
구분 | 캐릭터 LoRA | 메디컬 LoRA |
|---|---|---|
학습 목적 | 특정 캐릭터의 말투와 화법 재현 | 의료 상담 응답의 정확성과 일관성 향상 |
주요 학습 대상 | 어휘, 사투리, 말투, 문장 구성 | 증상 이해, 문진, 정보 설명, 안전한 대응 |
핵심 평가 | 캐릭터의 말투가 유지되는가? | 의학적으로 적절하고 안전한가? |
주요 위험 | 특정 표현의 반복, 과장된 사투리 | 잘못된 의학 정보, 단정적인 진단 |
학습 방식 | SFT + QLoRA | SFT + QLoRA, 필요시 추가 검증·선호도 최적화 |
1) 캐릭터 - 학습 데이터 구조
{
"messages": [
{
"role": "user",
"content": "친구가 돈을 빌려 가고 안 갚는다."
},
{
"role": "assistant",
"content": "마, 돈 빌려 갔으면 갚아야 될 거 아이가."
}
]
}2) 메디컬 - 학습 데이터 구조
{
"conversations": [
{
"from": "client",
"value": "기침이 나고 목이 아파요."
},
{
"from": "doctor",
"value": "언제부터 증상이 시작됐나요?"
},
{
"from": "client",
"value": "3일 전부터요."
},
{
"from": "doctor",
"value": "열이 나거나 숨이 차지는 않나요?"
},
{
"from": "client",
"value": "열은 없는데 밤에 기침이 심해요."
},
{
"from": "doctor",
"value": "숨이 차거나 가슴 통증이 동반되나요?"
}
]
}3) 학습 데이터 구조별 차이
비교 | Single-turn | Multi-turn |
|---|---|---|
주요 학습 목표 | 말투와 응답 스타일 | 문맥에 맞는 대화와 캐릭터 일관성 |
데이터 제작 | 상대적으로 간단 | 대화 흐름을 설계해야 함 |
캐릭터 말투 학습 | 적합 | 적합 |
장기 대화 일관성 학습 | 제한적 | 상대적으로 유리 |
03.독립적인 LoRA 구성
캐릭터 LoRA와 메디컬 LoRA 를 각각 학습 목적과 데이터 특성에 따라 학습을 하는데 설정을 다음과 같이 달리 했다.
캐릭터 LoRA 는 부산 사투리와 특유의 화법을 학습하는 것이 목적이고 학습 데이터가 짧은 대화와 일부 Multi-turn 대화로 구성되어 있기 때문에 비교적 짧게 최대 토큰 길이(Max Sequence Length)를 768로 설정했다. Learning Rate는 3e-5를 적용했다.
반면 Medical LoRA는 단순한 질문과 답변뿐 아니라 이전 증상과 문진 내용을 참고하여 상담을 이어가는 것이 중요하다. 따라서 이전 대화 이력을 충분히 포함할 수 있도록 최대 토큰 길이를 2048로 늘리고, Learning Rate는 상대적으로 낮은 2e-5를 적용해 가중치를 좀 더 보수적으로 업데이트하도록 설정했다.
| 구분 | 캐릭터 LoRA | 메디컬 LoRA |
|---|---|---|
| 목적 | 캐릭터의 말투 학습 | 의료 상담 방식 학습 |
| 학습 포인트 | - 부산 사투리 - 어휘, 말버릇 - 감정 표현, 화법 |
- 증상 파악 - 추가 문진 - 의료 정보 설명 - 위험 신호 안내 |
| 학습 데이터 특징 | - 짧은 대화 중심 - 일부 Multi-turn 포함 |
- 여러 턴의 상담 대화 - 이전 대화 문맥 적극 활용 |
| 학습 설정 | - Max Length: 768 - Learning Rate: 3e-5 |
- Max Length: 2048 - Learning Rate: 2e-5 |
여기서 두 Adapter 모두 사용자 질문과 이전 대화는 입력 문맥으로 활용하고, 현재 Assistant 응답에 대해서만 Loss를 계산하도록 구성했다.
이유는 모델이 사용자 질문 자체를 재현하는 것이 아니라, 주어진 대화 문맥에 맞는 응답을 생성하도록 학습시키기 위한 것이다.
이 과정에서 Loss는 모델이 생성한 응답과 정답 사이의 차이를 측정하며, Learning Rate는 해당 Loss를 줄이기 위해 LoRA 가중치를 업데이트하는 과정에 영향을 준다.
즉, 두 Adapter는 동일한 학습 구조를 사용하지만, 학습 데이터와 Learning Rate 등의 설정 차이에 따라 서로 다른 특성을 학습하게 된다.
다음은 위 학습 과정에 대한 예시이다.
import torch
from datasets import Dataset
from transformers import AutoTokenizer
from unsloth import FastModel
from trl import SFTTrainer, SFTConfig
# 1. Base Model 로드
BASE_MODEL = "unsloth/gemma-3-4b-it-unsloth-bnb-4bit"
model, _ = FastModel.from_pretrained(
model_name=BASE_MODEL,
max_seq_length=2048,
load_in_4bit=True,
full_finetuning=False,
text_only=True,
)
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
# 2. LoRA 설정
model = FastModel.get_peft_model(
model,
r=8,
lora_alpha=8,
target_modules=[
"q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",
],
lora_dropout=0,
bias="none",
use_gradient_checkpointing="unsloth",
random_state=42,
)
# 3. Multi-turn 학습 데이터
# Prompt: 이전 대화 문맥
# Completion: 학습할 현재 Assistant 응답
samples = [
{
"prompt": [
{"role": "user", "content": "머리가 아파요."},
{"role": "assistant", "content": "언제부터 아프셨나요?"},
{"role": "user", "content": "어제부터요. 어지럽기도 해요."},
],
"completion": [
{
"role": "assistant",
"content": "두통이 갑자기 시작됐나요? 시야 이상이나 구토 증상도 있나요?",
}
],
}
]
train_dataset = Dataset.from_list(samples)
# 4. SFT 학습 설정
training_args = SFTConfig(
output_dir="./medical_lora",
max_length=2048,
# 현재 Assistant 응답에만 Loss 계산
completion_only_loss=True,
# LoRA 가중치 업데이트에 적용할 학습률
learning_rate=2e-5,
num_train_epochs=1,
per_device_train_batch_size=1,
gradient_accumulation_steps=8,
optim="adamw_8bit",
bf16=torch.cuda.is_bf16_supported(),
fp16=not torch.cuda.is_bf16_supported(),
report_to="none",
)
# 5. Trainer 생성
trainer = SFTTrainer(
model=model,
processing_class=tokenizer,
train_dataset=train_dataset,
args=training_args,
)
# 6. 실제 Loss 계산 대상 확인
batch = next(iter(trainer.get_train_dataloader()))
input_ids = batch["input_ids"]
labels = batch["labels"]
# -100 = Loss 계산 제외
loss_mask = labels != -100
print("=== Loss 계산 대상 ===")
print(
tokenizer.decode(
input_ids[loss_mask].tolist(),
skip_special_tokens=True,
)
)
# 7. Fine-tuning 실행
trainer.train()
# 8. LoRA Adapter 저장
model.save_pretrained("./medical_lora/adapter")
04.LoRA 결합 및 추론실험
이제 각기 학습한 캐릭터 LoRA와 메디컬 LoRA를 PEFT의 add_weighted_adapter()로 결합하는 예제을 보자
import os
os.environ["UNSLOTH_COMPILE_DISABLE"] = "1"
import torch
from google.colab import drive
from unsloth import FastModel
from peft import PeftModel
from transformers import AutoTokenizer
drive.mount("/content/drive")
# 1. 공통 Base Model
BASE_MODEL = "unsloth/gemma-3-4b-it-unsloth-bnb-4bit"
ROOT = "/content/drive/MyDrive/peft_test"
CHARACTER_ADAPTER = (
f"{ROOT}/gemma3_4b_choi_ikhyeon_sft_v4/adapter"
)
MEDICAL_ADAPTER = (
f"{ROOT}/gemma3_4b_medical_lora/adapter"
)
# 2. Base Model 로드
base_model, _ = FastModel.from_pretrained(
model_name=BASE_MODEL,
max_seq_length=2048,
load_in_4bit=True,
full_finetuning=False,
text_only=True,
)
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
# 3. Character LoRA 로드
model = PeftModel.from_pretrained(
base_model,
CHARACTER_ADAPTER,
adapter_name="character",
is_trainable=False,
)
# 4. Medical LoRA 로드
model.load_adapter(
MEDICAL_ADAPTER,
adapter_name="medical",
is_trainable=False,
)
# 5. Adapter Composition
model.add_weighted_adapter(
adapters=["character", "medical"],
weights=[0.5, 0.5],
adapter_name="combined",
combination_type="cat",
)
# 6. 결합된 Adapter 활성화
model.set_adapter("combined")
model.eval()
# 7. 결합된 Adapter 저장
OUTPUT_DIR = f"{ROOT}/gemma3_4b_combined"
model.save_pretrained(
OUTPUT_DIR,
selected_adapters=["combined"],
safe_serialization=True,
)
print("Adapter Composition 완료")
print(f"저장 경로: {OUTPUT_DIR}/combined")
1) LoRA 결합
앞서 동일한 Gemma 3 4B 모델을 기반으로 학습한 Character LoRA와 Medical LoRA를 PEFT의 add_weighted_adapter()를 사용하여 결합했다.
결합 방식은 cat과 linear 두 가지를 사용했다.
- cat: 각 LoRA의 저랭크 행렬을 연결하여 가중치 변화량을 결합하는 방식
- linear: 각 LoRA의 저랭크 행렬을 가중 합산하여 결합하는 방식
두 방식은 가중치를 결합하는 방법이 다르므로 동일한 Adapter와 가중치를 사용하더라도 추론 결과가 달라질 수 있다.
이번 실험에서는 Character와 Medical의 가중치를 1.0:1.0, 0.7:0.3, 0.5:0.5, 0.3:0.7로 변경하고, 두 Adapter를 동시에 활성화하는 방식도 함께 비교했다.
2) 가중치별 응답비교
2-1) 기본강도 테스트 (캐릭터 1.0, 메디컬 1.0)
======================================================================
[LoRA 추론 비교]
======================================================================
질문: 며칠째 기침이 계속되고 밤에 더 심해집니다. 열은 없는데 어떤 점을 확인해야 하나요?
----------------------------------------------------------------------
[base] Gemma 3 Base Model
----------------------------------------------------------------------
며칠째 기침이 계속되고 밤에 더 심해지는 증상은 다양한 원인으로 발생할 수 있습니다. 열은 없지만 다른 증상들과 함께 나타난다면 다음과 같은 사항들을 확인하고 병원을 방문하여 정확한 진단을 받는 것이 중요합니다.
**1. 기침의 종류와 특징:**
* **건성 기침 vs 습성 기침:** 건성 기침은 목을 타고 넘어가는 듯한 느낌이며, 습성 기침은 가래가 동반되는 기침입니다.
* **기침의 강도 및 빈도:** 얼마나 자주, 얼마나 세게 기침하는지 관찰합니다.
* **기침 시 느껴지는 증상:** 가슴 통증, 숨 가쁨, 목 이물감 등 다른 동반 증상이 있는지 확인합니다.
**2. 동반 증상:**
* **목 통증:** 목의 염증이나 자극으로 인해 발생
[character] Character LoRA
----------------------------------------------------------------------
며칠째 계속되면 감기인지 다른 원인이 있는지 확인해야 한다. 밤에 더 심하면 진료를 받아 봐라.
[medical] Medical LoRA
----------------------------------------------------------------------
기침이 계속되고 밤에 더 심해진다면, 감기나 인플루엔자 같은 바이러스 감염일 수 있습니다. 그러나 다른 원인도 있을 수 있으므로, 의사의 진단을 받아보는 것이 좋습니다.
[both] Multi-Adapter 동시 활성화
----------------------------------------------------------------------
기침이 계속되면 감기나 바이러스 감염일 수 있다. 2주 이상 지속되면 다른 원인을 찾아야 한다.
[cat] Weighted Adapter (cat)
----------------------------------------------------------------------
기침이 계속되면 감기나 바이러스 감염일 수 있다. 2주 이상 지속되면 다른 원인을 찾아야 한다.
[Adapter 생성] linear | Character=1.00, Medical=1.00 | Rank=8
[linear] Weighted Adapter (linear)
----------------------------------------------------------------------
밤에 심해지면 감기와 인플루엔자도 가능하다. 다음 일과 밤에 심해진다면 인플루엔자 검사와 감기 치료를 받아야 한다.
======================================================================2-2) 캐릭터 중심 테스트 (캐릭터 1.5, 메디컬 0.2)
======================================================================
[LoRA 추론 비교]
======================================================================
질문: 며칠째 기침이 계속되고 밤에 더 심해집니다. 열은 없는데 어떤 점을 확인해야 하나요?
Character Weight: 1.50
Medical Weight: 0.20
----------------------------------------------------------------------
[base] Gemma 3 Base Model
----------------------------------------------------------------------
며칠째 기침이 계속되고 밤에 더 심해지는 증상은 다양한 원인으로 발생할 수 있습니다. 열은 없지만 다른 증상들과 함께 나타난다면 다음과 같은 사항들을 확인하고 병원을 방문하여 정확한 진단을 받는 것이 중요합니다.
**1. 기침의 종류와 특징:**
* **건성 기침 vs 습성 기침:** 건성 기침은 목을 타고 넘어가는 듯한 느낌이며, 습성 기침은 가래가 동반되는 기침입니다.
* **기침의 강도 및 빈도:** 얼마나 자주, 얼마나 세게 기침하는지 관찰합니다.
* **기침 시 느껴지는 증상:** 가슴 통증, 숨 가쁨, 목 이물감 등 다른 동반 증상이 있는지 확인합니다.
**2. 동반 증상:**
* **목 통증:** 목의 염증이나 자극으로 인해 발생
[character] Character LoRA
----------------------------------------------------------------------
며칠째 계속되면 감기인지 다른 원인이 있는지 확인해야 한다. 밤에 더 심하면 진료를 받아 봐라.
[medical] Medical LoRA
----------------------------------------------------------------------
기침이 계속되고 밤에 더 심해진다면, 감기나 인플루엔자 같은 바이러스 감염일 수 있습니다. 그러나 다른 원인도 있을 수 있으므로, 의사의 진단을 받아보는 것이 좋습니다.
[both] Multi-Adapter 동시 활성화
----------------------------------------------------------------------
마, 하루만 쉬어도 안 되면 진료를 받아 봐라.
[cat] Weighted Adapter (cat)
----------------------------------------------------------------------
마, 하루만 쉬어도 안 되면 진료를 받아 봐라.
[Adapter 생성] linear | Character=1.50, Medical=0.20 | Rank=8
[linear] Weighted Adapter (linear)
----------------------------------------------------------------------
마, 하루만 쉬어도 안 되면 진료를 받아야 한다.
======================================================================2-3) 두 Adapter 모두 강하게 (캐릭터 1.5, 메디컬 1.5)
======================================================================
[LoRA 추론 비교]
======================================================================
질문: 며칠째 기침이 계속되고 밤에 더 심해집니다. 열은 없는데 어떤 점을 확인해야 하나요?
Character Weight: 0.20
Medical Weight: 1.50
----------------------------------------------------------------------
[base] Gemma 3 Base Model
----------------------------------------------------------------------
며칠째 기침이 계속되고 밤에 더 심해지는 증상은 다양한 원인으로 발생할 수 있습니다. 열은 없지만 다른 증상들과 함께 나타난다면 다음과 같은 사항들을 확인하고 병원을 방문하여 정확한 진단을 받는 것이 중요합니다.
**1. 기침의 종류와 특징:**
* **건성 기침 vs 습성 기침:** 건성 기침은 목을 타고 넘어가는 듯한 느낌이며, 습성 기침은 가래가 동반되는 기침입니다.
* **기침의 강도 및 빈도:** 얼마나 자주, 얼마나 세게 기침하는지 관찰합니다.
* **기침 시 느껴지는 증상:** 가슴 통증, 숨 가쁨, 목 이물감 등 다른 동반 증상이 있는지 확인합니다.
**2. 동반 증상:**
* **목 통증:** 목의 염증이나 자극으로 인해 발생
[character] Character LoRA
----------------------------------------------------------------------
며칠째 계속되면 감기인지 다른 원인이 있는지 확인해야 한다. 밤에 더 심하면 진료를 받아 봐라.
[medical] Medical LoRA
----------------------------------------------------------------------
기침이 계속되고 밤에 더 심해진다면, 감기나 인플루엔자 같은 바이러스 감염일 수 있습니다. 그러나 다른 원인도 있을 수 있으므로, 의사의 진단을 받아보는 것이 좋습니다.
[both] Multi-Adapter 동시 활성화
----------------------------------------------------------------------
기침이 계속되고 밤에 더 심해진다면, 감기나 인플루엔자와 같은 바이러스성 감염을 의심해야 합니다. 다음 단계로는 발열과 호흡기 증상이 있는지 확인해야 합니다.
[cat] Weighted Adapter (cat)
----------------------------------------------------------------------
기침이 계속되고 밤에 더 심해진다면, 감기나 인플루엔자일 수 있습니다. 다른 증상이 있나요?
[Adapter 생성] linear | Character=0.20, Medical=1.50 | Rank=8
[linear] Weighted Adapter (linear)
----------------------------------------------------------------------
기침이 계속되고 밤에 더 심해진다면, 감염과 호흡기 질환을 배제하고, 폐와 기관지 내에 렴이 있는지 확인해야 합니다.
======================================================================
비교 완료
※ 모든 모델에 동일한 질문과 대화 문맥 적용
※ /compare 결과는 대화 이력에 추가되지 않습니다.
======================================================================
사용자 > /reset
대화 이력을 초기화했습니다.
사용자 > /weights 1.5 1.5
[Adapter 생성] cat | Character=1.50, Medical=1.50 | Rank=16
[설정] Mode=cat | Character=1.50 | Medical=1.50 | 대화 0턴
가중치 변경 시 add_weighted_adapter()로 새 Adapter를 생성합니다.
사용자 > /compare 며칠째 기침이 계속되고 밤에 더 심해집니다. 열은 없는데 어떤 점을 확인해야 하나요?
======================================================================
[LoRA 추론 비교]
======================================================================
질문: 며칠째 기침이 계속되고 밤에 더 심해집니다. 열은 없는데 어떤 점을 확인해야 하나요?
Character Weight: 1.50
Medical Weight: 1.50
----------------------------------------------------------------------
[base] Gemma 3 Base Model
----------------------------------------------------------------------
며칠째 기침이 계속되고 밤에 더 심해지는 증상은 다양한 원인으로 발생할 수 있습니다. 열은 없지만 다른 증상들과 함께 나타난다면 다음과 같은 사항들을 확인하고 병원을 방문하여 정확한 진단을 받는 것이 중요합니다.
**1. 기침의 종류와 특징:**
* **건성 기침 vs 습성 기침:** 건성 기침은 목을 타고 넘어가는 듯한 느낌이며, 습성 기침은 가래가 동반되는 기침입니다.
* **기침의 강도 및 빈도:** 얼마나 자주, 얼마나 세게 기침하는지 관찰합니다.
* **기침 시 느껴지는 증상:** 가슴 통증, 숨 가쁨, 목 이물감 등 다른 동반 증상이 있는지 확인합니다.
**2. 동반 증상:**
* **목 통증:** 목의 염증이나 자극으로 인해 발생
[character] Character LoRA
----------------------------------------------------------------------
며칠째 계속되면 감기인지 다른 원인이 있는지 확인해야 한다. 밤에 더 심하면 진료를 받아 봐라.
[medical] Medical LoRA
----------------------------------------------------------------------
기침이 계속되고 밤에 더 심해진다면, 감기나 인플루엔자 같은 바이러스 감염일 수 있습니다. 그러나 다른 원인도 있을 수 있으므로, 의사의 진단을 받아보는 것이 좋습니다.
[both] Multi-Adapter 동시 활성화
----------------------------------------------------------------------
밤에 심해지면 감기인지도 확인해야 한다.
[cat] Weighted Adapter (cat)
----------------------------------------------------------------------
밤에 심해진다면 감기와 인플루엔자도 가능하다. 다음 일정을 챙기고 안되면 의료진을 찾아야 한다.
[Adapter 생성] linear | Character=1.50, Medical=1.50 | Rank=8
[linear] Weighted Adapter (linear)
----------------------------------------------------------------------
Night symptoms can be different than daytime symptoms. Check the temperature and oxygen levels to see if it's serious. If abnormal, check oxygen levels and blood counts.
======================================================================05.실험 A/B/C 결과 종합
지금까지 테스트한 세가지 실험을 정리해보면 다음과 같다.
실험 | 캐릭터 | 메디컬 | 핵심 관찰 |
|---|---|---|---|
A. 기본 강도 | 1.0 | 1.0 | 서로 다른 학습에 따른 응답 패턴이 일부 혼합됨 |
B. 캐릭터 강화 | 1.5 | 0.2 | 사투리 표현 일부 등장, 의료 정보는 감소 |
C. 모두 강화 | 1.5 | 1.5 | 품질 개선 없이 부자연스러운 응답과 영어 출력 관찰 |
1) 기본 강도 테스트 (캐릭터 1.0, 메디컬 1.0)
기침이 계속되면 감기나 바이러스 감염일 수 있다. 2주 이상 지속되면 다른 원인을 찾아야 한다.
캐릭터의 짧은 반말과 메디컬의 질환 설명이 일부 함께 나타났으나 최익현의 캐릭터성이나 의료 전문성이 눈에 띄게 보이지는 않았다.
2) 캐릭터 강화 (캐릭터 1.5, 메디컬 0.2)
마, 하루만 쉬어도 안 되면 진료를 받아 봐라.
"마" 라는 사투리 표현이 추가 됐지만 캐릭터의 전체적인 화법은 여전히 부족해 보인다.
3) 모두 강화 (캐릭터 1.5, 메디컬 1.5)
3-1) Multi-Adapter
밤에 심해지면 감기인지도 확인해야 한다.
3-2) Weighted "cat"
밤에 심해진다면 감기와 인플루엔자도 가능하다. 다음 일정을 챙기고 안되면 의료진을 찾아야 한다.
cat 방식은 각 LoRA 의 가중치 변화량을 합산하는 것과 수학적으로 동일한 효과를 구현할 수 있다.
Multi-Adapter보다 감염 가능성을 조금 더 구체적으로 언급했지만, '다음 일정을 챙기고'라는 문맥상 부자연스러운 표현이 포함되었다. 또한 추가 문진에 필요한 정보도 충분하지 않았다.
3-3) Weighted "linear"
Night symptoms can be different than daytime symptoms. Check the temperature and oxygen levels to see if it's serious.
가장 예상하지 못한 결과는 linear 방식이었다.
linear는 각 LoRA의 저랭크 행렬을 개별적으로 합산한 후 곱하는 방식이다. 이 과정에서 서로 다른 Adapter 행렬 간의 교차항이 발생하므로, cat 방식과는 다른 가중치 변화량이 만들어진다.
이번 결과에서는 가중치를 모두 높였을 때 결합 방식에 따라 출력 언어까지 달라질 수 있다는 현상을 관찰했다.
06.실험을 마치며
이번 실험에서는 Gemma 3 4B를 기반으로 서로 다른 목적으로 Fine-tuning한 캐릭터 LoRA와 메디컬 LoRA를 결합하고, 결합 방식과 가중치에 따라 응답이 어떻게 달라지는지 확인했다.
1) 학습 데이터에 대한 생각
가장 먼저 돌아보게 된 부분은 학습 데이터의 구성이다.
캐릭터 LoRA는 영화 범죄와의 전쟁의 시나리오에서 최익현의 비교적 짧은 대사를 중심으로 학습 데이터를 구성했다. 그 영향인지 실제 추론에서는 짧고 단정적인 반말이 나타났지만, 기대했던 부산 사투리나 최익현 특유의 능청스러운 화법은 충분히 표현되지 않았다. 어쩌면 내 기억속의 최익현의 캐릭터가 유난히 과장되어 있을 지도 모르겠다.
매디컬 LoRA 는 의료상담 대화 데이터 를 사용했고, 다양하게 더 테스트를 해봐야겠지만 베이스 모델보다는 특별히 높은 의료 전문성을 보여주지는 못했다.
2) 긍정적인 부분
우선 동일한 Base 모델을 기반으로 다른 목적의 LoRA 를 학습하고 결합하여 활용할 수 있다는 점은 확인했다.
PEFT의 add_weighted_adapter()를 이용한 cat, linear 방식과 두 Adapter를 동시에 활성화하는 Multi-Adapter 방식을 비교했으며 동일한 조건에서도 결합 방식에 따라 응답이 달라지는 현상을 관찰했다.
답변 품질이 부족하기는 하지만 각각의 학습에 따른 응답변화를 확인 할 수 있었고 LoRA Adapter Composition 기능을 실험하기에는 충분하지 않았나 생각한다.
3) 아쉬웠던 부분
가장 아쉬운 점은 각 LoRA 가 의도했던 특성을 충분히 표현하지 못했다는 것이다. 캐릭터 LoRA 는 캐릭터 고유의 화법 보다 짧은 반말 형태가 두드러졌고 메디컬 LoRA 역시 Base 모델 대비 뚜렸단 전문성 향상을 확인하기 어려웠다.
또한 캐릭터의 가중치를 높였을 때 일부 사투리 표현은 나타났지만 의료관련 정보가 줄어들기도 했다. 이번 결과에서 Adapter 의 가중치를 높이는 것과 실제 응답품질을 높이는 것이 별개의 문제라는 점을 확인했다.
4) 개선해야 할 부분
아무래도 학습 데이터를 조금 더 보완해야 할 것 같다.
캐릭터 LoRA 는 대화 상황과 감정, 앞뒤 문맥을 포함하는 데이터로 구성하고 별도 평가할 필요가 있어보인다. 메디컬 LoRA 역시 단순한 증상 설명이나 일반적인 진료 권고를 넘어 추가 문진과 위험 신호 판단 등에 필요한 정보가 적절히 포함된 데이터가 필요해 보인다.
5) 캐릭터 학습 데이터 개선 후 변화
캐릭터가 조금 밋밋한 것 같아서 표현을 좀 과장되게 학습데이터를 만들고 재학습을 시켰는데 전보다는 많이 나아진 것을 볼 수 있었다. 의료상담에 대한 데이터셋도 다시 확인하고 멀티턴에 대한 성능을 확인해 볼까 한다.
======================================================================
# [기본강도 테스트]
======================================================================
사용자 > /weights 1.0 1.0
[Adapter 생성] cat | Character=1.00, Medical=1.00 | Rank=16
[설정] Mode=cat | Character=1.00 | Medical=1.00 | 대화 0턴
가중치 변경 시 add_weighted_adapter()로 새 Adapter를 생성합니다.
사용자 > /compare 며칠째 기침이 계속되고 밤에 더 심해집니다. 열은 없는데 어떤 점을 확인해야 하나요?
======================================================================
[LoRA 추론 비교]
======================================================================
질문: 며칠째 기침이 계속되고 밤에 더 심해집니다. 열은 없는데 어떤 점을 확인해야 하나요?
Character Weight: 1.00
Medical Weight: 1.00
----------------------------------------------------------------------
[base] Gemma 3 Base Model
----------------------------------------------------------------------
며칠째 기침이 계속되고 밤에 더 심해지는 증상은 다양한 원인으로 발생할 수 있습니다. 열은 없지만 다른 증상들과 함께 나타난다면 다음과 같은 사항들을 확인하고 병원을 방문하여 정확한 진단을 받는 것이 중요합니다.
**1. 기침의 종류와 특징:**
* **건성기침 vs 습성기침:** 건성기침은 목이 간지럽거나 자극될 때 주로 나타나고, 습성기침은 가래가 동반되는 경우가 많습니다.
* **기침의 강도 및 빈도:** 기침이 얼마나 자주, 얼마나 심하게 나타나는지 관찰합니다.
* **기침 시 동반 증상:** 가래 색깔(맑음, 노란색, 녹색, 갈색 등), 콧물, 인후통, 어지럼증, 호흡곤란 등의 증상이 있는지 확인합니다.
[character] Character LoRA
----------------------------------------------------------------------
며칠째 계속되면 감기인지 다른 원인이 있는지 확인해 봐야제. 증상이 심해지면 진료를 받아야제.
[medical] Medical LoRA
----------------------------------------------------------------------
기침이 계속되고 밤에 더 심해진다면, 감기나 인플루엔자 같은 바이러스 감염일 수 있습니다. 그러나 다른 원인도 있을 수 있으므로, 의사의 진단을 받아보는 것이 좋습니다.
[both] Multi-Adapter 동시 활성화
----------------------------------------------------------------------
기침이 계속되면 감기나 바이러스 감염일 수 있제. 24시간 동안 증상이 심해지면 응급실을 찾아야 한다.
[cat] Weighted Adapter (cat)
----------------------------------------------------------------------
기침이 계속되면 감기나 바이러스 감염일 수 있제. 24시간 동안 증상이 심해지면 응급실을 찾아야 한다.
[Adapter 생성] linear | Character=1.00, Medical=1.00 | Rank=8
[linear] Weighted Adapter (linear)
----------------------------------------------------------------------
마, 밤에 심해진다면 감기와 인플루엔자도 가능제. 다음 날까지 안심하고 쉬는 시간을 챙겨야제.
======================================================================
사용자 > /reset
대화 이력을 초기화했습니다.
======================================================================
# 캐릭터 강화 테스트
======================================================================
사용자 > /weight 1.5 0.2
[Adapter 생성] cat | Character=1.00, Medical=1.00 | Rank=16
AI [cat; C=1.00, M=1.00] > Okay, that's a good starting point. You can adjust the weight and frequency to find what works best for you.
사용자 > /reset
대화 이력을 초기화했습니다.
사용자 > /weights 1.5 0.2
[Adapter 생성] cat | Character=1.50, Medical=0.20 | Rank=16
[설정] Mode=cat | Character=1.50 | Medical=0.20 | 대화 0턴
가중치 변경 시 add_weighted_adapter()로 새 Adapter를 생성합니다.
사용자 > /compare 며칠째 기침이 계속되고 밤에 더 심해집니다. 열은 없는데 어떤 점을 확인해야 하나요?
======================================================================
[LoRA 추론 비교]
======================================================================
질문: 며칠째 기침이 계속되고 밤에 더 심해집니다. 열은 없는데 어떤 점을 확인해야 하나요?
Character Weight: 1.50
Medical Weight: 0.20
----------------------------------------------------------------------
[base] Gemma 3 Base Model
----------------------------------------------------------------------
며칠째 기침이 계속되고 밤에 더 심해지는 증상은 다양한 원인으로 발생할 수 있습니다. 열은 없지만 다른 증상들과 함께 나타난다면 다음과 같은 사항들을 확인하고 병원을 방문하여 정확한 진단을 받는 것이 중요합니다.
**1. 기침의 종류와 특징:**
* **건성기침 vs 습성기침:** 건성기침은 목이 간지럽거나 자극될 때 주로 나타나고, 습성기침은 가래가 동반되는 경우가 많습니다.
* **기침의 강도 및 빈도:** 기침이 얼마나 자주, 얼마나 심하게 나타나는지 관찰합니다.
* **기침 시 동반 증상:** 가래 색깔(맑음, 노란색, 녹색, 갈색 등), 콧물, 인후통, 어지럼증, 호흡곤란 등의 증상이 있는지 확인합니다.
[character] Character LoRA
----------------------------------------------------------------------
며칠째 계속되면 감기인지 다른 원인이 있는지 확인해 봐야제. 증상이 심해지면 진료를 받아야제.
[medical] Medical LoRA
----------------------------------------------------------------------
기침이 계속되고 밤에 더 심해진다면, 감기나 인플루엔자 같은 바이러스 감염일 수 있습니다. 그러나 다른 원인도 있을 수 있으므로, 의사의 진단을 받아보는 것이 좋습니다.
[both] Multi-Adapter 동시 활성화
----------------------------------------------------------------------
마, 며칠째면 감기인지 오래부터인지 단디 구분해 봐야제. 고막이 아프거나 숨이 차면 진료를 받아야제.
[cat] Weighted Adapter (cat)
----------------------------------------------------------------------
마, 며칠째면 감기인지 오래서야 알제. 고르게 쉬지 말아야제. 증상이 심하면 진료를 받아 보라 카이.
[Adapter 생성] linear | Character=1.50, Medical=0.20 | Rank=8
[linear] Weighted Adapter (linear)
----------------------------------------------------------------------
마, 며칠째 같은지부터 단디 짚어 봐야제. 고생하면 진료를 받아야제. 생활과 증상에서 이상한 부분을 알려드려야제. 알겠제?
======================================================================
사용자 > /reset
대화 이력을 초기화했습니다.
======================================================================
# 모두 강화 테스트
======================================================================
사용자 > /weights 1.5 1.5
[Adapter 생성] cat | Character=1.50, Medical=1.50 | Rank=16
[설정] Mode=cat | Character=1.50 | Medical=1.50 | 대화 0턴
가중치 변경 시 add_weighted_adapter()로 새 Adapter를 생성합니다.
사용자 > /compare 며칠째 기침이 계속되고 밤에 더 심해집니다. 열은 없는데 어떤 점을 확인해야 하나요?
======================================================================
[LoRA 추론 비교]
======================================================================
질문: 며칠째 기침이 계속되고 밤에 더 심해집니다. 열은 없는데 어떤 점을 확인해야 하나요?
Character Weight: 1.50
Medical Weight: 1.50
----------------------------------------------------------------------
[base] Gemma 3 Base Model
----------------------------------------------------------------------
며칠째 기침이 계속되고 밤에 더 심해지는 증상은 다양한 원인으로 발생할 수 있습니다. 열은 없지만 다른 증상들과 함께 나타난다면 다음과 같은 사항들을 확인하고 병원을 방문하여 정확한 진단을 받는 것이 중요합니다.
**1. 기침의 종류와 특징:**
* **건성기침 vs 습성기침:** 건성기침은 목이 간지럽거나 자극될 때 주로 나타나고, 습성기침은 가래가 동반되는 경우가 많습니다.
* **기침의 강도 및 빈도:** 기침이 얼마나 자주, 얼마나 심하게 나타나는지 관찰합니다.
* **기침 시 동반 증상:** 가래 색깔(맑음, 노란색, 녹색, 갈색 등), 콧물, 인후통, 어지럼증, 호흡곤란 등의 증상이 있는지 확인합니다.
[character] Character LoRA
----------------------------------------------------------------------
며칠째 계속되면 감기인지 다른 원인이 있는지 확인해 봐야제. 증상이 심해지면 진료를 받아야제.
[medical] Medical LoRA
----------------------------------------------------------------------
기침이 계속되고 밤에 더 심해진다면, 감기나 인플루엔자 같은 바이러스 감염일 수 있습니다. 그러나 다른 원인도 있을 수 있으므로, 의사의 진단을 받아보는 것이 좋습니다.
[both] Multi-Adapter 동시 활성화
----------------------------------------------------------------------
밤에 심해진다면 감기일 수도 있제. 증상이 계속되면 진료를 받아야제.
[cat] Weighted Adapter (cat)
----------------------------------------------------------------------
밤에 심해지면 감기인지는 알겠제. 증상이 계속되면 진료를 받아야 안 되겠나?
[Adapter 생성] linear | Character=1.50, Medical=1.50 | Rank=8
[linear] Weighted Adapter (linear)
----------------------------------------------------------------------
, cough and fever are common symptoms. Check the temperature and oxygen levels to see if it's severe enough for a hospital visit. Okay?
======================================================================
비교 완료
※ 모든 모델에 동일한 질문과 대화 문맥 적용
※ /compare 결과는 대화 이력에 추가되지 않습니다.
======================================================================