대기업 계약서 독소조항, RAG로 90% 정확도 검수하기 (청킹, 유사도 검색, LLM 분석)
LLM을 활용한 문서 분석은 겉보기에는 간단해 보이지만, 실제로는 다양한 차원의 복잡성을 포함합니다. 따라서 높은 정확도를 얼마나 보장할 수 있으며, 실제 비즈니스 업무에 바로 적용 가능한지에 대한 의구심이 제기되곤 합니다.
클라이원트는 최근 2개월 동안 엔터프라이즈 고객을 대상으로 100페이지가 넘는 복잡한 영문 계약서에서 90%의 정확도로 독소 조항을 분석하는 시스템을 성공적으로 개발했습니다. 특히, 이 프로젝트는 온프레미스 환경에서 진행되어 최신 GPT나 Gemini 모델의 확장된 컨텍스트 길이 기능을 활용할 수 없었고, 대신 메타의 오픈 모델 라이선스인 Llama 3.1를 사용해야 하는 기술적 제약이 있었습니다.
이번 블로그 글에서는 대기업들이 계약서 분석 과정에서 겪는 주요 어려움과 클라이원트가 AI 기술을 활용해 이 문제를 어떻게 해결했는지에 대해 기술적인 내용을 소개합니다.
문제 정의 및 목표
자세한 기업명은 NDA로 공개할 수 없으나, 계약 한 건당 백억 원대 규모의 초대형 프로젝트를 수행하는 글로벌 제조사입니다.
계약 금액이 큰 만큼 계약서의 내용도 길고 세부 사항이 많습니다. 또한, 과거 작은 조항을 놓쳐 큰 손해배상을 치른 경험이 있어, 수십 년간 쌓아온 노하우를 바탕으로 현재 200여 가지 검토 항목을 체크리스트 형태로 사람이 하나하나 꼼꼼히 검토하고 있습니다. 예시 항목은 다음과 같습니다:
- 자연재해나 천재지변으로 공사가 중단될 경우, 책임 소재는 누구에게 있는가?
- 테스트 완료 후 하자가 발생할 경우, 누가 이를 책임지는가?
모든 책임을 고객사가 지는 조항이 포함되어 있다면, 공사 중 발생하는 문제로 인해 고객사는 천문학적인 배상 책임을 질 위험이 있을 수도 있습니다.
따라서 이번 프로젝트의 목표는 명확합니다. 하루 종일 걸리던 긴 계약서 검토 시간을 단 5분으로 단축하고, AI 시스템을 통해 사람의 실수까지 보완하여 계약서 검토 업무의 속도와 정확성을 크게 개선하는 것입니다.
기술적 해결 방안
먼저 전체적인 아키텍처를 설명한 후, 구체적인 세부 사항을 하나씩 안내드리겠습니다.
이번 파이프라인은 RAG(Retrieval-Augmented Generation)를 사용하며, 문서를 청킹(chunking)한 후, 찾고자 하는 내용이 포함될 가능성이 높은 청크를 유사도 검색으로 추출하고 이를 LLM으로 분석하여 최종 답변을 출력하는 방식입니다.
아키텍처 구성 요소
- RAG 및 프롬프팅에 사용할 메타데이터 구축
- ITT (계약서) 문서 전처리 및 텍스트 추출
- 텍스트 청킹
- Context Aware 청킹: 맥락을 유지하면서 청크를 생성
- Fixed Size 청킹: 고정된 길이(n자) 기준으로 청킹
- 유사도 검색 (RAG 서치): 추출된 청크 중 관련성이 높은 부분을 찾는 단계
- LLM
- 청크 분석 (Llama 70b): 특정 청크를 심층 분석하여 필요한 정보를 추출
- 내용 추출 (Llama 70b): 관련 정보를 정확하게 선별
- 한국어 요약 (Yanolja): 최종 결과를 한국어로 요약하여 제공
1. 메타데이터 구축
각 검토 항목에 맞춘 메타데이터를 구축하며, 메타데이터의 구조는 다음과 같은 요소들로 구성됩니다:
- 청크 검색을 위한 유사도 검색 쿼리
- 유사도 검색 쿼리는 과거 문서를 참조하여 구축할 수 있습니다. 과거 문서의 원문 내용을 기반으로 섹션에서 자주 등장하는 키워드를 조합하거나, 해당 섹션 전체를 가져와 검색에 활용할 수 있습니다. 가장 효과적인 쿼리는 RAG에 사용하는 임베딩 모델과 검토 대상 항목의 특성에 따라 달라질 수 있습니다.
- 관련 내용 추출을 위한 질문 쿼리
- LLM에 입력할 질문으로, 입력된 청크에서 검토 항목에 대한 내용을 확인하고 간단하게 요약하도록 합니다. 예를 들어, "자연재해(태풍, 지진 등) 상황 발생 시 책임 소재를 명시한 조항이 있는가?"와 같은 질문을 입력할 수 있습니다.
- Few-Shot 프롬프팅에 사용할 예시 세트
- 정확도를 개선하기 위해 과거 계약서 문서에서 발췌한 관련 예시를 Few-Shot 프롬프팅으로 함께 입력합니다. 이 방식을 통해 LLM이 맥락을 더 잘 이해하고 정확한 결과를 추출할 수 있음을 확인했습니다.
- LLM에 추가 설명을 위한 배경 정보
- LLM의 이해도를 높이기 위해 필요할 경우 추가 설명이나 배경 정보를 제공합니다. 예를 들어, "자연재해에는 지진, 태풍, 토네이도, 홍수 등이 포함된다"와 같이 상황에 대한 구체적인 예시를 입력합니다.
2. 전처리 및 텍스트 추출
계약 데이터는 워드 파일, PDF 등 다양한 형식으로 제공될 수 있어, 모든 경우를 고려하여 데이터를 우선 PDF로 변환하고 raw 텍스트를 추출합니다.
추출된 텍스트에서는 페이지 번호나 불필요한 주석 등 정확도에 영향을 줄 수 있는 요소를 사전에 제거하여 깔끔하게 전처리합니다.
또한, 문서 내 섹션을 자동으로 탐지하는 알고리즘을 개발하여 각 섹션별로 메타데이터를 효율적으로 파싱할 수 있도록 합니다.
3. 청킹
전처리 단계에서 자동으로 탐지된 섹션을 기반으로 청킹을 수행합니다. 다만, 섹션이 정확히 추출되지 않은 경우에는 차선책으로 n자 기준 청킹을 사용할 수 있습니다.
대상 항목이 주로 하나의 섹션 내에서 발견되기 때문에, n자 기준 청킹 시 전체 맥락이 유지되지 않아 최종 결과의 정확도가 떨어질 수 있습니다. 두 가지 청킹 방식을 적용한 이유는, 계약서 형식이 대체로 유사하지만 예외적으로 다른 유형의 문서가 들어올 수 있기 때문에 섹션이 항상 정확히 탐지된다고 가정할 수 없기 때문입니다.
기본적으로 문서 섹션은 #.# 형식으로 구성되어 있으나, 알파벳이 포함될 경우 탐지가 실패할 수 있는 상황도 고려하여 유연한 청킹 방식을 설계합니다.
4. 유사도 검색
청킹 단계에서 추출된 청크들을 벡터화하고, 검토 대상 항목 쿼리와 비교하여 가장 유사한 청크 상위 k개를 가져오는 단계입니다. 예를 들어, 100페이지 문서에서 500개의 청크가 추출되었다면, "criminal offence," "legal" 등의 키워드를 포함한 청크를 찾기 위해 유사도 검색을 수행합니다.
예) RAG를 통해 아래와 같은 criminal, legal 관련 청크 상위 k개를 추출하여 다음 단계로 진행합니다.
5. LLM 검토 및 요약
이번 시스템에서는 LLM을 3가지 주요 단계로 나누어 사용했습니다. 최근 용어로 각 기능을 담당하는 단위를 "Agent"라고 부릅니다.
- 1단계: 검증 단계
- 첫 번째 검증 단계는 헐루시네이션을 줄이고 정확도를 높이기 위해 매우 중요한 단계입니다. RAG에서 유사도 검색을 통해 추출된 청크는 전체 문서에서 필요한 정보를 가려내기 위한 ‘그물’과 같습니다. 이 과정에서 정말 필요한 정보를 선별하여, 2번 단계로 넘어가기 전 관련성 여부를 철저히 확인하는 작업이 이루어집니다.
- 무분별하게 2번 단계로 청크가 넘어가면 관련되지 않은 내용도 요약될 가능성이 높기 때문에, Few-Shot 프롬프팅으로 실제 관련 내용이 있는 예시와 없는 예시를 5가지 정도 포함하여 검증을 강화합니다. 초기에는 Llama 3 8b 모델을 사용했으나 검증 정확도가 낮아, 현재는 Llama 70b 모델로 정확도를 개선했습니다.
- 2단계: 관련 내용 추출 및 요약
- 검증된 청크에서 필요한 정보를 정확히 추출하여 유저가 이해하기 쉽도록 요약합니다. 예를 들어, “자연재해가 발생할 경우 양측 모두 책임이 없다고 10.3 조항에 명시되어 있습니다.”와 같은 간결한 답변을 제공합니다. 추출된 요약 내용은 기본적으로 영어로 생성됩니다. Llama 모델은 한글 처리에 아직 미흡한 부분이 있어, 기본적으로 영어로 요약된 답변을 제공합니다.
- 3단계: 한글 번역
- 세 번째 단계에서는 2번 단계에서 추출된 내용을 한국어로 번역합니다. 파파고 같은 번역기보다 LLM을 사용하는 것이 훨씬 더 효과적이었으며, KKULM, 파인튜닝된 Llama3, Solar 등 여러 모델을 실험한 결과 야놀자 모델이 가장 우수한 성능을 보였습니다.
- 사용 모델은 yanolja/EEVE-Korean-10.8B-v1.0로, Solar 기반의 이 모델은 법적 조항을 전문가 수준으로 번역하는 데 매우 적합함을 확인했습니다.
결론
위와 같은 방법을 통해 각 항목별로 메타데이터를 구축하고 고객사 전문가들과의 협업을 거쳐, 최대 90%의 정확도로 리스크 항목을 식별하는 시스템을 성공적으로 구현했습니다.
최근 ChatPDF처럼 문서를 업로드하여 All-in-One 솔루션으로 문답을 구성하려는 시도가 많지만, 이러한 방식은 분야별 뉘앙스가 다르고 질문별 검증 단계를 거치지 않기 때문에 정확도가 낮아질 수밖에 없다고 생각합니다. 따라서 문서 내 특정 정보를 정확히 추출하기 위해서는 각 항목별로 충분한 메타데이터를 구축하고, 탐색 원문에 대한 철저한 검증이 필수적입니다.
엔터프라이즈 고객 중 프로젝트 기반으로 LLM을 활용한 복잡한 비즈니스 문서 분석을 희망하시는 분들은 언제든지 문의해주시기 바랍니다. 🙂