Skip to content

[Feature] 쿼리 확장(Query Expansion) 모듈 구현 #13

@minyoung-park

Description

@minyoung-park

기능 개요

주택 임대차 계약서의 특약 조항을 입력받아, 법령·판례 검색에 최적화된 구조화된 query expansion 결과(JSON)를 생성하는 모듈 구현

목적 / 배경

사용자가 입력하는 계약서 특약은 일반적인 생활어/계약 실무 표현으로 작성되어 있어, 법령·판례 DB의 표현 방식과 차이가 크다. 이로 인해 특약 원문 그대로는 관련 법령 및 판례를 정확하게 검색하기 어렵다.

따라서 특약의 **법적 쟁점(issue), 적용 규칙(rule), 분쟁 시나리오(fact pattern)**를 기반으로 검색 질의를 재구성하는 query expansion 단계가 필요하다. 이 모듈은 이후 Hybrid Retrieval(BM25 + Dense)의 입력 품질을 개선하여, RAG 기반 계약서 검토의 정확도를 높이는 역할을 한다.

기능 상세

  1. 입력
    단일 특약 조항 텍스트 (str)

예:

임차인은 계약기간 중 전입신고를 하지 않는다.

  1. 처리 흐름
[특약 입력]
   ↓
[Query Expansion (LLM)]
   - 법적 쟁점 식별 (legal_issue)
   - 적용 규칙 도출 (applicable_rules)
   - 법령 검색용 키워드 생성 (BM25)
   - 판례 검색용 사실관계 생성 (Dense)
   ↓
[Pydantic 스키마 검증]
   ↓
[Retrieval Adapter]
   - BM25용 / Dense용 질의 분리
  1. 출력 (핵심)

Pydantic 기반 구조화된 JSON 객체 반환

주요 필드:

  • clause_text: 원본 특약
  • normalized_clause: 정규화된 설명
  • clause_category: 특약 유형
  • risk_focus: 주요 위험 포인트
  • statute_query
    • legal_issue
    • statute_keywords (BM25)
    • statute_dense_query (Dense)
  • case_query
    • dispute_scenario
    • case_keywords (BM25)
    • precedent_dense_query (Dense)
  • retrieval_filters
  1. Retrieval 연결 방식

Query Expansion 결과는 다음과 같이 사용됨:

  • 법령 BM25 → statute_keywords
  • 법령 Dense → statute_dense_query
  • 판례 BM25 → case_keywords
  • 판례 Dense → precedent_dense_query
  1. 예외 및 고려사항
  • LLM이 JSON 형식을 깨는 경우 → Pydantic validation 실패 → 재시도 필요
  • 키워드가 지나치게 일반적일 경우 → 검색 품질 저하 가능
  • 법적 결론(“무효”, “위법”)을 직접 출력하지 않도록 제한 필요
  • 특약이 복합 문장일 경우 쟁점 분리 필요 (향후 개선 가능)

관련 모듈 / 디렉토리

pipeline/retrieval/query_expansion_schema.py (Pydantic 스키마)
pipeline/retrieval/query_expansion_prompt.py (프롬프트 정의)
pipeline/retrieval/query_expansion.py (메인 로직)
pipeline/retrieval/retrieval_adapter.py (검색 연결)
shared/llm/ (LLM 호출 래퍼)
tests/pipeline/test_query_expansion.py (테스트)

수용 기준 (Acceptance Criteria)

  • 특약 입력 시 ClauseQueryExpansion 스키마에 맞는 JSON이 생성된다
  • 법령 검색용 질의(statute)와 판례 검색용 질의(case)가 명확히 분리된다
  • BM25용 키워드와 Dense용 질의가 각각 생성된다
  • Pydantic validation이 실패할 경우 예외 처리 또는 재시도 로직이 동작한다
  • 대표 특약 3개 이상에서 정상적으로 expansion 결과가 생성된다

참고 자료

Stanford Legal Retrieval (Reasoning-based Query Expansion)
LegalBench-RAG (Legal RAG 평가 프레임워크)
내부 설계 문서 (Query Expansion 구조 설계)
프로젝트 구조 문서 (pipeline / retrieval 설계)

Metadata

Metadata

Assignees

Labels

feature새로운 기능

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions