무엇인가
EAGER(Enhancing Generative Event Extraction via Reinforcement Learning with Verifiable Rewards)는 독일 인공지능연구소(DFKI)와 올덴부르크대학이 2026년 9월 24일 arXiv에 올린 논문입니다. 사건 추출(문장에서 트리거·사건 유형·인자·역할을 정해진 스키마에 맞춰 뽑는 일)에 수학·코드에서 쓰던 검증 가능한 보상 강화학습(RLVR)을 붙였습니다.
출발점은 그림 하나입니다. 논문 그림 1에서 o1·GPT-4o·GPT-5.4-mini·GPT-5.4에게 일곱 가지 사건 추출 시험을 퓨샷으로 풀게 하면 평균 F1이 10점 안팎입니다(GPT-5.4 9.47, GPT-4o 9.20). 뜻은 알아도 남이 정한 표에, 남이 정한 글자 경계로, 남이 정한 역할 이름을 쓰지 못하기 때문입니다. EAGER는 2023년 정보 추출 전용 모델 GoLLIE-7B(16.35점)에 세 가지를 얹어 평균 30.79점을 보고했습니다. 스키마를 파이썬 dataclass로 주고 독스트링에 LLM이 생성한 주석 지침을 넣어 출력을 자동 채점할 수 있게 만들고, 채점을 여섯 갈래로 쪼개고(RDN으로 합산), 한 문장에 답 네 개를 뽑을 때 답마다 다른 오답 스키마를 줘서(SCAE) 네 답이 같은 점수를 받아 학습이 멈추는 일을 줄입니다.
어떻게 동작하나
지시문 + 정답 스키마 + 오답 스키마 K=10 + 문장
답마다 오답 묶음을 새로 뽑음 (SCAE)
보상별 그룹 표준화 후 합산 (RDN)
Clip-Higher, 토큰 단위 손실, 동적 샘플링, KL 없음
GRPO 계열은 비평가 네트워크 없이 같은 문제의 답 G개 안에서 점수를 표준화해 어드밴티지를 만듭니다.
네 답이 모두 같은 점수면 분모가 0이 되어 그 문제에서는 아무것도 배우지 못합니다. 이 비율이 어드밴티지 붕괴율(ACR), 즉 그룹 점수 표준편차가 10−6 미만인 그룹의 비율입니다. 저자들은 같은 그룹의 답들이 같은 오답 보기를 보고 쓰기 때문에 구조화 출력이 쉽게 획일화된다고 진단하고, 답마다 오답 묶음을 따로 뽑는 SCAE로 분산을 키웁니다(알고리즘 1에서 바뀐 곳은 두 줄).
| 보상 | 식 (논문 부록 F) | 겨냥하는 실수 |
|---|---|---|
| 형식 | 파이썬으로 파싱되면 1, 아니면 0 | 구조 붕괴 |
| 정확도 | TI·TC·AI·AC·AI+·AC+ 여섯 F1의 평균 | 전반적 오답 |
| 근거 | (트리거 지지율 + 인자 지지율) / 2, 원문에 글자 그대로 있나 | 환각 |
| 과잉 억제 | max(0, 1 − 초과 개수 / 정답 개수) | 남발 |
| 포괄 | ½(min(1, 낸 사건/정답 사건) + min(1, 낸 인자/정답 인자)) | 빠뜨리기 |
| 경계 | 자카드 유사도 − 넓힌 만큼 벌점, 넓힌 예측이 없으면 0 | 경계 부풀리기 |
과잉 억제와 포괄은 '개수'만 보는 짝입니다. 내용은 정확도 보상이 맡습니다. 학습은 일곱 데이터셋(WikiEvents·PHEE·CASIE·GENIA2011·GENIA2013·MLEE·M2E2)의 학습 세트를 섞어 GoLLIE-7B에 QLoRA(랭크 8, α 16)로 했고, 그룹 G=4, 온도 0.6, top-p 0.9, H100 4장에서 1에폭 약 4시간입니다. SFT 단계 없이 바로 강화학습을 합니다(논문에서 SFT는 16.35→16.51로 거의 효과가 없었습니다). 학습 때는 '정답 + 오답 10개', 시험 때는 데이터셋의 모든 스키마를 한꺼번에 줍니다.
논문이 보고한 절제 결과는 이렇습니다(평균 30.79 기준 하락폭).
막대 길이는 가장 큰 낙폭(8.25)을 100%로 둔 비율입니다. 여섯 보상이 첫 번째 기여로 소개되지만 숫자로 보면 큰 두 기둥은 SCAE와 지침입니다.
논문 그림 5의 오류 분석에서는 보상을 더하면 남는 인자(−2,472)·없는 역할(−2,555)·역할 혼동(−1,693)이 크게 줄고, 대신 빠진 인자(+956)가 늘었습니다. 덜 지어내고 조금 더 빠뜨리는 모델이 됩니다.
빠른 시작
저자 코드는 공개되지 않았습니다. 대신 RL을 붙이기 전에 내 데이터에서 그룹 신호가 살아 있는지는 바로 잴 수 있습니다. 한 문장에 답을 네 개 뽑아 보상을 매긴 뒤 아래처럼 ACR과 RDN 어드밴티지를 계산합니다(논문 식을 그대로 옮긴 최소 구현).
import numpy as np
def acr(groups, tau=1e-6):
"""groups: 그룹마다 답 G개의 보상 리스트. 점수가 모두 같은 그룹의 비율"""
return float(np.mean([np.std(g) < tau for g in groups]))
def rdn_advantage(R, eps=1e-6):
"""R: (G, M) 배열 — 답 G개 × 보상 M개. 보상마다 그룹 안에서 표준화한 뒤 합산"""
R = np.asarray(R, dtype=float)
z = (R - R.mean(axis=0)) / (R.std(axis=0) + eps)
return z.sum(axis=1)
def over_reward(n_pred, n_gold):
return max(0.0, 1 - max(0, n_pred - n_gold) / n_gold)
def coverage_reward(ev_pred, ev_gold, arg_pred, arg_gold):
return 0.5 * (min(1, ev_pred / ev_gold) + min(1, arg_pred / arg_gold))
# 논문 3장 예시: 보상 0.8·0.3·0.6·0.5 → 어드밴티지 약 +1.39, −1.39, +0.28, −0.28
print(rdn_advantage([[0.8], [0.3], [0.6], [0.5]]))
이진 보상(전부 맞으면 1)으로 ACR이 1에 가깝다면 연속 보상으로 바꾸는 것이 먼저입니다. 경계 보상은 아래 '한계와 주의'의 부호 문제부터 단위 시험합니다.
코어닷투데이 실측
2026년 10~11월, 강화학습 자체가 아니라 RL이 매 단계 하는 일(한 문장에 답 네 개를 뽑아 채점하고 그룹 안에서 비교)을 한국어로 재현했습니다. 가상 인물·회사로 만든 한국어 문장 40개(뉴스·공시·판결·약물 부작용·재난·보안 사고, 정답 사건 48개·인자 138개를 직접 주석), 사건 유형 16개를 dataclass + 한국어 지침 독스트링으로 주고, 로컬 qwen3.5:4b(학습 없음)를 G=4, 오답 스키마 K=4, 온도 0.6, top-p 0.9로 돌렸습니다. 조건은 고정(네 답이 같은 오답 묶음)·SCAE(답마다 다른 오답 묶음)·추론(스키마 16개 전부, 온도 0, 1회)이고 모두 360번 생성했습니다. 여섯 보상은 부록 F의 식을 글자 그대로 구현했습니다.
| ACR (그룹 40개) | 고정 | SCAE |
|---|---|---|
| 이진 보상 | 97.5% | 100% |
| 정확도 보상 하나 | 22.5% | 25.0% |
| 여섯 보상 RDN | 20.0% | 25.0% |
| 네 답 중 서로 다른 출력 수 | 2.8개 | 3.1개 |
| 그룹 안 정확도 표준편차 | 0.102 | 0.105 |
- 이진 보상은 쓸 수 없었습니다. 정답을 글자 그대로 맞힌 출력이 320개 중 1개뿐이라 거의 모든 그룹이 붕괴했습니다. 연속 보상으로 바꾸면 20%대로 내려와 논문 그림 3의 학습 중 ACR(0.25 안팎)과 비슷했습니다.
- SCAE는 학습 전 모델에서 붕괴를 줄이지 못했습니다. 출력은 조금 다양해졌지만(2.8→3.1개) 점수 분산은 그대로였습니다. 그룹별로 맞대면 둘 다 붕괴 5개, 고정만 4개, SCAE만 5개로 동전 던지기에 가깝습니다. 오류 대부분이 오답 보기와 무관했기 때문입니다. 파싱 실패가 22%(79/360)였고 그중 49건은 클래스 대신 딕셔너리를 썼습니다.
- 붕괴는 획일화보다 '다른 답이 같은 점수'에서 왔습니다. 고정 조건 붕괴 9개 중 네 답이 글자까지 같은 경우는 2개, 네 답 모두 정확도 0점이 4개(그중 3개는 모두 파싱 실패)였습니다.
- 한국어 경계 문제는 조사보다 숫자 띄어쓰기였습니다. 인자 677개 중 정답과 글자까지 같은 것 416개(61.4%), 조사가 붙어 틀린 것 4개(0.6%, 지시문 한 줄로 거의 사라짐), 숫자·단위 사이에 공백을 넣은 것 115개(17.0%)('2조 원'→'2 조 원', '징역 4년'→'징역 4 년'). 근거 보상은 이를 환각처럼 깎습니다. 원문에 아예 없는 인자는 11개(1.6%)였습니다.
- 경계 보상 뒤집힘이 실제로 나왔습니다. 리콜 문장 그룹에서 제품 칸에 '배터리 과열 우려로 전기차'를 통째로 넣은 답(정확도 0.56, 꼴찌)만 경계 보상 0.50을 받고 정확도 1등(0.83)은 0이었습니다. 경계 보상에 차이가 있던 그룹 5개 중 2개에서 1등이 엇갈렸습니다.
- 스키마를 16개 다 주면 작은 모델은 목록을 베꼈습니다. 정답 사건 48개에 사건 282개를 냈고 그중 263개가
체포()같은 빈 인스턴스였습니다. 빈 인스턴스는 오답 4개 조건에서 출력당 0.11~0.18개였는데 전체 스키마에서는 7.74개로 40배 넘게 늘었습니다. 여섯 F1 평균은 엄격 17.2, 빈 인스턴스를 빼도 20.9이고, AI·AC 32.1이 트리거에 붙은 AI+·AC+에서는 9.6으로 떨어졌습니다.
언제 쓰고, 언제 피하나
| 상황 | 판단 |
|---|---|
| 글자 경계까지 주석한 정답이 대량으로 있다 (학술 벤치마크, 공시 구조화 필드 ↔ 본문 정렬) | EAGER식 RLVR이 가장 빛나는 곳. 연속 보상 + 그룹 다양성 장치 |
| 스키마가 고정되고 7B급 모델을 직접 학습할 GPU가 있다 | 지침부터 붙이고(빼면 −8점), 형식 보상으로 입장권을 통과시킨 뒤 의미 보상 |
| 정답 주석이 없다 | RL보다 주석 지침과 소량의 정답 세트를 먼저 만든다 |
| 학습 없이 오늘 써야 한다 | EAGER 대상 아님. 학습 없는 추출기나 LLM 프롬프트에 지침·형식 검사·표기 정규화를 붙인다 |
한계와 주의
- 본문 표 2와 부록 표 12~14의 숫자가 다릅니다. ADELIE·GoLLIE는 같은데 EventRL은 일곱 데이터셋 모두, EAGER도 조금씩 다릅니다. 부록으로 다시 계산하면 EventRL 27.40, EAGER 30.04로 격차가 +5.15가 아니라 +2.64이고, CASIE·GENIA11에서는 EventRL이 앞섭니다. 어느 표가 맞는지는 논문만으로 알 수 없습니다.
- SCAE가 없으면 기존 방법보다 낮습니다. SCAE를 빼면 22.54로 EventRL(23.54)·ADELIE(25.64) 아래이고, SCAE 없이는 정확도+형식 보상 둘(23.56)이 여섯 보상(22.54)보다 높습니다. SCAE 효과가 분산 확보인지, 오답 스키마를 G배 더 보여 주는 데이터 증강인지 가르는 실험은 없습니다. 그림 3의 두 ACR 곡선도 약 3,800단계쯤엔 거의 붙어, "학습 내내 훨씬 낮다"는 본문 서술보다 '초반에 확실히 낮다'가 정확합니다.
- 경계 보상을 식 그대로 구현하면 방향이 뒤집힙니다. "넓힌 예측이 없으면 0"이라 완벽한 답은 0, 조금 넓게 자른 답은 0.9 안팎을 받습니다. RDN이 그룹 안에서 표준화하므로 넓게 자른 답이 양의 어드밴티지를 받습니다. 벌점으로 쓰는 것이 원래 의도였을 수 있지만 코드가 없어 확인할 수 없습니다.
- 코드가 없습니다. 논문이 적은
github.com/OA256864/EE_RL은 2026년 10월 31일 확인 기준 존재하지 않습니다(GitHub API 404). - 설명과 설정의 빈칸. 초록은 '희소한 이진 보상'을 말하지만 여섯 보상 중 이진은 형식 하나뿐입니다. 학습 프롬프트에서 정답 스키마의 순서를 섞었는지도 적혀 있지 않으니 재현할 때는 반드시 섞습니다.
- 비교 조건이 좁습니다. 2023년 Code-LLaMA 기반 GoLLIE-7B, 영어 데이터셋 일곱 개, 반복 실행 없음입니다. GPT-5.4가 PHEE에서 1.42점(mini 18.86점)인 것은 프롬프트·파싱 차이일 가능성이 있습니다. '검증기'는 결국 사람이 만든 주석(일곱 데이터셋 4만 1천 건 이상)이라, 정답 주석이 이미 대량으로 있는 곳에서 가장 빛납니다.
- 위 실측은 학습이 아닙니다. 문장 40개, 정답은 한 사람이 붙였고, 모델·K·언어가 논문과 다릅니다. EAGER 성능을 재현한 것이 아니라 학습 첫 단계의 신호를 들여다본 것입니다.




