Skip to content

boostcampaitech7/level4-nlp-finalproject-hackathon-nlp-11-lv3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Level 4. 증권사 자료 기반 주식 LLM 서비스

프로젝트 개요

프로젝트 주제

  1. 주제
    • 증권사 자료 기반 주식 LLM 서비스 개발
  2. 요구사항
    • PDF 문서로부터 텍스트, 그래프 등 정보의 추출
    • 데이터 레포지토리 구축(GraphDB, VectorDB 등)
    • 쿼리에 대해 가장 적합한 데이터를 찾아내는 RAG 시스템 구현
    • 프롬프트 개발
    • 답변 생성
    • Q&A 기능: 정량평가 목적
      • REST API 로 구현
      • Input: query(질의)
      • Output: context(참조텍스트), answer(답변)

데이터셋

  1. 제공된 데이터
    • 증권사 자료 파일(PDF) 100개

평가 방법

  1. 정량평가 50%
    • 테스트셋 질의에 대한 답변 성능 – 지표 G-Eval
  2. 정성평가 50%
    • 서비스의 창의성, 유용성, 개발 완성도, 소스코드 품질, 문서화 수준

👨🏻‍💻 팀원 소개 및 역할

이름 프로필 역할
권기태 API 설계 및 개발, RESTful API 구현, OCR 데이터 후처리
권유진 평가 데이터 제작, OCR 데이터 후처리, Web Design 및 발표 자료
박무재 RAG 파이프라인 구현, 평가 코드 구현 및 실험, 평가 데이터 선별
박정미 평가 데이터 제작, OCR 데이터 후처리, Front-end
이용준 PM, 리팩토링 및 기타 구현, 아키텍쳐 설계 및 서빙
정원식 DocLayout 모듈 구현, Embedding Model, Fine Tuning, 발표

프로젝트 수행 방법

1. PDF OCR

📑 PDF OCR 상세 설명 보기

pdf-ocr_flowchart

1.1 실행

python pdf_parser.py -i "./pdf/input_pdf_folder"
python data_postprocessor.py

2. RAG

📑 RAG 상세 설명 보기

2.1 실행

cd app/RAG

# retrieval 평가
python main.py mode=retrieve

# generator 평가
python main.py mode=generate

# vectordb 생성 및 업데이트
python main.py mode=update_vectordb

2.2 평가 데이터 구축

  • 목적
    • Retriever의 Top-K Accuracy 평가 및 Retriever, Generator의 G-Eval 평가 수행
  • 방법
    • 질문 생성: GPT를 활용하여 PDF에서 각 종목의 증권사마다 text 기반 질문 10개씩 생성
    • Query 정제: 각 종목별로 100개의 Query를 생성한 후, 중복을 제거하여 최종 Query 선정
    • 답변 추출: 정제된 Query를 각 증권사 리포트에 적용하여 answers 도출
    • Ground Truth 강화: 종목별로 다양한 증권사(5~6개)를 선정하여 Ground Truth의 품질 향상
    • 표&그림 질문 추가: 표와 그림을 기반으로 한 질문을 10개 추가 생성
  • 활용
    • Retrieval Top-K Accuracy에는 전체 1,843개 활용
    • G-Eval 평가는 1,843개 중 75개 샘플 사용

2.3 Embedding Model 평가

Top_1 Top_5 Top_10 Top_20 Top_30 Top_50
TF-IDF 9.80 22.55 37.52 59.89 72.64 90.94
BM25 12.20 28.84 42.33 63.59 79.85 96.12
klue/roberta-large 2.40 11.46 20.89 38.26 59.15 86.88
klue/bert base 5.73 17.38 30.50 49.35 66.73 87.62
multilingual-e5-large-instruct 11.09 29.94 44.92 66.17 80.41 94.82
nlpai-lab/KoE5 15.16 38.26 53.42 71.72 81.52 93.53
BAAI/bge-m3 15.34 41.22 56.38 73.94 84.84 96.30
nlpai-lab/KURE-v1 16.64 42.41 58.41 76.53 85.03 95.38

nlpai-lab의 KoE5와 KURE-v1이 우수한 성능을 보였다. 실제 문서를 검토한 결과 특정 Query에 대한 검색 성능이 더 뛰어난 KoE5를 최종 모델로 선택하였다.

2.4 Embedding Model Fine-Tuning

  • Fine-tuning 데이터: virattt/financial-qa-10K를 번역한 데이터

  • Query Encoder와 Passage Encoder를 나누어 Hard Negative 없이 In-Batch Negatives 방식으로 Multiple Negatives Ranking Loss을 사용하여 학습

  • 결과(Top-K Accuracy)

    KoE5 Fine-Tuned Model
    Top-1 15.16 18.11
    Top-5 38.26 43.07
    Top-10 53.42 58.78
    Top-20 71.72 75.60
    Top-30 81.52 85.40
    Top-50 93.53 95.93

