NAVERCONNECT 부스트 캠프 AI Tech
NLP 최종 프로젝트 법률 조언 웹 서비스 ‘LawBot ’ 팀 회고 |
---|
Member 김주원_T5056, 강민재_T5005, 김태민_T5067, 신혁준_T5119 윤상원_T5131
1. 프로젝트 개요
1.1 프로젝트 주제
사용자가 채팅 웹을 통해 자신이 처한 법률적 상황을 제시 하면 , 입력에 대한 문맥을 AI 모델이 이해하여 가이드라인을 제시 하고 , 유사한 상황의 판례를 제공 하는 서비스
1.2 프로젝트 기획 의도 및 배경
해결 방안: 따라서 윤슬팀은 이러한 상황을 해결하기위해 법률 상황에 대해 이해하기 쉬운 가이드라인을 제시하고 , 관련된 유사판례 및 법률 조항을 제공함으로써 법의 장벽을 낮출 수 있는 가벼운 법률 상담 서비스를 제공하고자 한다.
1.3 기존 리걸 테크.서비스와의 프로그램의 차별점
개발사 | 리걸 테크 서비스 | 기능 |
---|---|---|
로아팩토리 | 모두싸인 | 온라인 계약서 체결 서비스 |
헬프미 법률사무소 | 헬프미 | 변호사 찾기 , 지급명령 , 등기 , 상속 온라인 법률 서비스 |
로앤컴퍼니 | 로톡 | 변호사 +사례 검색 및 온라인 법률 상담 및 변호사 매칭 |
아미스쿠렉스 | 로폼 | 문서작성 , 변호사 상담 및 예약 |
보리움 법률사무소 | 머니백 | 가압류 신청 |
기존의 서비스 : 표에 제시된대로 변호사를 매칭시켜주거나 여전히 어려운 법률 검색만을 제공
LawBot 의 차별점: AI 모델을 이용하여 법률적인 분쟁 상황에 대한 유사판례를 찾아 주고 , 가벼운 가이드라인을 직접 생성해서 빠른 시간내에 User 에게 제공한다는 점에서 차이점이 있다.
1.4 기술 스택 & 개발 환경
2. 프로젝트 팀 구성 및 역할
이름 | 역할 |
---|---|
강민재 | 데이터 탐색 , 대한법률구조공단 사이버 상담 웹사이트 QA 데이터 크롤링 모듈 구현 전처리 모듈 구현 , 데이터 파이프라인 구축 , 학습 데이 터셋 구축 |
김태민 | Project Manager , 노션 협업 기구 관리 (Kanban Board) + PR/ISSUE Template 등록 , UI/UX 개발 , 프로토타이핑 , 프론트엔드 구축 , LLM 모델 평가지표 개발 , 반응형 웹 페이지 제작 |
김주원 | LLM 모델 평가지표 개발 (PPL), BM25/Bert 유사도 기반 리트리버 개발 , LLM 모델 ( koalpaca,llama, kullm) 학습 및 인퍼런스 코드 구현 , LLM 모델 (koalpaca,llama, kullm) 파인튜닝 |
윤상원 | 답변 생성 API 구현 , pytest 기반 단위 테스트 구현 , self-hosted runner 를 이용한 CI 파이프라인 구축 , 로드 밸런싱 적용 , LLM의 프롬프트 엔지니어링 , FastAPI 기반 백엔드 서버 구축 , 모델 서버와 router 간 ssh 터널링 구축 , Airflow를 이용한 재학습 파이프라인 구축 , Auto Scaling을 통한 Failover |
신혁준 | 데이터 탐색 , 대한법률구조공단 법률상담사례 데이터 크롤링 모듈 구현 , 맞춤법 검사기 크롤러 모듈 구현 , 파이프라인 구축 , 학 습 데이터 셋 구축 |
3. 프로젝트 수행 절차 및 방법
3.1 협업 관련 Ground Rule
원활한 협업을 진행하기위해 Notion 과 Github 의 협업 Rule 을 정해 To do List 및 코드를 관리했습니다. 1. main branch Pull Request 관련 Rule
Level 단위 로 develop branch 에서 main 에 merge 한다
배포용 브랜치로 develop 에서 refactoring, bugfix 가 완료 된 상태에서 push 한다 .
main 브랜치로 merge 는 팀원 4 명 중 2 명이상 accept 한 경우 merge 를 진행한다 .
2. Develop branch Pull request 관련 Rule
3. feature Branch Commit 관련 Rule
4. 개발 관련 Rule
5. 회의 관련 Ground Rule
3.2 프로젝트 진행 Time line
4. 프로젝트 수행 결과
완성된 홈페이지 링크 : https://yoonseul.link
발표 링크 : https://www.youtube.com/watch?v=fgboxtWM4B4 - Github 링크 : https://github.com/boostcampaitech5/level3\_nlp\_finalproject-nlp-08
4.1 서비스 Use Case
4.2 Service Architec ture
네이버 커넥트 재단으로부터 제공받은 V100 서버 4 대를 모두 활용하기 위해 첫 설계 때부터 서비스 확장이 쉬운 마이크로 서비스 아키텍처를 고려했습니다 . 또한 서비스 간의 상호 의존도를 낮춰 서버에 장애가 발생할 경우 전체 서비스가 중단되는 것을 방지하고자 하여 위와 같이 웹 서버 , 모델 서버를 독립적으로 분리하고 API를 통해 서로 통신하는 구조로 설계했습니다 . 이를 통해 한 대의 V100 서버에 장애가 발생하더라도 나머지 서비스는 전혀 영향을 받지 않고 서비스를 제공할 수 있습니다 .
확장성있고, 효율성있는 서비스를 제공하기 위해 다음과 같은 시스템을 구현했다.
4.2.1 CI 파이프라인
구현 배경: 소스 코드를 작성하거나 수정할 때마다 어플리케이션의 모든 기능이 정상적으로 동작하는지 확인하는 것은 불가능에 가까웠 다. 그러나 , 문제를 뒤늦게 발견할수록 시간적인 비용이 더 많이 들었기 때문에 테스트 자동화가 필요했 다.
해결 방안: GitHub Actions 를 활용하여 develop 브랜치로 PR 이 발생할 때 사전에 구현한 pytest 기반의 단위 테스트가 실행되도록 CI 파이프라인을 구축 했다. 이번 프로젝트가 LLM 모델을 활용하기 때문에 GitHub 에서 제공하는 서버로 답변 생성 테스트를 진행하는 것에 한계가 있었기 때문에 V100 서버를 self -hosted runner 로 등록 하여 CI 파이프라인을 운영했 다.
기대효과: CI 파이프라인을 통해 매번 테스트를 진행해야 하는 번거로움을 해소하고 , 사전에 코드상의 문제를 파악하여 효율적으로 프로젝트를 진행할 수 있었다.
4.2.1 로드 밸런싱 적용
구현 배경: 모델이 하나의 답변을 생성하고 유사 판례를 찾아오는 데 약 20 초가 소요되기 때문에 다수의 이용자가 동시에 접속해 있는 경우 , 한 대의 서버로는 트래픽을 감당하기 어려웠 다.
해결 방안: 트래픽을 4 대의 V100 서버에 분산하기 위해 AWS 의 Elastic Load Balancing을 사용했 다. V100 서버 각각에 proxy 서버의 역할을 하는 EC2를 두고 , Application Load Balancer를 4 대의 proxy 서버와 연결하여 로드 밸런싱을 적용 했다. 이때 , Application Load Balancer는 고정 IP 주소를 지원하지 않기 때문에 Network Load Balancer 를 Application Load Balancer 의 앞 단에 배치하여 IP 주소를 고정했 다.
기대효과: 로드 밸런싱을 통해 기존 1 대의 모델 서버로 서비스를 운영했을 때보다 4 배 많은 트래 픽을 소화할 수 있었 다. 또한 Applcation Load Balancer의 기본 기능 중 하나인 health check 를 통해 모델 서버에 장애가 발생할 경우 , 해당 서버로 트래픽을 보내지 않음으로써 서버의 장애가 서비스의 장애로 이어지는 것을 방지 할 수 있었 다.
4.2.1 모델 학습 파이프라인
구현 배경: 매주 새롭게 추가되는 법률 상담 사례들을 데이터셋에 추가하여 주기적으로 모델을 다시 학습시키기 위해 Airflow 를 활용한 모델 학습 파이프라인을 구축했 다
해결 방안: 일주일마다 HuggingFace 저장소에 올라온 새로운 데이터셋을 가져와 모델에 입력 가능한 형태로 전처리한 뒤, HuggingFace 의 Trainer 로 모델 학습을 진행합니다 . 학습이 끝난 모델은 모델 서버에서 사용 가능하도록 HuggingFace 의 저장소에 업로드했다.
4.2.2 모델 학습 파이프라인
구현 배경: 비용 절감을 위해 하드웨어 성능이 낮은 EC2 인스턴스를 사용하다보니, 종종 웹 서버에 장애가 발생했다.
해결 방안: 이 문제를 해결하기 위해 웹 서버 그룹과 연결된 Application Load Balancer가 주기적인 health check 로 서버의 장애를 빠르게 파악하고 , Auto Scaling 기능을 통해 새로운 웹 서버를 장애가 발생한 웹 서버와 교체시켰 다.
기대효과: 웹 서버의 장애를 빠르게 Failover하여 안정적으로 서비스가 유지될 수 있도록 하였다.
4.3 Data Pipeline
데이터는 위와 같이 단계별로 나누어 목표를 설정하고 데이터를 탐색 , 수집 , EDA 및 전처리 , 생성모델을 통한 증강을 하여 학습데이터 셋을 구축하였 다.
데이터 파이프라인을 순환 구조도로 도식화하여 DMOps 구조도로 나타내면 위와 같다. 4.3.1 학습 데이터셋
데이터를 탐색하여 크롤링 이전에 준비할 수 있는 데이터를 HuggingFace, AiHub, Github을 통해 확보하였고 , 부족한 법률 QA 데이터 는 크롤링 과 생성 모델(GPT)을 통해 학습 데이터를 추가로 확보하였다.
데이터셋 이름 | 데이터 개수 | 출처 |
---|---|---|
easylaw_kr | 2,195 |
|
LegalQA | 1,830 | https://github.com/haven-jeon/LegalQA![](Aspose.Words.27c0a0b4-4c37-47f5-862b-a962a1a24291.016.png)
|
대한법률구조공단의 법률상담사례 데이터 | 9,994 |
|
대한법률구조공단의 국내 사이버상담 데이터 | 2,463 | https://www.klac.or.kr/legalstruct/cyberConsultation.do |
Open AI GPT증강 | 8,616 | - |
데이터셋 이름 | 데이터 개수 | 출처 |
---|---|---|
법률 /규정 (판결서 , 약관 등) 텍스트 분석 데이터 | 77,382 | Aihub |
4.3.2 EDA & 전처리
학습에서 의도하지 않는 편향된 데이터를 생성하지 않기위해 데이터를 Heuristic 하게 확인하는 EDA를 진행하였고 이를 기반으로 Hallucination 을 방지하거나 개인정보를 보호할 수 있는 전처리를 진행 했다.
4.2. 3 데이터 증강
모델 성능을 더욱 개선하기 위하여 GPT 3.5 모델을 사용하여 8,616 개의 새로운 QA 데이터를 생성 했다. 데이터 생성 시 크롤링 데이터를 포함하여 few shot prompts 를 설계하여 사용 하여 데이터 증강을 진행했다.
4.5. 모델
Model Architecture
유저가 입력하면 모델에서는 Question Filtering 모델을 통해 법률적인 질문인지 아닌지 일차적으로 필터링한다. 이후 사용자가 입력한 질문이 법률적인 질문이라면 Similar Precedent Model 과 Law LLM Model 통해 유사판례 를 추출하고 법률 조언을 생성하여 제공한다.
4.5.2 Question Filtering Model
1. 법률 질문이 아닌 답변에 대답하지 않기 위해 활용했다. 2. 큰 LLM 모델을 사용하여 사전에 분류함으로써 법률질문이 아닌 데이터에 대한 Latency 를 줄이기 위해서 사용했다. (적은 GPU사용 )
학습 방식은 법률 질문을 0, 법률질문이 아닌 데이터를 1 로 라벨링 하려 이진 분류를 하도록 모델을 학습시켜 질문을 구분할 수 있도록 했다.
4.5. 3 Precedents Similarity Model
Similar Precedent 모델은 사용자 법률 질문을 QA 데이터셋에서 유사한 질문을 추출하기 위해 sentence Bert 기반의 모델을 사용했 다.
모델은 사용자의 법률 질문과 유사한 qa 데이터 셋을 추출 한다. 이후 추출된 질문의 답변과 사용자의 입력을 concat 하여 판례 데이터셋에서 유사도가 높은 상위 판례데이터 세 개를 추출하여 사용자에게 유사한 판례로 제시 한다.
4.5.4 Law LLM Model
법률 분쟁 상황의 경우 개인마다 매우 특수한 상황을 겪는 일이 대부분이기 때문에 일반화하기 어렵다. 따라서 Retrieval 을 사용한 기계 독해 같은 태스크로 문제를 해결하기 어려운 상황 이다. 따라서 LLM의 경우 기학습된 방대한 정보와 더불어 fine-tuning 에 사용한
법률 지식을 사용하여 다양하고 특수한 상황에 유연하게 대응하여 답변을 생성가능 하다고 판단하여 LLM 모델을 법률 조언을 생성하는 모델로 선택하여 개발하게 되었다.
1. 현재 훈련은 LoRA: Low-Rank Adaptation of Large Language Models 논문을 참고하여 전체 훈련 파라미터의 0.1% 만 Fine Tuning 하는 방식으로 학습
.
KULLM: 아래는 작업을 설명하는 명령어입니다. 요청을 적절히 완료하는 응답을 작성하세요.\n\n### 명령어:\n{x['question']}\n\n### 응답:\n{x['answer']}
4.5. 5 평가지표
LLM 모델은 명확한 평가지표가 없어 직접 평가지표를 만들어 평가했 다. 평가지표를 만들 때 고려했던 부분은 도메인 특성상 법률적인 정확도가 중요하므로 법률적인 정확도와 언어의 자연스러 움 두가지 모두 평가할 수 있도록 metric 을 제작하여 평가했 다.
Dialogue Evaluation Metric
Perplexity
5. 자체 평가 의견
5.1. 잘한 점
5.2 보완 및 개선 방향
5.2.1 개선 방안 서비스 측면
5.2.2 개선 방안 데이터 측면
5.2.3 개선 방향 모델 측면
6. 참고 문헌 (References)
[1] Edward Hu, Yelong Shen, Phillip Wallis Zeyuan, Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, Weizhu Chen (2021), LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
NLP KLUE 프로젝트 (Relation Extraction Project Report) NLP-08 조 개인 회고
🧑💻 김태민 _T5067 캠퍼 ![ref3]
1. 나는 내 학습 목표를 달성하기 위해 무엇을 어떻게 했는가 ?
모델 파트를 맡음으로써 총 4 개의 모델·모듈을 구현하였다 . 판례를 가져오는 BERT, QA를 가져오는 BERT, BM25 그리고 사용자의 질문이 법적 질문인지 판단하는 필터링 BERT, KuLLM 기반 Legal-GPT, LLama2-ko 기반 법률 LLama 를 학습하고 구현하였다 . 비록 다른 조는 다 같이 모델을 구현하였지만 , 우리 조는 모두가 각각의 파트를 맡음으로써 혼자 모델을 구현하였는데 기존에 계획한 모든 기능을 구현하였다 . 기존의 부스트캠프는 LLM을 다루지 않아 한번 다루어 보고 싶었는데 단순 다음 토큰을 예측하는 LLM을 채팅형식으로 튜닝하여 직접 만들고 그걸 다시 법률로 튜닝하는 과정을 거쳐 LLM에 대해 심층적인 공부가 될 수 있었다 . 또한 4bit 의 양자화와 peft lora를 사용하여 대규모 모델들 을 튜닝하고 직접 훈련하고 만드는 과정을 경험하여 매우 소중하고 귀한 경험이었다.
2. 마주한 한계는 무엇이며 , 아쉬웠던 점은 무엇인가 ?
RLHF나 DPR을 적극 활용하지 못한 점이 아쉬웠다 . 각종 Retrieval 할 때 DPR을 활용하여 훈련하면 더 정확한 결과가 나온다는 것은 많이 입증되었지만 , LLM에 집중하다 보니 짧은 기간상 구현하지 못하였다 . 또한 RLHF를 법률 QA 데이터가 부족해 처음에는 활용 안 하려고 했지만 직접 일반화 된 Chat 모델을 만드는 과정을 겪으면서 RLHF를 해볼까 했지만 , 이를 구현하는 것은 시간이
너무 많이 들어 아쉬워서 각종 레포나 코드로만 돌려보았다 . 또한 Lang chain으로 멀티 턴을 구현하였지만 , 훈련한 LLM이 멀티 턴에 대해 매우 취약하다는 단점을 발견하여 멀티턴을 구현하지 못한게 아쉬웠다 .
3. 한계 /교훈을 바탕으로 다음 프로젝트에서 시도해보고 싶은 점은 무엇인가 ?
한계로써 다음에는 단순한 파인튜닝을 넘어 RLHF 을 활용 하며 멀티 턴에 대해 생각하며 튜닝을 진행하고 싶다 . 그리고 Lang chain 을 활용하여 직접적인 도큐먼트를 불러오는 등 다양한 방안을 활용하고 싶다 . 또한 CV를 주로 했던 입장으로써 이미지도 함께 입력받는 LLM인 LLaVA를 써서 보다 다양하고 멀티 모달적인 부분을 가져가고 싶다 .
2. 나는 어떤 방식으로 모델을 개선했는가 ?
모델은 기존에 KuLLM이 Chat 형식으로 튜닝된 것을 가져왔지만 최근 LLama-2 가 출시되면서 이를 직접 한국어 채팅 버전으로 만들어 허깅 페이스에서 많은 '좋아요 '와 다운로드 수를 기록하였다 . 또한 데이터적인 부분에 GPT데이터와 KoAlpaca 데이터를 도입하며 변호사의 평가에서 단순 법률 QA 데이터를 넣은 것보다 높은 점수를 기록하였다 . 모델을 직접적으로 수정한 부분은 LLama 를 썼다는 점이며 확실히 데이터에 의존성이 높은 것을 체크하여 필요한 데이터를 데이터 파트에 요청하였다는 점이다 .
3. 협업 과정에서 잘된점/아쉬웠던점은 어떤것이 있는가?
협업 과정에서 아쉬운 점은 전혀 없다 . 완벽한 분업이 이루어 졌으며 Git 을 완벽하게 활용하였다 . 프론트 1 명, 백 1 명, 모델 1 명, 데이터 2 명으로 분담으로 이루어진 게 다른 조들 보다 완성도 있는 프로젝트를 만들 수 있었던 원동력이라고 생각된다 .
NLP 최종 프로젝트 (Wrap -Up Report) 김태민 T5067
잘 읽었습니다