신뢰도 점수를 넘어: 취약성 인지형 법률 추론 시스템 구현하기
요약
단일 신뢰도 점수의 한계를 극복하기 위해 불확실성의 유형을 지정하고 논거 그래프를 통해 취약성을 전파하는 법률 추론 시스템 구현 방법을 소개합니다. 미결 질문, 증거 공백, 반박되지 않은 이의 제기를 구분하여 추론의 취약 지점을 파악하는 것이 핵심입니다.
핵심 포인트
- 단일 스칼라 값(신뢰도 점수)이 가진 불확실성 정보 손실 문제 지적
- 불확실성을 OQ, EG, UO 등 세 가지 유형으로 분류하여 관리
- 논거 취약성 지수(AFI)를 통해 그래프 기반으로 취약성을 전파
- 고위험(High-stakes) 분야에서 추론 오류의 원인을 추적할 수 있는 지도 제공
"두 논거는 최종 강도는 동일할 수 있지만, 취약성(fragility) 측면에서는 실질적으로 다를 수 있습니다."
LLM (Large Language Model) 기반 기능을 배포해 본 적이 있다면 그 과정을 잘 알 것입니다. 모델이 0.84의 신뢰도 점수(confidence score)와 함께 결론을 출력하면, 그대로 배포합니다. 하지만 만약 그 0.84라는 수치가 해결되지 않은 법적 질문, 증거의 공백, 그리고 반박되지 않은 이의 제기가 동시에 결합된 결과라면 어떨까요? 결론이 무너졌을 때, 당신은 그것이 어디서 무너졌는지에 대한 지도를 갖지 못하게 됩니다.
Alhosseini (2026)의 최근 논문은 급진적인 제안을 합니다. 모든 불확실성을 단일 스칼라(scalar) 값으로 축소하는 대신, 불확실성의 유형을 지정(type)하고, 이를 논거 그래프(argument graph)를 통해 전파하며, 취약한 하위 경로를 우회해야 한다는 것입니다. 저는 법률 추론 시나리오를 위해 이 프레임워크를 구현했으며, 그 결과는 놀라웠습니다.
"기본 점수"의 문제점
현재의 정량적 논증 프레임워크(QBAF 및 ArgLLMs 등)는 모든 논거를 단일한 "기본 점수(base score)" 또는 "신뢰도(confidence)"로 초기화합니다. 불확실성이 다음 중 어디에서 기인하든 상관없이 말입니다:
- 아무도 해결하지 못한 미결 과학적 질문 (open scientific question)
- 나중에 채워질 수 있는 증거의 공백 (evidence gap)
- 상대측으로부터 제기된 반박되지 않은 실시간 이의 제기 (live, unrebutted objection)
...이 모든 것이 하나의 숫자로 평탄화(flattened)됩니다. 이는 법률이나 의료와 같이 이해관계가 큰(high-stakes) 분야에서 실제로 중요한 질문에 답하는 것을 불가능하게 만듭니다:
만약 이 결론이 틀린 것으로 밝혀진다면, 추론의 어느 부분에서 왜 오류가 발생하는가?
불확실성의 세 가지 원천
이 논문은 유형화된 분류 체계(typed taxonomy)를 도입합니다. 모든 논거 노드(argument node)에는 하나 이상의 태그가 붙습니다:
| 레이블 | 의미 | 예시 (법률) |
|---|---|---|
| OQ | 미결 질문 의존성 (Open-Question Dependence) | "팬데믹이 제227조에 따라 법적으로 '불가항력(force majeure)'인가?" |
| ... |
이것들은 단순한 메타데이터 태그가 아닙니다. 이들은 일반적인 강도 값과 함께 그래프를 통해 전파되는 스칼라 값인 **논거 취약성 지수 (Argument Fragility Index, AFI)**로 이어집니다.
수학적 원리 (텍스트 버전)
dev.to는 LaTeX를 렌더링하지 않으므로, 읽기 쉬운 일반 텍스트로 수학식을 설명하겠습니다:
각 논거 a에 대한 국소적 취약성 (Local fragility):
φ(a) = w_OQ · 𝟙[OQ] + w_EG · 𝟙[EG] + w_UO · 𝟙[UO] · s(a)
여기서:
𝟙[OQ]= 논거에 Open-Question (OQ) 태그가 있으면 1, 그렇지 않으면 0s(a)= 반박되지 않은 가장 강력한 공격자 (strongest unrebutted attacker)의 강도w_OQ,w_EG,w_UO= 도메인 가중치 (예: 0.40, 0.30, 0.30)
그 후, 취약성은 QBAF가 강도를 전파하는 방식과 유사하게 그래프를 통해 전파 (propagates) 됩니다:
F(a) = φ(a) ⊕ agg{ F(b) : b ∈ Attackers(a) ∪ Supporters(a) }
핵심 사항: F(a)는 σ(a) (강도)를 대체하는 것이 아니라, σ(a)와 함께 (alongside) 추적됩니다. 두 논거는 동일한 강도를 가질 수 있지만, 취약성 프로필은 매우 다를 수 있습니다.
나의 구현: 이란 민법상의 불가항력 (Force Majeure)
나는 networkx와 matplotlib을 사용하여 Python으로 전체 파이프라인을 구축했습니다. 시나리오는 다음과 같습니다:
주장 (Claim): 불가항력(팬데믹)으로 인해 임대차 계약은 취소 가능하다.
논거 그래프에는 세 명의 지지자(supporters)와 세 명의 공격자(attackers)가 있습니다:
arguments = {
'C': {'text': 'Contract voidable due to force majeure', 'base_strength': 0.5},
'S1': {'text': 'Pandemic was unforeseeable', 'uncertainty': {'OQ'}},
...
가중치 w_OQ = 0.40, w_EG = 0.30, w_UO = 0.30 및 취약성 임계값(fragility threshold) 0.35를 적용했을 때, 시스템은 다음과 같은 결과를 생성했습니다:
| 노드 | 강도 σ | 취약성 F | 상태 |
|---|---|---|---|
| C (주장) | 0.584 | 0.205 | 허용 가능 (Acceptable) |
| ... |
여기서 놀라운 점은 주장 자체는 괜찮아 보인다는 것입니다 (σ=0.58, F=0.21). 하지만 _모든 개별 지지 경로_가 _서로 다른 유형의 이유_로 취약합니다:
- S1은 OQ (Open-Question) 때문에 취약합니다: 팬데믹이 제227조에 따른 불가항력에 해당하는지는 이란 법학에서 여전히 미결정된 문제입니다.
- S2는 EG (Evidence Gap) 때문에 취약합니다: 경제적 영향에 대한 증거가 불완전합니다 (3개월간의 감사 결과만 존재).
- S3은 UO (Unrebutted Objection) 때문에 취약합니다: 제227조가 팬데믹을 제외한다는 상대측 변호인의 이의 제기가 현재 서면에서 반박되지 않았습니다.
0.58이라는 표준 신뢰도 점수(confidence score)는 이러한 구조적 취약성에 대해 아무것도 알려주지 않습니다.
동적 라우팅 (Dynamic Routing): 핵심 기능
이 프레임워크는 경로별로 취약성(fragility)을 추적하기 때문에, 일반적인 QBAF 시스템은 할 수 없는 일을 수행할 수 있습니다. 바로 **동적 라우팅 (dynamic routing)**입니다.
지지 경로가 취약성 임계값을 초과하면, 시스템은 총합 취약성이 더 낮은 대안을 검색합니다. 제 구현에서는 두 가지 대안을 제안했습니다:
대안 1 (S3 교체):
제227조 (Art. 227) (미반박 이의 제기(UO)로 인해 취약성 0.41)에 의존하는 대신, 제129조 (Art. 129) (이행 불능 원칙(impracticability doctrine))로 전환하십시오. 추정 취약성은 0.30으로 떨어집니다. 이는 미반박 이의 제기가 아닌 증거 공백(Evidence Gap)만을 포함하기 때문입니다.
대안 2 (S1 교체):
"예견 불가능성(unforeseeability)"(미결정 질문(OQ)으로 인해 취약성 0.40)을 주장하는 대신, WHO의 팬데믹 선언을 사실적 근거(factual anchor)로 사용하십시오. 추정 취약성: 0.00 — 이는 법적 미결정 질문이 아닌 명백한 사실(brute fact)입니다.
이것이 논거를 단순히 점수화하는 시스템과, 논거가 어디에서 무너질지를 설명하는 시스템의 차이입니다.
감사 추적 (The Audit Trail)
최종 출력물은 단순한 숫자가 아닙니다. 어떤 노드와 어떤 불확실성 유형이 취약성에 기여했는지를 정확히 보여주는 **감사 추적 (audit trail)**입니다:
주요 주장 (C): σ=0.584, F=0.205
→ S1 ('팬데믹은 예견 불가능했다'): AFI = 0.400
• 미결정 질문 (OQ): +0.40 — 법적 상태 미해결
...
판사, 변호사 또는 컴플라이언스 담당자에게 이는 "신뢰도: 58%"라는 말보다 무한히 더 유용합니다.
개발자가 주목해야 하는 이유
만약 여러분이 RAG 시스템, 법률 AI, 또는 결론이 중간 주장들의 사슬에 의존하는 모든 LLM 파이프라인을 구축하고 있다면, 이 프레임워크는 표준적인 불확실성 정량화 (UQ)가 제공하지 못하는 세 가지를 제공합니다:
- 분해 가능성 (Decomposability): 어떤 검색 격차 (retrieval gap) 또는 어떤 검증되지 않은 전제 (unverified premise)가 실패를 유발했는지 정확히 짚어낼 수 있습니다.
- 실행 가능성 (Actionability): "증거 격차 (Evidence Gap)"는 더 많은 문서를 찾아보라고 알려줍니다. "반박되지 않은 이의 (Unrebutted Objection)"는 반론을 생성하라고 지시합니다. "미결 질문 (Open Question)"은 결론을 잠정적인 것으로 표시하라고 알려줍니다.
- 라우팅 가능성 (Routability): 시스템은 취약한 의존성 (fragile dependency)을 감지했을 때 자율적으로 역추적하여 다른 추론 경로를 시도할 수 있습니다.
한계 및 향후 과제
이 논문은 현재의 한계점에 대해 솔직하게 밝히고 있습니다:
- 가중치 도출 (Weight elicitation):
w_OQ,w_EG,w_UO파라미터는 현재 수동으로 조정(hand-tuned)됩니다. 이를 크라우드 소싱된 데이터나 전문가 데이터로부터 학습하는 것은 향후 과제입니다. - 애그리게이터 형식주의 (Aggregator formalism): 취약성 전파 (fragility propagation) 하에서의 순환 논증 그래프 (cyclic argument graphs)에 대한 수렴 증명 (convergence proofs)은 아직 미해결 상태입니다.
- 공개 벤치마크 부재: 이 프레임워크는 ArgLLM 스타일의 베이스라인을 대상으로 아직 평가되지 않았습니다.
저의 구현체는 단순화된 DF-QuAD 스타일의 강도 애그리게이터 (strength aggregator)와 max 기반의 취약성 전파기 (fragility propagator)를 사용합니다. 실제 운영 시스템(production system)에서는 형식적인 수렴 보장과 학습된 도메인 가중치가 필요할 것입니다.
결론
우리는 LLM이 자신감 있어 보이는 답변을 생성하도록 만드는 데 수년을 보냈습니다. 다음 개척지는 LLM이 **자신이 가진 취약성의 정직한 지도 (honest maps of their own fragility)**를 생성하게 만드는 것입니다. 취약성 인지형 추론 아키텍처 (Fragility-Aware Reasoning Architecture)는 불확실성을 단순한 스칼라 값의 사후 고려 사항이 아니라, 추론 경로의 *구조화되고, 유형화되며, 전파 가능한 속성 (structured, typed, propagatable property)*으로 취급하는 제가 본 첫 번째 프레임워크입니다.
형식주의 (formalism)를 더 깊이 파고들고 싶다면, 원문 논문은 여기에 있습니다:
📄 Fragility-Aware Argumentation for Epistemic Risk — Alhosseini (2026)
논증 그래프 시각화가 포함된 전체 Python 구현을 보고 싶다면, 아래 스레드의 코드를 확인하세요.
여러분의 생각은 어떠신가요? 여러분의 RAG 파이프라인에 취약성 인지형 라우팅 (fragility-aware routing)을 사용하시겠습니까, 아니면 여러분의 유스케이스에서는 그 복잡성을 감수할 가치가 없다고 생각하시나요? 댓글을 남겨주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기