bge-reranker-v2-m3-ko-public-admin
한국 지자체 행정 문서·행정법 도메인 검색 결과 재정렬(reranking)에 특화되도록 dragonkue/bge-reranker-v2-m3-ko 를 파인튜닝한 한국어 리랭커(Cross-Encoder) 모델입니다.
- 베이스 모델:
dragonkue/bge-reranker-v2-m3-ko(Apache-2.0) →BAAI/bge-reranker-v2-m3계열 - 모델 종류: Cross-Encoder (num_labels=1, 관련도 점수 출력)
- 언어: 한국어
- 용도: 임베딩 리트리버가 뽑은 후보 문서를 질의와의 관련도로 재정렬
라이선스
본 모델은 베이스 모델의 라이선스를 승계하여 Apache-2.0 으로 배포합니다. 학습에 사용된 AI Hub 데이터의 이용조건(아래 "학습 데이터 및 출처표기" 참고)도 함께 준수해야 합니다.
학습 데이터 및 출처표기
본 모델은 과학기술정보통신부의 재원으로 한국지능정보사회진흥원(NIA) 의 지원을 받아 구축된 아래 AI Hub 개방데이터를 활용하여 학습되었습니다.
- 016. 행정 문서 대상 기계독해 데이터
- 03. 행정법 LLM 사전학습 및 Instruction Tuning 데이터 (개방데이터)
본 학습에 활용된 데이터는 AI 허브(aihub.or.kr)에서 다운로드할 수 있습니다. 이 데이터의 저작권 및 이용조건은 한국지능정보사회진흥원 및 각 수행기관에 있으며, 원본 데이터 자체의 재배포는 금지됩니다. 본 저장소는 학습된 모델 가중치만 배포하며 원본 데이터는 포함하지 않습니다.
학습 쌍 구성 (총 약 746,821개, 이 중 5%를 평가용으로 분리):
- 정답(label=1.0): (질문, 정답 지문) 쌍
- 오답(label=0.0):
- 행정문서 데이터 — 같은 문서 내 다른 지문을 hard negative 로 사용
- 행정법 데이터 — 무작위 지문을 negative 로 채움
참고: 행정법 데이터의 negative는 무작위 샘플링으로 구성되어 hard negative 대비 난이도가 낮습니다. 재현·개선 시 이 점을 고려하세요.
사용법
from sentence_transformers import CrossEncoder
model = CrossEncoder("gimhae-geunamja/bge-reranker-v2-m3-ko-public-admin", max_length=1024)
query = "출산 지원금 신청은 어디서 하나요?"
candidates = [
"출산 지원금은 관할 읍·면·동 행정복지센터에서 신청할 수 있습니다.",
"주민등록등본은 정부24에서 온라인 발급이 가능합니다.",
]
pairs = [[query, c] for c in candidates]
scores = model.predict(pairs)
print(scores) # 관련도 점수가 높은 순으로 재정렬
학습 상세
| 항목 | 값 |
|---|---|
| 손실 함수 | BinaryCrossEntropyLoss |
| num_labels | 1 |
| Epoch | 2 |
| max_length | 1024 |
| 물리 배치 / GPU | 8 |
| Gradient Accumulation | 4 |
| 글로벌 배치 | 64 (8 × 2 GPU × 4) |
| Learning rate | 2e-5 |
| Precision | bf16 |
| 하드웨어 | RTX 5090 × 2 (DDP) |
제한 사항
- 한국 행정/법령 도메인에 특화되어 있어 일반 도메인·타 언어 성능은 베이스 모델과 다를 수 있습니다.
- 행정법 데이터의 negative가 무작위로 구성되어, 해당 분포에서는 리랭킹 변별력이 상대적으로 약할 수 있습니다.
인용 및 출처
- 베이스 모델:
dragonkue/bge-reranker-v2-m3-ko,BAAI/bge-reranker-v2-m3 - 학습 데이터: 「행정 문서 대상 기계독해 데이터」, 「행정법 LLM 사전학습 및 Instruction Tuning 데이터」, AI 허브(aihub.or.kr), 한국지능정보사회진흥원
- Sentence-Transformers (Reimers & Gurevych, 2019, arXiv:1908.10084)
실측 특성 (2026-08 자체 평가)
지자체 실운영 환경의 비공개 평가셋 2종(완성 의문문형 97건 / 실사용 키워드형 71건, 정답 문서·페이지 라벨)에서 하이브리드 검색 후보 풀 재정렬 성능을 측정한 결과입니다. 수치는 해당 코퍼스·후보 구성에 종속적이므로 절대값보다 경향을 참고하십시오.
| 질의 스타일 | 베이스 R@1 | 본 모델 R@1 |
|---|---|---|
| 완성 의문문 ("~은 어떻게 되나요?") | 0.814 | 0.804 |
| 짧은 키워드 (실사용형, 조사·어미 없음) | 0.310 | 0.380 |
- 파인튜닝 이득은 주로 키워드형 질의(+7.0%p)에서 나타납니다. 의문문형은 베이스와 동급(차이는 표본 노이즈 범위)입니다.
- 정답이 후보 풀에 있을 때 1위로 올리는 전환율: 의문문 ~81% vs 키워드 ~42% — 짧은 키워드 질의에서 변별력이 크게 낮아지는 특성은 이 계열(bge-reranker-v2-m3) 공통이며, 본 모델도 완화했을 뿐 해소하지 못했습니다.
알려진 한계
- 짧은 키워드 질의: 완성 문장 대비 R@1이 크게 낮습니다. 질의를 의문문 템플릿으로 감싸는 우회("~은 무엇인가요?" 부착)는 실측상 효과가 없었습니다 — 원인이 문형이 아니라 질의의 정보량 부족이기 때문입니다.
- 주제 유사·조건 불일치 과신: 주제만 겹치면 조건(적용 대상·자격 등)이 달라도 매우 높은 점수를 줄 수 있습니다. sigmoid 점수는 상위권에서 1.0 근처로 포화하므로, 순위 판별에는 raw logit 사용을 권장합니다(
activation_fn=torch.nn.Identity()). - max_length 1024: 파인튜닝이 1,024 토큰 이하만 학습했으므로 그 초과 길이의 품질은 미검증입니다.
재파인튜닝 시 참고 — 실패 사례 공유 (negative results)
동일 베이스·동일 데이터에서 아래 변형들을 실측했으나 모두 원 레시피(의문문 질의 + 랜덤 네거티브 1:1, 2 epochs)보다 나빴습니다. "내용이 서로 겹치는 문서가 많은 코퍼스 + 정보량이 적은 키워드 질의" 환경 기준이며, 같은 시도를 검토하는 분들의 GPU 시간을 아끼는 데 보탬이 되길 바라며 공유합니다.
| 변형 | 키워드형 R@1 변화 (원 레시피 대비) |
|---|---|
| 하드 네거티브 (임베딩 마이닝 top-k, 무필터) | −11.2%p |
| 하드 네거티브 (공식 레시피: 마진 필터 + range_min + 난이도 혼합 + pos_weight) | −12.6%p |
| 학습 질의 40%를 키워드형으로 교체하는 증강 | −4.2%p |
- 하드 네거티브 학습은 "질의와 매우 비슷한 문서를 의심"하도록 가르치는데, 정답 자체가 고유사도인 이런 환경에서는 방향 자체가 역효과였습니다. 필터 품질을 공식 권장 수준으로 높여도 마찬가지였습니다.
- 키워드 교체 증강은 조사·의문사를 벗기는 과정에서 서로 다른 질문이 비슷한 문자열로 붕괴해 "같은 입력, 다른 정답"의 모순 신호를 만들며 손해였습니다.