콘텐츠로 이동

RAG 파이프라인

개요

법률 데이터를 조문 단위로 청킹하고, Hybrid Retrieval(BM25 + 벡터)로 검색한 후, 상호참조를 자동 확장하여 관련 조문을 함께 제공합니다.

데이터 소스

소스 청크 수 청킹 단위
공직선거법 (법률/시행령/시행규칙) ~375 조문
정치자금법 (법률/시행령/시행규칙) ~68 조문
정당법 (법률/시행령/시행규칙) ~66 조문
공직선거관리규칙 ~530 조문
사례예시집 838 개별 사례
합계 ~1,877

청킹 전략

법률 텍스트 — 조문 단위

일반 문서와 달리 법률은 고유한 계층 구조를 가지므로 고정 크기 청킹 대신 조문(Article) 단위로 분할합니다.

제58조 (정의)          →  1 chunk
  ├─ ① 항
  ├─ ② 항
  └─ 관련 호

메타데이터:
  법률명: 공직선거법
  조번호: 58
  장: 제6장
  참조조문: [93, 254]
  type: law

사례예시집 — 사례 단위

사례 1개 = 1 chunk
  ├─ 상황 설명
  ├─ 허용/금지 판단
  └─ 해설

메타데이터:
  관련조문: [58, 93]
  카테고리: 선거운동
  판단: allowed / prohibited
  type: case_example

Hybrid Retrieval

BM25 (키워드 검색)

법률 용어("기부행위", "사전선거운동" 등)의 정확한 매칭에 강합니다. 토큰 기반 TF-IDF 변형으로 동작합니다.

벡터 검색 (시맨틱)

paraphrase-multilingual-MiniLM-L12-v2 모델로 임베딩한 후 ChromaDB에서 코사인 유사도 검색합니다. 의미적으로 유사한 조문을 찾습니다.

RRF (Reciprocal Rank Fusion)

두 검색 결과를 RRF 알고리즘으로 병합합니다:

RRF_score(d) = 1/(k + rank_BM25(d)) + 1/(k + rank_vector(d))

k=60 상수를 사용하여 두 검색 방법의 순위를 균형있게 결합합니다.

상호참조 확장

법률 조문은 다른 조문을 자주 참조합니다 (예: "제93조에 따른..."). 검색 결과에서 참조된 조문을 자동으로 추가 검색하여 컨텍스트를 보강합니다.

cross_refs = {
    "공직선거법__제58조": ["공직선거법__제93조", "공직선거법__제254조"],
    "공직선거법__제93조": ["공직선거법__제58조", "공직선거법__제111조"],
    ...
}
# 총 724개의 상호참조 관계