LLM-NER: LoRA+ Fine-Tuning으로 Named Entity Recognition 성능 향상
LLM-NER: Advancing Named Entity Recognition with LoRA+ Fine-Tuned Large Language Models
TL;DR Highlight
LoRA+는 LLM 파인튜닝을 통해 NER 성능을 향상시킨다.
Who Should Read
텍스트에서 인물명, 기관명, 날짜 등을 자동 추출하는 NER 파이프라인을 구축 중인 NLP 개발자. 특히 적은 리소스로 LLM을 파인튜닝해 정보 추출 성능을 높이려는 ML 엔지니어.
Core Mechanics
- LoRA+(LoRA의 개선 버전, 학습률을 레이어별로 다르게 설정해 수렴 속도를 높인 기법)를 NER 태스크에 적용해 기존 LoRA 대비 더 나은 파인튜닝 효율을 달성
- LLM을 NER용으로 파인튜닝할 때 전통적인 BERT 계열 모델을 능가하는 성능을 목표로 설계
- NER 특화 instruction 포맷으로 학습 데이터를 구성해 LLM이 엔티티 타입을 정확히 구분하도록 유도
- 파라미터 효율적 파인튜닝(PEFT) 방식이라 전체 모델 가중치를 업데이트하지 않아도 되므로 GPU 메모리 부담이 적음
- CoNLL-2003 등 표준 NER 벤치마크 데이터셋으로 검증
Evidence
- 논문 제목 기준 LoRA+ 파인튜닝이 기존 NER 베이스라인 대비 F1 스코어 개선을 주장 (구체적 수치는 본문 참조 필요)
- PEFT 방식 적용으로 전체 파라미터 대비 1~5% 수준의 파라미터만 학습해 메모리 효율 확보
- CoNLL-2003 등 표준 벤치마크에서 BERT 계열 모델과 비교 실험 수행
How to Apply
- CoNLL 포맷의 NER 데이터셋을 instruction-tuning 형식(예: '다음 문장에서 인물명, 기관명, 장소명을 추출하세요')으로 변환한 뒤 LoRA+ 설정으로 파인튜닝하면 된다.
- Hugging Face PEFT 라이브러리에서 LoRAConfig의 learning_rate를 레이어별로 다르게 설정하는 LoRA+ 방식으로 바꾸면 기존 LoRA 파인튜닝 코드를 거의 그대로 재사용할 수 있다.
- 도메인 특화 NER(의료, 법률, 금융)이 필요한 경우, 도메인 말뭉치로 같은 방식으로 파인튜닝하면 범용 모델보다 높은 정밀도를 기대할 수 있다.
Code Example
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "meta-llama/Llama-2-7b-hf" # 또는 다른 LLM
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, load_in_8bit=True, device_map="auto")
# LoRA+ 스타일: lora_alpha를 높여 학습률 보정 효과
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# 출력 예: trainable params: 4,194,304 || all params: 6,742,609,920 || trainable%: 0.062
# NER용 instruction 포맷 예시
ner_prompt = """아래 문장에서 개체명을 추출하세요. 형식: [TYPE: entity]
문장: Apple의 CEO Tim Cook이 서울에서 발표를 진행했다.
답변:"""
# 기대 출력: [ORG: Apple] [PER: Tim Cook] [LOC: 서울]Terminology
관련 논문
Neural Particle Automata: 자기조직화 파티클 시스템을 학습하는 신경망 모델
고정된 격자 대신 움직이는 파티클 위에서 동작하는 Neural Cellular Automata의 확장 버전으로, 형태 생성·포인트 클라우드 분류·텍스처 합성 등 다양한 작업에서 자기조직화 동작을 학습할 수 있다.
PyTorch Training Loop 완전 해부: 각 줄이 하는 일과 순서를 바꾸면 생기는 문제
PyTorch 학습 루프의 각 코드 줄이 왜 그 위치에 있어야 하는지, 순서를 바꾸거나 빠뜨렸을 때 어떤 문제가 생기는지를 단계별로 설명한 심층 가이드다.
좋은 Verifier도 망가질 수 있다: Self-Improving VLM이 새로운 태스크에서 오히려 퇴보하는 현상
VLM 자가학습 루프에서 verifier가 특정 태스크에 맞지 않으면 학습할수록 오히려 성능이 떨어지는데, DPO 손실값은 멀쩡히 내려가서 눈치채기도 어렵다.
Self-Distillation에서 Feedback Alignment의 역할
LLM이 스스로를 가르칠 때, 피드백을 모델의 추론 흐름에 단계별로 맞추면 GRPO보다 16점 이상 수학 추론 성능이 오른다.
작고 수정 가능한 CUDA 기반 Language Model 직접 구현체
CUDA로 작성된 GPT(Generative Pretrained Transformer) 미니멀 구현체로, 텍스트뿐 아니라 모든 바이트 스트림을 학습할 수 있어 LLM 내부 구조를 직접 뜯어보고 싶은 개발자에게 유용하다.
Stanford CS336: Language Modeling from Scratch - LLM을 처음부터 직접 만드는 강의
Stanford에서 운영하는 LLM 전 과정 구현 강의로, 토크나이저부터 데이터 수집, 트랜스포머 구현, 분산 학습, RL 기반 정렬까지 직접 코딩하며 배운다. 이론이 아닌 구현 중심이라 실제로 LLM이 어떻게 작동하는지 깊이 이해하고 싶은 개발자에게 가장 체계적인 커리큘럼 중 하나다.