[DACON 재정정보 AI 검색 알고리즘 경진대회] (https://dacon.io/competitions/official/236295/overview/description) 참여 코드
구성원: 박광준, 신수웅, 오도은
faiss 기반 retriver와 multilingual-E5기반 embedding 모델로 vector DB를 구축하고, gemma2 기반 LLM 모델 학습
- 정부에선 매해 사업기획서, 재정통계, 재정보고서 등 다양한 재정 관련 정보를 축적
- 이런 방대한 양의 재정 데이터에 대해 쉽게 접근 가능하도록 하여 재정 데이터의 제공 편의성과 활용도를 개선하기 위한 프로젝트
- 열린재정의 중앙정부 재정 정보 검색 및 제공 편의성/활용도를 높이는 질의 응답 AI 알고리즘 개발
- 제공된 재정 관련 텍스트 데이터를 활용해 주어진 질문에 대해 정확도가 높은 응답을 제시하는 자연어처리 알고리즘 개발
- Train set: 16개의 정부 사업기획서 및 한국재정정보원에서 발간하는 다양한 분석보고서, 통계자료집 등의 발간물
- Test set: 9개의 정부 사업기획서 및 한국재정정보원에서 발간하는 다양한 분석보고서, 통계자료집 등의 발간물
- Train set: 496개의 질의응답 데이터가 포함된 csv 파일 -각 행은 질문에 대한 연관문서, 질문, 그에 대한 답변으로 이루어져 있음
- Test set: 98개의 관련 문서와 질문이 포함된 csv 파일 -각 행은 답변 없이 질문에 대한 연관문서 와 질문으로 이루어져 있음
크게 RAG, 모델 선정 및 학습, 프롬프팅의 3가지 측면으로 접근
- 표 전처리: 베이스라인으로 주어진 코드에서는 표 등을 따로 구분하지 않고 일괄적으로 텍스트로 읽어들임 -> 표라는 정형성에서 오는 정보가 손실된다고 판단, pymupdf/pdfplumber등 다른 pdf 처리 라이브러리를 사용해 표를 구분하여 처리
- OCR 인공지능을 포함한 모델은 자원소모에 비해 효과적이지 못한 결과를 보여 경계선 기반 표 탐지 알고리즘을 사용하는 pymupdf 사용, 이때 좌우 경계선을 잘 못찾는 문제를 보여
- 마크다운화: LLM의 사전학습 단계에서 표를 인식시키기 위해 마크다운 형태로 표를 변환하여 넣어준다는 점에서 착안해 pdf의 표 또한 마크다운 형태로 읽어들여 성능 향상 도모
- 벡터화: 베이스라인으로 주어진 "multilingual-e5-small", 더 고차원 모델들인 multilingual-e5-base 및 multilingual-e5-large, 그리고 아예 다른 아키텍처이며 한국어 임베딩 성능이 좋은 것으로 알려진 bge-m3 등의 임베딩 모델을 비교
- 모델선정: Open Ko-LLM 리더보드(https://huggingface.co/spaces/upstage/open-ko-llm-leaderboard) 및 LogicKOR 리더보드(https://huggingface.co/spaces/instructkr/LogicKor-leaderboard) 를 확인하여 당시 파라미터 갯수 <10B인 모델 중 성능이 좋은 모델들 비교
- 최종적으로 가장 성능이 좋게 나온 "rtzr/ko-gemma-2-9b-it" 모델을 기반으로 작업
- Instruction Finetuning: 사전학습이 된 모델의 경우 이미 언어에 대한 기본적인 이해도를 지니고 있기에, 수행하고자 하는 작업에 따라 그 작업에 대한 지시사항 또는 프롬프트를 학습데이터에 포함하여 목적에 대해 더 효과적인 학습을 진행할 수 있음
- LoRA(Low-Rank Adaptation): LLM 전체에 대해 추가학습을 진행하려 할 경우 개인 사용자 입장에서는 너무 많은 컴퓨팅 자원을 소모하게 됨. 이때 모델의 가중치는 동결시키되 원 모델 레이어에 LoRA 어댑터를 적용한 뒤 LoRA 레이어만 학습시켜 전체 모델의 추가학습과 유사한 효과를 얻으면서도 자원 소모를 획기적으로 줄일 수 있음
-
베이스라인으로 주어진 프롬프트: ```""" 다음 정보를 바탕으로 질문에 답하세요: {context}
질문: {question}
답변: """```
-
추론 결과 문장 끝맺음이 잘 되지 않거나 부연설명을 너무 길게 하는 문제를 발견해 프롬프트에 주어진 질문에만/문장 형식으로 답변을 요구하는 문장 추가
-
이후 답변에서 주어를 빠뜨리는 현상을 확인해 주어를 포함해달라는 문장 역시 추가
- Train/Test set의 문서에 대해 각 문서의 표를 더 인식하기 쉬운 html 형태로 변환
- 표 전처리가 끝난 문서에 대해 문서 전체를 마크다운 형태로 읽어들인 뒤, 256글자씩 균일한 청크로 나누고 "intfloat/multilingual-e5-base" 모델을 사용하여 벡터화
- 벡터화된 청크로 문서별로 벡터 db를 만든 뒤, Train/Test set의 각 질문에 대해 혼합 검색기를 사용하여 연관 문맥을 검색
- 4비트 양자화한 "rtzr/ko-gemma-2-9b-it" 모델에 대하여 LoRA 추가학습 기법을 사용해 3 에포크 Instruction Finetuning 진행
- 추가학습된 모델에 Langchain 라이브러리를 사용하여 테스트 데이터셋의 각 질문에 대한 응답 생성
name | value |
---|---|
lr | 2e-4 |
epoch | 5 |
lora r | 16 |
chunk size | 256 |
Public 리더보드 0.66626 Private 리더보드 0.67343
최종순위 38/359 (상위 10.58%)