한국 경제신문 with Tossbank에서 주최한 MLOps / Full_stack과정이 막을 내렸습니다.
광고회사에서 근무를 하다가 데이터와 자동화에 관심이 생기지만 혼자 공부할 엄두가 나지 않아서 무작정 시작하게 된 과정인데, ML, DL, LLM이라는 새로운 세상을 열어준 세상 문돌이인 저에게는 큰 전환점이 된 시간이었습니다. 오늘은 6개월의 결과인 Final_Project에 대해서 리뷰해보려고 합니다.
다들 투자에 관심이 있으신가요?
그렇다면 증권사에서 발행하는 리포트를 한 번쯤 읽어 보셨을 거라 생각합니다.
저희의 조사에 따르면 네이버리서치 센터 기준으로 하루에 약 100건 정도의 리포트가 업데이트되고 있습니다. 적지 않죠?
관심 있는 몇 개의 리포트만 골라서 본다고 하더라도 결코 적은 양은 아닐 것입니다.
그런데 만약 내가 초보 투자자라면?
낯선 차트와 테이블 분석 그리고 전문용어들까지…
리포트를 읽는 일 자체가 저희의 리소스를 너무 많이 잡아먹고 있다고 판단했습니다.
이에 저희는 ‘시장도 우리와 같은 불편함을 호소하고 있을까’를 알아보기 위해 간단한 구글폼으로 설문을 진행하였습니다. 직장인 대상의 오픈카톡방, 주식커뮤니티 등을 통해 설문을 진행했고, 총 116분께서 응답해 주셨습니다.
먼저 리포트 요약 챗봇 서비스의 니즈가 어느 정도인지 확인해 보았습니다.
그런데 무려 85.3% 높은 비중으로 해당 서비스를 이용하겠다는 응답을 확인했습니다.
이 결과에는 더 유의미한 이유가 숨어 있습니다.
바로 85.3%의 응답자 중 현재 정기적으로 금융권 리포트를 보지 않는 분들도 포함된 것이죠.
더 나아가서 레포트 요약 서비스가 출시된다면, 가장 중요하게 생각하는 요소가 무엇인지 물어보았습니다.
저희의 예상과 동일하게 가장 중요한 요소는 ‘정보의 신뢰성’으로 나왔고, 정보의 신뢰성에 기반한 ‘핵심 내용 요약’이 제일 기대되는 기능으로써 높은 비중을 차지했습니다.
아울러 레포트를 정기적으로 보는, 실력 있는 개인 투자자들이 집중하는 정보가 무엇인지 확인해 보았습니다.
그랬더니 약 64%의 높은 비중으로 ‘시장 전망'이 차지했습니다.
그리고 상대적으로 적은 비중으로 투자 의견과 목표 주가가 뒤를 이었는데,
여기서 저희는,
리포트를 조금 볼 줄 아는 개인 투자자들은 ‘애널리스트’의 사견이 섞인 당장의 투자의견보다는 시장 전망을 더 많이 궁금해한다는 것을 확인할 수 있었습니다.
저희는 이런 시장 반응을 바탕으로 Pain Point를 분석해 보았습니다. 우선 금융 리포트 자체가 너무 어렵습니다. 두 번째로 금융 리포트 안에는 수많은 차트와 표 그리고 전문 용어들이 혼재되어 있습니다.
그리고 금융 리포트의 제목이... 가령 ‘긍정적 변화'라고만 되어 있다면 어느 기업, 어떤 산업의 리포트인지 유추할 수 있을까요? 바로 제약 산업의 리포트였습니다.
또한 기존 AI는 금융 리포트에 특화되어 있지 않습니다.
이는 초보 투자자가 접근하기엔 꽤나 높은 허들로 작용합니다.
초보자도, 전문가도 증권사별로 산발되어 있는 다양한 정보를 탐색하는데 많은 시간이 소요됩니다.
예탁결제원에 따르면 국내 개인 투자자는 22년 말 기준으로 1,441만 명으로 늘어났다고 합니다.
비율로는 무려 64%의 비중을 차지하고 있는데, 이는 세계 주식시장에서도 높은 편이라고 합니다.
22년도 자료니만큼 24년도 말인 현재는 더 상승했다고 볼 수 있겠죠.
그렇다면 모든 개인투자자는 앞으로 소개할 RePick의 향후 잠재고객이 될 수 있을 것입니다.
RePick의 데이터베이스는 오직 금융권의 리포트로만 구성되어 있습니다.
복잡한 애널리스트들의 리포트를 낱장으로 모두 잘라낸 후에 각 요소들을 table, Chart, Image 를 모두 추출했습니다.
그리고 각 요소들마다 Text 형태로 summary를 생성해 기존 요소들과 함께 벡터화를 시켰습니다.
또한 문맥을 유지하며 질문의 의도와 가장 정확한 답변을 찾도록 하였습니다.
마지막으로 추천 알고리즘을 사용하여 유저 정보가 있는 고객에게는 맞춤형 레포트를리포트를 제공하여 유저의 관심도에 기반한 종목과 산업별 리포트를 추천합니다.
RePick의 서비스 플로우는 다음처럼 구성되어 있습니다.
크게 내부존과 데이터존으로 구분되어 있으며, 세부 기능들은 각각 MSA로 구성되어 서로 통신하는 구조입니다.
그리고 RePick의 핵심인 챗봇과 관련된 기능은 데이터존에 별도로 구성되어 있으며 ChaotbotAPI를 통해 데이터존의 LLM과 통신하게 됩니다.
Internal Zone의 상세한 설명 부분은 넘어가도록 하겠습니다.
MLOps 파이프라인입니다. 왼쪽부터 오른쪽으로 보면 data 수집부터 LLM까지의 전반적인 Flow를 확인할 수 있습니다.
구성된 Flow는 Jenkins를 통해 매일 저녁 10시에 자동으로 실행되며 반복적인 작업을 자동화하여 불필요한 리소스를 크게 절감했습니다.
워크플로우는 4가지 단계로 구성되는데,
첫 번째 단계는 PDF 파일에서 텍스트와 비정형 요소를 추출하는 과정으로 Upstage의 PDF 파싱 기능을 사용하여 단락, 표, 그림, 주석, 수식, 머리글, 바닥글,, 등등의 요소들을 검출합니다.
두 번째 단계에서는 추출된 요소들을 문서 순서에 따라 배치해서 HTML 구조로 재정렬합니다.
이때, 마크다운 형식으로 다시금 정렬하는 이유는 OCR로 텍스트 데이터를 가져오게 되면 제목과 본문을 구분할 수 없게 되기 때문입니다.
세 번째 단계는 LLM을 활용하여 테이블 및 차트와 이미지에 요약 및 예상 질문을 추가하는 과정입니다.
추출된 이미지를 LLM에 전달해 각 요소별 요약문과 예상 질문을 생성하게 되는데, 요약문과 예상 질문을 생성하는 가장 큰 목적은 Retriever가 비정형 데이터를 검색할 수 있도록 하기 위함입니다.
향후 도전 과제를 크게 5가지로 설정하였는데,
Agent기능을 상용화하여 유/무료 플랜별 기능을 확대할 예정입니다 이를 통해 개인투자자뿐 아니라 B2B 서비스로 증권사 및 금융 기업과의 파트너십까지 가능할 것으로 기대하고 있습니다.
이를 위해 시황, 투자, 경제, 채권 리포트를 추가하고 미국 금융 리포트도 다룰 수 있게 확장하고, 미국 금융 리포트에 기반한 다국어 서비스도 확장할 수 있을 것으로 기대합니다. 그리고 서비스의 안정화를 위해 높은 자코모 테스트 커버리지로 불필요한 코드 및 로직 개선을 통해 보안성 강화 및 최적화를 진행할 예정이며, 다양한 지표를 분석하고 모니터링하여 최적의 인프라를 구축하고 개선할 예정입니다.
향후 도전 과제의 첫 번째 목표였던, Agent 시스템에 대해 조금 더 상세히 설명드리겠습니다.
Agent는 Chain과 동일하게 AI 및 NLP 애플리케이션(특히 LangChain 같은 프레임워크에서)에서 작업을 수행하는 방식과 구조를 나타내는 개념입니다. Agnet를 사용한다면 데이터 저장 및 검색을 보다 더 효율적으로 진행할 수 있으며, 사용자 입력과 실행 환경에 따라 다양한 도구를 선택하거나 결합하여 작업을 처리할 수 있게 됩니다. 저희는 시간적 제약과 수집 비용 때문에 단일 레트리버를 구축 하였으나 추후 Agent를 활용해 레트리버를 별도로 구성한다면 질문과 가장 적합한 DB에서만 검색을 수행하는 구조를 설계할 수 있습니다.
추가적으로 질문과 관련 있는 뉴스를 브라우징 하여 답변도 생성할 수 있게 됩니다.
또한 데이터 시각화 도구도 구성을 해보았는데 이는 사용자의 경험을 대폭 향상할 수 있을 것입니다.
사실 저희는 RePick 서비스를 개발하면서,
Chain과 Agent를 동시에 개발하여 테스트를 진행했었습니다. 그렇지만 아까의 시연에서는 뉴스 검색과 시각화를 보지는 못하셨을 겁니다.
후에 평가해 보았을 때, 답변 생성 속도와 정확성에서 꽤나 큰 차이가 발생하여 Chain을 채택할 수밖에 없었기 때문입니다.
브라우징 기능을 추가하면서 엄격하게 닫아놓은 할루시네이션이 조금씩 나타났기 때문입니다.
저희는 이러한 평가표를 바탕으로 Chain을 적용해 챗봇을 만들었으나, 향후에는 Agent를 더 개발시켜 RePick의 검색 기능이 더 고도화되기를 고대하고 있습니다.
11월 05일부터 12월 19일까지의 여정이 막을 내렸습니다.
개발이 처음이라 많이 부족하고 답답한 부분이 존재하였을 텐데 같이 함께해 준 팀원에게 감사한 시간이었습니다.
저희는 약 7주간의 기간 동안 단계별로 나누어 서비스를 개발하였고, 데일리 스크럼을 진행하여 풀스택과 MLOps의 개발 현황과 고민들을 매일매일 업데이트할 수 있도록 했습니다. 모든 프로젝트 관리는 Jira를 통해 진행했으며, 매일 진행되는 회의는 Confluence에 모두 게시하여 팀원 간 정보격차가 생기지 않도록 방지했습니다.
과정을 수치화해보았을 때 약 33일간의 프로젝트를 진행하면서 33번의 회의 그리고 1200번의 커밋과 약 3000번의 메시지를 주고받으면서 RePick을 개발했습니다.
이번 프로젝트를 끝내며 새로운 분야에 발을 들일 수 있게 되었습니다. 갈 길이 멀지만 무언가 나아갈 것이 있다는 것이 아직 저에게는 너무 감사합니다.(말투가 기독교인 같네요.) 매번 지금처럼 만족스러울 수는 없겠지만 항상 최선을 다하는 사람이 되도록 최선을 다하겠습니다. 그리고 부족하지만 이끌어주고 같이 나아가준 팀원들에게 다시 한번 감사합니다. 앞으로 블로그에 공부 및 프로젝트 내용 그리고 취업 준비 과정을 상세히 기록하려고 합니다. "빼앗긴 비전공자 타이틀" 복수전공자, 경험자도 아닌 진짜 밑바닥 비전공자 문돌이 예체능 출신의 개발 도전기 모두 사랑해 주세요~
Docker 의 기본적인 명령어 (1) (2) | 2025.01.08 |
---|---|
MLOps환경 구축을 위한 도커와 쿠버네티스 (1) | 2025.01.08 |
[패스트캠퍼스] 완강 후기 테디노트의 RAG 비법노트 : 랭체인을 활용한 GPT부터 로컬 모델까지의 RAG 가이드 (2) | 2024.12.15 |
[ 논문 리뷰 ] Transformer - Attention Is All You Need(2017) [ 1 ] (21) | 2024.10.09 |
딥 러닝 " RNN (Recurrent Neural Network) " (15) | 2024.10.08 |