2.5 Vector Store

  • ChromaDB: Metadata를 저장하여 Filtering 기능을 제공하고, 회사별 검색이 가능해 정보의 정확성을 높일 수 있다. 또한, 서버 실행 중에도 DB를 업데이트할 수 있어 유연성이 뛰어나 이러한 점 때문에 선택했다.

2.6 Reranker

  • Cross Encoder로 문서와 질의의 유사도를 측정하여 문서를 재정렬
  • 실험
Top_1 Top_5 Top_10 Top_20 Top_30 Top_50
nlpai-lab/KoE5 15.16 38.26 53.42 71.72 81.52 93.53
nlpai-lab/KoE5 + BAAI/bge-reranker-v2-m3 19.78 43.25 61.55 77.08 85.58 95.75
nlpai-lab/KoE5 + Dongjin-kr/ko-reranker 20.15 45.47 61.37 78.00 87.25 96.49
  • Reranker를 사용한 후 Accuracy가 전반적으로 약 5% 이상 증가하였고 그 중 성능이 더 좋은 Dongjin-kr/ko-reranker를 사용하였다.

2.7 Generator

  • 프롬프트 엔지니어링
  • 쿼리 리라이팅
    • 2개 이상의 회사 정보가 필요하거나 질문이 부적절한 경우 리라이팅을 통해 검색 성능 향상

2.8 Evaluation

  • G-Eval(Retrieval, Generator)
    • Top-K Accuracy, BLEU 등은 상황에 따라 제대로 된 평가가 불가능하고, 사람이 일일이 데이터를 채점할 수 없어서 LLM-as-a-Judge 방식으로 G-Eval을 선택하였다.
    • 빠른 구현과 원활한 평가를 위해 DeepEval Open Source를 활용
    • Retrieval G-Eval 결과
Retrieval (top5) 유사성 필수 정보 포함 여부 질문 충족도 관련성 간결성 total
BAAI/bge-m3 2.52 3 2.34 1.92 1 10.81
nlpai-lab/KoE5 2.62 3 2.36 1.98 0.99 10.98
fine-tuned/nlpai-lab/KoE5 2.68 2.87 2.41 1.8 1.3 11.08
  • Generator G-Eval 결과
Generation 관련성 사실적 정확성 필수 정보 포함 여부 명확성과 간결성 논리적 구조 과하지않은 세부정보 적절한 출처 표시 형식 적절성 추가적 통합 total
Top-5 2.7 2.7 2.8 2.4 1.6 1.7 1.2 0.4 0.6 16.2
Top-7 3.1 3.0 3.0 2.9 1.6 2.0 1.3 0.4 0.7 18.3
Top-10 3.0 2.9 2.8 2.6 1.7 1.7 1.1 0.4 0.7 17.0

3. API

📑 API 상세 설명 보기

REST API 개발 (파이썬 API, Query API)

3.1 실행

cd app
uvicorn main:app --reload --host 0.0.0.0 --port 8000

3.2 Endpoint

  • query
  • documents
  • chatting

4. FE

4.1 실행

cd FE
npm install
npm run dev

4.2 기능

  • AI 모델 선택(GPT-4o, GPT-4o-mini, Clova X)
  • 첨부한 PDF 문서를 벡터 DB화하여 효율적인 검색 지원
  • 이전 context를 유지한 실시간 대화
  • 위젯: 코스피 지수, 실시간 환율, 최신 경제 뉴스, 종목 관련 정보, 종목별 최신 뉴스

결과

사용 기술

  • OCR: DocLayout-Yolo, Clova OCR, Upstage Parser API
  • VectorDB: ChromaDB
  • Retriever: Langchain
  • Generator: Langchain, LLM-based Answering Model (gpt-4o, Clova X)
  • Evaluation: G-Eval, Top-K Accuracy
  • API server: Fastapi
  • Web Front-end: React.js, Tailwind CSS

팀워크 & 협업 경험

  • 협업 도구 : Github issue와 discussion으로 task 할당 및 토의 🤝
  • Commit 관리 : Github commit message template으로 일관성 유지, 협업 효율 증대 📚

프로젝트 진행 방식

  • 프로젝트 관리 : Notion에 완료된 일 공유, Zoom meeting을 통해 진행 상황 토의

About

level4-nlp-finalproject-hackathon-nlp-11-lv3 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published