r/MachineLearning 여러분 안녕하세요! 저는 Isaacus 소속의 법률 엔지니어 Tabs입니다. 저는 오직 인코더 모델과 자연어 추론(Natural Language Inference, NLI)만을 사용하여 쌍을 이루는 법률 문서 간의 편차와 격차를 찾아내는 오픈 소스 법률 충돌 감지기를 구축했습니다. [IMG:N] gif 62c9cun4gb1i1 처리 중입니다... TypeSafe AI의 Jev 같은 판별적 모델(discriminative models)에 대한 관심 폭발에서 영감을 받아, 저는 대규모 법률 문서 플레이북 검토 워크플로우의 대부분을 더 작고 비생성형(non-generative) 모델을 사용하여 얼마나 진행할 수 있는지 확인하고 싶었습니다. 이 문제에 대해 비생성형 접근 방식을 취하는 것의 이론적 이점은 엄청납니다. 진정한 조항별 쌍 비교는 이차적인(quadratic) 문제입니다. 따라서 Opus나 Astra 같은 모델을 사용해서 대규모로 처리하는 것은 불가능합니다. 각각 133개의 조항을 가진 평균 크기의 두 문서를 비교하려면 17,689번의 API 호출이 필요하며, 이는 너무 느리고 비쌉니다. 단순히 파일을 Claude나 GPT에 직접 업로드하는 것도 해결책이 아닙니다. 디코더(Decoders)와 에이전트 아키텍처(agentic architectures)는 한 번에 문서를 철저히 분석할 수 있는 고정된 어텐션(fixed attention)을 가지고 있지 않습니다. 여러 번의 시도(multi-shot approach)를 하더라도, 이들은 재현율(recall)이 약하고 습관적으로 환각(hallucinate) 현상을 일으킵니다. 제 변호사 친구들은 이 문제를 끊임없이 제기하지만, 저는 이에 대한 오픈 소스 솔루션을 찾을 수 없었고, 그래서 직접 구축하기로 결정했습니다. 저의 파이프라인은 NLI, 함의 관계(entailment), 추론 작업의 대부분을 더 빠르고 정확한 법률 인코더 모델에 맡깁니다. 제가 샘플링한 가장 긴 문서 쌍의 경우, 전체 파이프라인은 20초 이내에 실행되었습니다. 생성형 아키텍처와 달리, 이 모델들은 포괄적인 쌍 비교를 수행하며, 비록 오탐(false positive)이나 미탐(false negative) 오류를 일으킬 수는 있지만, 이러한 누락 및 잘못된 분류는 환각 현상(특징 집합에 도입되는 도메인 외부 결과)이 아닙니다. 파이프라인은 다음과 같이 작동합니다: Enrich : 우리는 각 문서를 섹션, 조항, 하위 조항의 계층적 트리로 풍부하게 만듭니다. 조항들은 다운스트림에서 쌍 비교가 수행되는 핵심 원자(key atoms)입니다. Embed : 우리는 각 조항을 벡터로 임베딩합니다.
필터(Filter): 우리는 각주나 서명 블록과 같이 조항이 아닌 항목을 제거하기 위해 법률 제로샷 분류기(legal zero-shot classifier)를 사용합니다. 단축 목록(Shortlist): 코사인 유사도(cosine similarity)가 최소 0.5 이상인 경우에 한해, 참조 문서에서 각 조항의 가장 관련성 높은 세 쌍을 유지합니다. 점수화(Score): 우리는 각 단축 목록 쌍에 대해 재랭커(reranker)와 분류기(classifier)를 사용하여 점수를 매깁니다. 각각은 설계된 형식의 질문에 답합니다: 재랭커는 텍스트가 검색어와 얼마나 관련성이 있는지(relevance)를 점수화하고, 분류기는 진술이 사실인지 여부(NLI/entailment)를 점수화합니다. 분류(Sort): 만약 한 조항과 그 최적의 일치가 동일한 주제에 속하지만 높은 충돌 점수(conflict score)를 가진다면, 그것은 편차(deviation)입니다. 같은 주제의 일치 항목이 없다면, 그것은 격차(gap)입니다. 즉, 해당 주제가 한 문서에는 있지만 다른 문서에는 없는 경우입니다. 이것이 전체 충돌 감지 파이프라인(conflict detection pipeline)입니다.
이 위에 추가적으로, 각 발견 사항을 평이한 영어(plain English)로 요약하거나 대표하는 당사자에게 유리하도록 조항을 재작성하기 위해 LLM을 선택적으로 연결할 수 있습니다. 생성 단계는 NLI 및 인코더 스택(encoder stack)이 이미 어떤 충돌인지 결정한 후에만 실행되므로, 존재하지 않는 충돌을 환각(hallucinate)으로 만들어낼 수 없습니다.
이 파이프라인의 성능을 입증하기 위해, 우리는 Bob Iger의 2011년 및 2022년 디즈니 고용 계약서를 입력했습니다. 이 파이프라인은 많은 불일치점과 충돌점을 발견했으며, 대부분의 경우 2011년 계약서가 2022년 계약서보다 Iger에게 더 유리했습니다. 흥미로운 발견 중 하나는 격차(gap)였습니다: 2011년 계약서에는 지적 재산권 양도 조항이 없었던 반면, 2022년 계약서는 Iger가 회사 자원 없이 개인 시간에 만든 발명품을 제외하고 모든 업무 관련 IP를 Disney에 양도하도록 합니다.
코드는 MIT 라이선스이므로 개인적 및 상업적 용도로 무료입니다. 가이드에서는 모든 단계를 안내하므로, 원하는 곳에서 자체 모델을 교체하거나 자신만의 아키텍처 변경을 할 수 있습니다. 즐겁게 사용하시고, 의견을 알려주세요!
😁 작성 보고서 및 정적 데모: https://isaacus.com/blog/build-a-legal-document-conflict-detector GitHub 저장소: https://github.com/isaacus-dev/cookbooks /u/ladyofcode가 제출함 [링크] [댓글]