[English](https://huggingface.co/KRX-Data/WON-Reasoning/blob/main/README.md) | **한국어**
# ₩ON: 한국 금융을 위한 LLM
## 소개
₩ON은 한국 금융 분야의 작업에 특화된 고급 대규모 언어 모델(LLM)입니다.
₩ON은 금융 분야의 AI 애플리케이션에서 신뢰성과 투명성을 높이기 위해 설계되었습니다.
₩ON 개발의 핵심 목적은 연구의 개방성을 촉진하고, 엄격한 금융 추론 능력을 평가할 수 있는 기준을 마련하며, 한국 금융 특화 언어 모델 훈련에 있어 최적의 실천 사례를 확립하는 것입니다.
이 모델은 특히 2단계 구조화된 추론 방식을 도입하여 자체적으로 오류를 수정하는 추론 과정을 거친 뒤 결론적 요약을 제공함으로써, 금융 의사결정 프로세스의 명확성과 정확성을 높이는 데 중점을 두었습니다.
## KRX 금융 언어 모델 경진대회
**대회 개요**
KRX 금융 언어 모델 경진대회는 한국 금융 분야에서 대형 언어 모델(LLM)의 성능을 평가하기 위해 처음으로 열린 리더보드 형식의 대회였습니다.
두 달에 걸쳐 예선과 본선으로 진행되었으며, 총 233개의 팀이 참가하여 1,100개 이상의 모델을 제출하였습니다.
예선 라운드에서는 금융시장, 재무회계, 국내 기업 분석, 금융 에이전트 작업, 주가 예측 등 총 다섯 가지 분야의 평가를 수행하였으며, 본선 라운드에서는 재무회계, 금융시장, 금융 질의응답(Open-Ended Finance QA) 분야에 중점을 두었습니다.
**벤치마크 설명**
대회에서 사용된 벤치마크는 금융 분야 전반에 걸쳐 신중하게 선정된 약 5,500개의 객관식 및 지시문 기반의 질의응답 문제로 구성되었습니다:
- **재무회계**: 대학 수준의 회계 및 금융 원리를 평가하는 객관식 문제로 구성되었습니다.
- **금융시장**: 금융 규제 및 한국 시장 체계에 대한 이해를 평가하는 시험을 기반으로 하였습니다.
- **주가 예측**: 최근 주가 데이터 및 계산된 지표를 활용한 이진 예측 과제를 포함하였습니다.
- **국내 기업 분석**: 한국 기업의 공시 데이터를 바탕으로 생성된 KRX-Bench 데이터를 사용하였습니다.
- **금융 에이전트**: 금융 데이터 조작 및 코딩 작업 수행 능력을 평가하였습니다.
- **금융 질의응답(Open-Ended FinQA)**: 대학원 수준의 계량 경제학 및 법률적 추론을 포함한 복합적 과제로 구성되었습니다.
**대회 통계**
기술 및 금융 분야 등 기업 참가자가 전체의 52.5%를 차지했으며, 그 외에는 학계 관련 참가자가 대부분을 이루었습니다.
이는 다양한 이해관계자의 한국 금융 자연어 처리에 대한 폭넓은 관심을 보여줍니다.
참가자 분포. 파란색 음영으로 이루어진 부분이 기업 참가자를 의미합니다.
**대회 결과 분석**
예선 라운드에서 우수한 성과를 낸 모델들은 주로 지도 SFT를 활용하였으며, 특히 국내 기업 분석(Domestic Company Analysis) 부문에서 두드러진 성과를 보였습니다.
이 분야에서는 상당한 개선이 이루어졌으나, 금융 및 회계(Financial & Accounting), 금융 시장(Financial Markets) 부문에서의 향상은 상대적으로 미미했습니다.
대부분의 모델이 간단한 SFT 접근법을 채택했지만, 일부 팀은 추가적인 훈련 기법인 Continual Pre-training(CPT)을 실험하기도 하였으나, 작은 규모에서는 그 효과가 명확히 입증되지 않았습니다.
예선 모델 성능 변화 트렌드
본선에서는 고도화된 다단계 학습 방법론이 널리 사용되었습니다.
특히, 여러 팀들은 커리큘럼 기반의 SFT 전략을 적용하여, 간단한 프롬프트부터 시작하여 Evolve Instruct와 같은 방법으로 생성된 더 난이도 높은 사례로 점차 발전시키는 방식을 취했습니다.
최상위 성능을 보인 모델들은 추가로 LLM-as-a-Judge 기법으로 평가된 응답들을 활용하여 Direct Preference Optimization(DPO) 및 KTO와 같은 선호도 최적화 기술을 통해 성능을 더욱 향상시켰습니다.
특히 Hi-Q 팀은 Continual Pre-training과 SFT 및 DPO를 결합한 방식의 효과성을 입증하여 괄목할 만한 성능 향상을 이루었으며, 이를 통해 체계적이고 다단계적인 훈련 과정의 가치를 명확히 보여주었습니다.
Continual pre-trained 모델들의 성능 결과
## 모델 훈련
### 데이터셋 수집
다음과 같은 과정을 통해 약 400,000개의 고품질 지시형 샘플로 이루어진 종합적인 훈련 데이터셋을 구축했습니다:
- **경진대회**: 경진대회 중 HuggingFace에 제출된 200,000개 이상의 데이터 중 MinHash 알고리즘과 정규식 필터링을 통해 신중하게 선별된 공개된 80,000개의 지시형 데이터셋을 구축하였습니다.
- **추론 응답**: DeepSeek-R1 모델을 사용하여 생성된 응답과 함께 공개적으로 이용 가능한 영어 및 한국어 온라인 자료에서 수집한 Prompt-Response 쌍으로 보완하였습니다.
- **검증**: GPT-4o를 LLM-as-a-Judge로 활용한 검증 프로세스 및 자동 품질 검사를 통해 데이터의 무결성과 정확성을 강화하였습니다.
### 학습 방법
₩ON 학습을 위해 다음과 같은 2단계 학습을 진행하였습니다:
- SFT: 이 단계는 금융 추론 작업과 관련된 모델의 초기 행동을 조정하는 데 초점을 맞췄으며, DeepSeek-R1 모델로 생성한 상세한 응답과 세심하게 선정된 프롬프트를 사용했습니다. 데이터셋은 한국어와 영어에서 언어적 일관성을 확보하기 위해 철저히 검토된 Prompt-Response 쌍으로 구성하였습니다.
- DPO: SFT 진행 후, 모델의 과도한 생각 과정 또는 일부 질문에 대한 잘못된 해석과 같은 원치 않는 행동을 줄이기 위해 DPO를 활용하였습니다. 선호도 데이터를 활용하여 모델의 출력과 DeepSeek-R1의 출력을 비교함으로써 효과적으로 모델 응답을 개선하였습니다.
### 모델 사양
- Base model: Qwen2.5-Math-7B-Instruct
- Language: 한국어, 영어
- Model size: 7B
₩ON은 두 단계의 구조적 추론 과정을 통해 최종 응답을 출력하도록 설계하였습니다:
- **생각 단계**: 모델은 `` 및 `` 태그 내에서 자신의 추론 과정을 명시적으로 보여줍니다. 이는 투명성을 높이고, 사용자들이 ₩ON의 결론 도출 방식을 이해하는 데 도움을 줍니다.
- **해결 단계**: 추론 진행 후, 모델은 결론을 `` 및 `` 태그 내에서 명확하고 간결하게 요약하여 제시합니다.
## 벤치마크 결과
₩ON은 대회에서 사용된 종합적인 벤치마크를 통해 평가되었습니다.
이 벤치마크는 객관식 문제(MCQA)와 개방형 질문으로 구성되어 금융 언어 모델의 실무적 및 이론적 능력을 철저히 평가합니다.
벤치마크는 재무회계, 금융시장, 금융 질의응답(Open-Ended FinQA) 태스크로 분류됩니다:
- **재무회계**: 금융 개념, 회계 원칙 및 계량 경제 추론에 대한 모델의 지식과 분석 능력을 평가합니다.
- **금융시장**: 금융 시장, 시스템, 규제 및 분야별 사실적 지식에 대한 모델의 이해를 평가합니다.
- **금융 질의응답(Open-Ended FinQA)**: 실제 금융 문제 해결 상황을 시뮬레이션한 복잡하고 세부적인 추론 문제들로 구성됩니다.
이 평가 데이터셋의 예시는 다음과 같습니다:
평가 벤치마크 예시. 각 예시는 각 카테고리에 대한 구체적인 question type을 보여줍니다.
**결과**
₩ON은 KRX 금융 언어모델 경진대회에서 수상한 모델들과 비교했을 때 평균적으로 가장 뛰어난 성능을 보였습니다.
특히 재무회계 및 금융 질의응답(Open-Ended FinQA) 서브셋에서 뛰어난 성능을 보이며, 이 모델이 뛰어난 추론 능력을 가지고 있음을 보여줍니다.
또한 도메인 전문 지식(시장 분야)에 중점을 덜 두었음에도 불구하고, 금융시장 서브셋에서 대부분의 모델들을 앞서며 ₩ON의 뛰어난 추론 능력을 다시 한 번 입증하였습니다.
## Quick Start
```python
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
model = AutoModelForCausalLM.from_pretrained("KRX-Data/WON-Reasoning", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("KRX-Data/WON-Reasoning")
messages = [
{"role": "user", "content": } # Replace `` with your query!
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
```
## Citation
```
@article{son2025won,
title={Won: Establishing Best Practices for Korean Financial NLP},
author={Son, Guijin and Ko, Hyunwoo and Jung, Haneral and Hwang, Chami},
journal={arXiv preprint arXiv:2503.17963},
year={2025}
}
```
## Contact
```
spthsrbwls123@yonsei.ac.kr, hcharm2ing@krx.co.kr
```