본문으로 건너뛰기

주석 논리: 구간, 격자, 신뢰도

📍 현재 위치: 6부 · 주석·시간 논리 — 19장. 유래 반환은 모든 도출된 사실에 어디서 왔는지를 레이블로 붙였습니다; 이제 우리는 그 장치를 볼트 하나까지 그대로 유지한 채, 레이블을 얼마나 확신하는지를 말해 주는 단 하나의 숫자로 바꿔 끼웁니다.

고전 논리(classical logic)는 모든 사실에 두 가지 판정 중 하나만을 내립니다: 성립하거나, 성립하지 않거나입니다. 이는 사람이 손수 다듬은 온톨로지에는 정확히 옳지만, 이 시리즈의 나머지 부분이 다루는 지저분한 지식 베이스 — 잡음 섞인 텍스트를 읽는 정보 추출 파이프라인이 채워 넣었거나, 신뢰도가 제각각인 여러 출처로부터 병합된 지식 베이스 — 에는 정확히 틀린 것입니다. 그런 곳에서는 사실이 확실하게 참인 경우가 드물며, 어느 정도까지만 참입니다. 이 장은 그 정도를 각 사실에 하나의 숫자로 붙여 놓고, 그런 숫자들을 결합하는 산술이 우리가 이미 만난 적 있는 격자(lattice)임을 보이며 — 그리고 이 장의 핵심 결론으로 — 그 격자가 바로 앞 장에 나온 반환(semiring)과 정확히 같은 것임을 보여, 주석 달린 추론기가 단 한 줄의 새 코드도 필요로 하지 않게 됩니다.

쉽게 말하면

환승이 있는 여행을 계획한다고 상상해 보십시오. 하나의 일정은 그중 가장 불안정한 구간만큼만 믿을 수 있습니다 — 지연 확률이 50퍼센트인 항공편이 하나만 있어도, 다른 모든 구간이 아무리 믿을 만하더라도 전체 일정은 50퍼센트로 끌려 내려갑니다. 이것이 바로 논리곱(conjunction)입니다: 모든 구간이 제대로 작동해야 하므로, 일정은 그 가장 약한 연결 고리를 물려받습니다. 그런데 서로 다른 두 개의 일정이 모두 목적지에 데려다준다고 해 봅시다. 이제 여러분은 둘 중 더 나은 쪽을 택하고 더 나쁜 쪽은 무시합니다 — 이것이 바로 논리합(disjunction)입니다: 하나의 선택지만 제대로 작동하면 되므로, 최선의 경우를 유지합니다. 주석 논리(annotated logic)는 이러한 신뢰도의 산술을 정밀하게 다듬은 것입니다: 논리곱은 최솟값을 취하고, 논리합은 최댓값을 취하며, 한 사실의 최종 신뢰도는 그 사실에 도달하는 최선의 경로입니다.

이 장에서 다루는 내용

  • 예/아니오에서 정도로 — 실제 지식 베이스가 왜 등급이 매겨진 진리를 필요로 하는지, 그리고 엄밀한 {0,1}\{0, 1\} 대신 진리값의 집합이 되는 구간 [0,1][0,1].
  • 신뢰도 격자 — 미트 =min\sqcap = \min(논리곱은 그 가장 약한 연결 고리만큼만 강함)과 조인 =max\sqcup = \max(논리합은 최선의 대안을 취함)를, conf_meetconf_join에서 곧바로 읽어냅니다.
  • 반환으로서의 같은 발상([0,1],max,min)([0,1], \max, \min)바로 신뢰도 반환(Confidence semiring)이므로, 지난 장의 provenance_lfp는 새로운 장치가 전혀 없이도 등급이 매겨진 진리를 계산합니다.
  • 괴델 t-노름 — min과 max는 세 가지 표준 퍼지 연결사 중 하나이며, 그것이 그 사촌들 사이 어디에 자리하는지를 우회 없이 표 하나로 보여 줍니다.
  • 실제로 실행한 결과 — reach(p3, p1)은 max(min(0.9,0.8),0.5)\max(\min(0.9, 0.8), 0.5)로 계산되는 신뢰도 0.8을 얻습니다: 강한 두-홉 경로가 약한 직접 엣지를 눌러 이깁니다.
  • 주석 논리 프로그램 — 이 데모 이면에 있는 일반적인 형태: 규칙 몸체는 곱하고, 한 사실의 여러 대안은 더하며, 머리는 그 모든 유도에 걸친 조인을 취합니다.
  • 아직 풀리지 않은 부분 — 신뢰도와 유래(provenance)는 무엇이 그리고 얼마나 확신하는지에 주석을 답니다; 어느 쪽도 언제인지는 말해 주지 않으며, 바로 그 공백을 다음 장이 시간 구간(temporal interval)으로 메웁니다.

예/아니오에서 정도로

진리값이 무엇인지부터 시작해 보겠습니다. 고전 논리에서 해석(interpretation)이란 각 접지 원자(ground atom)를 두 값 중 하나로 보내는 함수 ν\nu("누"라고 읽습니다)이며, 우리는 그 값들의 집합을 {0,1}\{0, 1\}이라고 씁니다 — 거짓에 0, 참에 1입니다. 등급이 매겨진, 즉 주석 달린(annotated) 해석은 단 하나만 바꿉니다: 그 값이 둘 사이의 닫힌 구간 전체 어디든 될 수 있게 허용합니다,

ν:atoms[0,1],\nu : \text{atoms} \to [0, 1],

여기서 [0,1][0,1]은 0부터 1까지(양 끝을 포함하여)의 모든 실수의 집합입니다. ν(cites(p3,p1))=0.5\nu(\text{cites}(p3, p1)) = 0.5는 "p3가 p1을 인용한다고 50퍼센트 확신한다"로 읽으십시오; 1은 확실함이고, 0은 확실한 거짓 또는 단순한 부재이며, 그 사이의 숫자들은 엄밀한 논리로는 표현할 수 없는 등급 매겨진 진리입니다 [1]. 사실 자체는 아무것도 바뀌지 않았습니다 — 여전히 같은 p3, p2, p1입니다 — 오직 각각이 지니는 레이블만 바뀌었습니다. 이것이 "성립하는가?"에서 "우리가 얼마나 확신하는가?"로 가는 최소한의 변화이며, 아래의 모든 것은 그 변화가 우리에게 강제하는 산술입니다.

이 장 전체를 관통하는 예시는 세 개의 엣지로 이루어진 인용 그래프, 즉 각 엣지가 유래 토큰(provenance token)과 신뢰도를 모두 지니는 유향 비순환 그래프(directed acyclic graph, DAG)입니다(annotated.py 151–155번째 줄):

EDGES = [
("p3", "p2", "r", 0.9),
("p2", "p1", "s", 0.8),
("p3", "p1", "t", 0.5),
]

강한 두-홉 경로 p3 → p2 → p1(엣지 rr은 0.9, ss는 0.8)과 약한 직접 엣지 p3 → p1(엣지 tt는 0.5)이 있습니다. 이 장이 끝날 무렵이면 이 다섯 개의 숫자가, 어떤 손짓 논증도 없이, p3가 p1에 도달한다는 것을 우리가 정확히 얼마나 확신해야 하는지를 결정해 줄 것입니다.

신뢰도 격자: 미트는 min, 조인은 max

일상적인 \le로 순서가 매겨진 구간 [0,1][0,1]은 하나의 격자(lattice)입니다: 임의의 두 값은 최대하계(greatest lower bound)와 최소상계(least upper bound)를 가지며, 여기서 이는 그저 둘 중 더 작은 값과 더 큰 값일 뿐입니다. 최대하계는 \sqcap로 쓰는 미트(meet)이며 그것은 min\min입니다; 최소상계는 \sqcup로 쓰는 조인(join)이며 그것은 max\max입니다:

xy  =  min(x,y),xy  =  max(x,y).x \sqcap y \;=\; \min(x, y), \qquad x \sqcup y \;=\; \max(x, y).

이 두 기호를 신뢰하기 전에 먼저 해독해 봅시다. 미트 \sqcap논리곱(conjunction) — "그리고" — 을 이루는 부분들을 결합하며, 최솟값을 취하는데, 이는 논리곱이 그 가장 약한 논리곱 항(conjunct)만큼만 참이기 때문입니다: 주장들의 사슬은 그중 가장 불안정한 연결 고리보다 더 확실할 수 없습니다. 조인 \sqcup논리합(disjunction) — "또는" — 의 대안들을 결합하며, 최댓값을 취하는데, 이는 논리합이 그 최선의 대안에 의해 충족되기 때문입니다: 어느 한 경로라도 통하면, 그것을 취하고 나머지는 잊어버립니다. 동반 파일에서 이 둘은 한 줄짜리 함수 두 개이며, 각 독스트링(docstring)이 그 읽는 법을 명시합니다(annotated.py 189–197번째 줄):

def conf_meet(*xs) -> float:
"""Lattice meet ⊓ — the confidence of a *conjunction* (weakest link)."""
return min(xs)


def conf_join(*xs) -> float:
"""Lattice join ⊔ — the confidence of a *disjunction* / best alternative."""
return max(xs)

세 엣지의 신뢰도에 대해 두 연산은 정반대의 답을 내놓으며, 그 둘 사이의 간극이야말로 핵심입니다: (0.9,0.8,0.5)=0.5\sqcap(0.9, 0.8, 0.5) = 0.5입니다(가장 약한 연결 고리가 논리곱을 직접 엣지의 0.5까지 끌어내립니다) 반면 (0.9,0.8,0.5)=0.9\sqcup(0.9, 0.8, 0.5) = 0.9입니다(논리합은 가장 강한 엣지까지 올라갑니다) [2].

신뢰도가 주석으로 달린 인용 그래프를 p3, p2, p1이라는 레이블이 붙은 세 개의 논문 노드로 그린 다이어그램. 강한 두-홉 경로가 p3에서 p2를 거쳐 p1로 이어지며 그 두 엣지에는 신뢰도 0.9와 0.8이 표시되어 있고, 별도의 약한 직접 엣지가 p3에서 p1로 곧장 이어지며 0.5로 표시되어 있다. 두-홉 경로를 따라 작은 미트 배지가 0.9와 0.8의 min이 0.8과 같음을 보여 주고, 노드 p1에서는 조인 배지가 그 0.8과 직접 경로의 0.5의 max가 0.8과 같음을 보여 주며, 두-홉 갈래가 승자로 강조되어 있다. 그림 왼쪽을 따라 수직 막대 하나가 아래쪽 0부터 위쪽 1까지 이어지는 진리 격자를 나타내며, 미트는 아래쪽을 향하는 최대하계로, 조인은 위쪽을 향하는 최소상계로 레이블이 붙어 있다. 모서리의 작은 배지에는 신뢰도 반환(Confidence semiring), max와 min이라고 적혀 있으며, 미트가 괴델 t-노름과 같다는 점을 덧붙이고 있다. 인용 DAG 위의 등급 매겨진 도달가능성: min은 논리곱 경로(가장 약한 연결 고리)를 따라 진행하고, max는 대안적 유도들(최선의 경우) 가운데서 선택하며, 강한 두-홉 0.8이 약한 직접 0.5를 이겨 reach(p3, p1)에 신뢰도 0.8을 부여한다. 저자가 AI의 도움을 받아 직접 제작한 원본 도해.

반환으로서의 같은 발상: 새로운 장치는 없다

바로 여기서 앞 장의 투자가 결실을 맺습니다. 반환(semiring) (K,,,0,1)(K, \oplus, \otimes, 0, 1)이란 담지 집합(carrier set) KK에, 한 사실의 대안적 유도들을 결합하는 "더하기" \oplus하나의 유도의 몸체 안에 있는 사실들을 결합하는 "곱하기" \otimes, 그리고 \oplus의 항등원인 00\otimes의 항등원인 11을 더한 것입니다. 신뢰도(confidence)는 이 틀에 정확히 들어맞습니다 — 그리고 동반 파일은 이를 다섯 개의 반환 가운데 한 줄로 등록해 둡니다(annotated.py 132번째 줄):

CONFIDENCE = Semiring(0.0, 1.0, max, min, "Confidence [0,1]")

따라서 더하기는 max\max(대안들에 대한 조인)이고 곱하기는 min\min(몸체에 대한 미트)입니다: 앞 절의 격자는 바로 하나의 반환입니다. 항등원들도 딱 맞아떨어지는데, 이것이 우연이 아님을 보여 주는 표지입니다: max(x,0.0)=x\max(x, 0.0) = x이므로 0.00.0이 더하기-항등원이고, min(x,1.0)=x\min(x, 1.0) = x이므로 1.01.0이 곱하기-항등원입니다.

반환 구성 요소기호신뢰도(Confidence) 값논리적 해석
담지 집합 KK구간 [0,1][0,1]진리 정도
더하기 \oplusmax\max대안들 가운데 최선논리합 / 최선의 유도
곱하기 \otimesmin\min그룹 중 가장 약함논리곱 / 가장 약한 연결 고리
000.00.0확실히 거짓 / 부재max\max의 항등원
111.01.0확실히 참min\min의 항등원

신뢰도가 반환이기 때문에, 앞 장의 주석 달린 고정점 엔진은 아무 변경 없이 그 위에서 그대로 돌아갑니다 — 불(Boolean), Which, Why, 그리고 다항식 유래를 계산했던 바로 그 provenance_lfp가 이 한 행을 끼워 넣는 것만으로 등급 매겨진 진리를 계산합니다. 이 발상 전체를 떠받치는 줄들은 다음과 같습니다(annotated.py 86–95번째 줄):

ann = dict(edb_annot)
for _ in range(max_iter):
new = dict(edb_annot) # base tokens persist; IDB is recomputed
for head, body in rules:
for sub, prod in _match_body(body, ann, sr, {}, sr.one):
h = _apply(head, sub)
new[h] = sr.plus(new.get(h, sr.zero), prod)
if new == ann:
return ann
ann = new

안쪽 두 줄을 이 레시피 전체로 읽으십시오. prod는 규칙 몸체가 매칭한 모든 사실에 대한 \otimes-곱(여기서는 min\min) — 즉 논리곱 — 으로서 _match_body로부터 도착합니다. 그런 다음 sr.plus(new.get(h, sr.zero), prod)는 그 유도를 \oplus(여기서는 max\max)로 머리의 누적 주석에 접어 넣습니다 — 대안적 유도들에 걸쳐 누적하는 것입니다. 모든 반환은 같은 비순환적 유도를 서로 다른 정보로 읽어내는데, 신뢰도는 그것을 "몸체에 대해서는 min, 유도들에 대해서는 max"로 읽으며, 그 루프는 1권의 최소 고정점 등반이 값만 다시 레이블링된 것입니다.

괴델 t-노름: 퍼지 연결사들 사이의 min과 max

왜 하필 곱셈이 아니라 "그리고"에 min을 쓸까요? 퍼지 논리(fuzzy logic)는 이 물음에 삼각 노름(triangular norm), 또는 t-노름(t-norm)이라는 개념으로 답합니다: 등급 매겨진 논리곱처럼 행동하는 함수 T:[0,1]×[0,1][0,1]T : [0,1] \times [0,1] \to [0,1]로서, 결합법칙과 교환법칙을 만족하고, 각 인자에 대해 단조적이며, T(x,1)=xT(x, 1) = x가 되도록 11을 항등원으로 갖습니다. t-노름은 하나가 아니라 하나의 가족을 이루며, min\min괴델 t-노름(Gödel t-norm)이라 불리는 그 특정 구성원입니다 [2]. 이것이 바로 신뢰도 격자가 사용하는 t-노름이며, 그 사촌들에게는 없는 두 가지 성질을 지닙니다: 멱등적(idempotent)이라는 것(min(x,x)=x\min(x, x) = x이므로, 규칙 몸체가 같은 사실을 두 번 언급해도 대가를 치르지 않습니다 — 그리고 쌍대인 조인 max\max 또한 멱등적이므로, 동일한 경로로 어떤 사실을 다시 유도해도 마찬가지로 아무것도 더해지지 않습니다), 그리고 가능한 t-노름 중 가장 큰 것이라는 점(즉 min 기반 추론이 제공되는 것 가운데 가장 낙관적인 등급 매겨진 논리곱이라는 뜻입니다)입니다.

t-노름xyx \otimes y"xx 그리고 yy"의 해석
괴델(최소)min(x,y)\min(x, y)가장 약한 연결 고리; 멱등적이며 가장 큰 t-노름
곱(product)xyx \cdot y독립적인 증거가 곱해져 내려감
우카시에비치(Łukasiewicz)max(0,  x+y1)\max(0,\; x + y - 1)신뢰도가 정확히 0까지 바닥날 수 있음

두 입력이 모두 불확실한 순간 이 셋은 서로 어긋납니다: min(0.8,0.8)=0.8\min(0.8, 0.8) = 0.8이지만, 곱은 0.640.64를, 우카시에비치 t-노름은 0.60.6을 줍니다. 무엇이 "옳은지"는 자연의 사실이 아니라 모델링의 선택이며 — 이 점은 아직 풀리지 않은 부분 절에서 다시 다룹니다. 이 장과 그 코드는 괴델 t-노름을 선택하는데, 이는 그것이 격자의 미트와, 따라서 신뢰도 반환과 일치하는 것이기 때문입니다; 바로 그 일치 덕분에 우리가 고정점 엔진을 재사용할 수 있었던 것입니다.

실제로 실행한 결과: reach(p3, p1)은 0.8을 얻는다

이제 이 DAG 위에서 조각들을 하나로 모아 봅시다. 도달가능성(reachability)은 두 개의 데이터로그 규칙 — 기저 사례 하나와 재귀 단계 하나 — 입니다(annotated.py 157–160번째 줄):

REACH_RULES = [
(("reach", "?x", "?y"), [("edge", "?x", "?y")]),
(("reach", "?x", "?z"), [("edge", "?x", "?y"), ("reach", "?y", "?z")]),
]

사실 reach(p3, p1)두 개의 유도를 가지며, 바로 이것이 조인 \oplus가 눈에 보이는 일을 하게 만듭니다. 하나는 직접 엣지 tt이며, 신뢰도는 0.5입니다. 다른 하나는 두-홉 경로입니다: 0.9인 edge(p3, p2)reach(p2, p1)과 논리곱으로 결합되며, reach(p2, p1) 자체는 그저 0.8인 엣지 ss이므로, 몸체의 미트는 min(0.9,0.8)=0.8\min(0.9, 0.8) = 0.8입니다. 그러면 머리는 이 두 유도에 대한 조인을 취합니다:

conf(reach(p3,p1))  =  max(min(0.9,0.8)two-hop r,s,  0.5direct t)  =  max(0.8,0.5)  =  0.8.\mathrm{conf}(\text{reach}(p3, p1)) \;=\; \max\big(\underbrace{\min(0.9,\, 0.8)}_{\text{two-hop } r,\,s},\; \underbrace{0.5}_{\text{direct } t}\big) \;=\; \max(0.8,\, 0.5) \;=\; 0.8.
reach(p3, p1)의 유도몸체 사실과 신뢰도몸체에 대한 =min\otimes = \min
직접 엣지edge(p3, p1) = 0.50.5
두-홉 경로edge(p3, p2) = 0.9, reach(p2, p1) = 0.80.8
머리: 유도들에 대한 =max\oplus = \max0.8

여기서 얻는 교훈은 등급 매겨진 도달가능성이 최단 경로가 아니라 최선의 경로를 따른다는 것입니다: 강한 두-홉 경로(0.8)가 약한 직접 엣지(0.5)를 눌러 이기므로, 주석은 0.8에 안착합니다. 이 모듈을 실행하면 정확히 이 결과가, 같은 사실에 대한 다른 네 개의 유래 레이블 및 독립적인 격자 데모와 나란히 출력됩니다 — 다음은 python3 annotated.py의 실제 실행 출력입니다:

reachability of (p3, p1) — direct edge t, plus two-hop path r·s
Boolean : True
Which-prov : ['r', 's', 't']
Why-prov : [['r', 's'], ['t']]
Polynomial : t + r·s
Confidence : 0.8

confidence lattice [0,1]:
⊓(0.9, 0.8, 0.5) = 0.5 (conjunction: weakest link)
⊔(0.9, 0.8, 0.5) = 0.9 (disjunction: best case)

두 개의 "0.8"과 하나의 "0.5"가 서로 다른 이야기를 들려준다는 점에 주목하십시오. Confidence : 0.8 줄은 고정점 답입니다 — 두 경로의 유도 구조를 존중하는, 미트들의 조인입니다. ⊓(0.9, 0.8, 0.5) = 0.5 줄은 세 엣지 전부를 하나의 납작한 논리곱으로 취급하는 격자 데모이며, 그 가장 약한 연결 고리는 직접 엣지의 0.5입니다. 같은 세 숫자, 다른 결합 방식, 다른 결과입니다: 반환(semiring)이 모든 것에 대한 순진한 min보다 여러분에게 더 사 주는 것이 바로 구조입니다.

주석 논리 프로그램: 숫자를 실어 나르는 규칙

이 데모는 하나의 일반적인 패턴, 즉 일반화된 주석 논리 프로그램(generalized annotated logic program)의 한 사례입니다 [3]. 그런 프로그램에서는 모든 사실이 격자에서 뽑아낸 주석을 지니며, 모든 규칙 인스턴스는 격자의 미트(\otimes)로 그 몸체의 주석들을 결합하고, 도출된 원자의 주석은 그것을 결론짓는 모든 규칙 인스턴스에 걸친 조인(\oplus)입니다. 이는 정확히 위의 new[h] = sr.plus(new.get(h, sr.zero), prod) 줄입니다: prod는 한 유도의 몸체에 대한 미트이고, sr.plus는 유도들에 대한 조인을 머리에 누적합니다. 신뢰도 격자에서 이는 "규칙은 그 가장 약한 전제만큼만 강하고, 결론은 그 최선의 규칙 인스턴스만큼 강하다"로 읽히며 — 이것이 바로 두-홉 경로 안의 엣지 하나가 0.8보다 강하지 않았음에도 그것이 reach(p3, p1)을 끌어올릴 수 있었던 이유입니다. 격자를 바꿔 끼우면 같은 프로그램이 유래를 계산하거나, 순수한 불(Boolean) 귀결을 계산하거나, 최단 경로 비용을 계산합니다; 주석은 매개변수이고, 엔진은 고정되어 있습니다.

아직 풀리지 않은 부분

등급 매겨진 신뢰도는 진정으로 유용하지만, 정직하게 말해 그 가장자리에는 두 가지 한계가 자리 잡고 있습니다. 첫 번째는 t-노름의 선택 안에 있습니다. 괴델 min은 독립성(independence)을 무시합니다: 각각 어떤 사실을 0.8로 보증하는 두 개의 독립적인 출처는 아마도 하나만 있을 때보다 더 많은 신뢰를 정당화할 것입니다, 그런데도 min\min — 그리고 실제로 유도들에 대한 max\max도 — 은 답을 0.8에 고정시켜 두는 반면, 확률적인 더하기(product t-노름의 논리합 쌍대인 곱 t-코노름 x+yxyx + y - xy)라면 독립적인 0.8 두 개를 0.96에 가깝게 밀어 올렸을 것입니다. 따라서 min/max 신뢰도는 확률이 아니라 성긴, 의도적으로 낙관적인 회계일 뿐입니다; 격자의 정도(degree)를 마치 확률인 양 취급하는 것은 그 숫자가 뜻하는 바를 조용히 과장하는 범주 오류(category error)입니다.

두 번째 한계는 주석이 전혀 말할 수 없는 것입니다. 신뢰도는 얼마나 확신하는지에 답합니다; 앞 장의 유래는 어디서 왔는지에 답합니다. 어느 쪽도 언제인지는 답하지 않습니다. 사실 faculty(alice)는 시간을 초월한 어떤 방식으로 0.8만큼 참인 것이 아닙니다 — 그것은 어떤 구간에 걸쳐, 이를테면 2012년부터 2025년까지 참이고, 그 밖에서는 거짓입니다. [0,1][0,1]에서 나온 단 하나의 숫자에는 시작과 끝을 실어 나를 여지가 없으므로, 실제 지식의 온전한 한 차원 — 시간에 걸친 유효성 — 전체가 이 장의 장치 바깥에 남습니다. 그 빠진 차원이야말로 다음 장이 덧붙이는 바로 그 주석입니다.

왜 중요한가

주석 논리는 엄밀한 기호적 추론에서 이 시리즈의 신경망 쪽 절반으로 건너가는 가장 깔끔한 다리입니다. 학습된 추출기나 신경망 링크 예측기는 "참"을 내놓지 않습니다; 그것은 [0,1][0,1] 안의 점수 — 즉 하나의 주석 — 를 내놓습니다. 이러한 부드러운 점수들을 격자와 반환에 근거 짓는 것은, 임기응변이 아니라 원칙에 따라 규칙 집합을 통해 그것들을 전파하는 방법을 줍니다: 규칙 몸체에는 min을, 유도들에는 max를 적용하며, 이는 엄밀한 추론을 돌리는 것과 동일한 고정점 등반으로 계산됩니다. 이것이 바로 4권이 넓혀 나가는 이음매로서, 거기서는 min과 max가 미분 가능한 연산자로 부드러워져 추론기의 신뢰도를 엔드투엔드로 학습시킬 수 있게 됩니다; 여기서 계산한 엄밀한 max(min())\max(\min(\cdot)) 목표값이 바로, 부드럽고 학습 가능한 추론기들이 근사하려고 애쓰는 그 정확한 고정점입니다. 정확한 등급 매겨진 답이 무엇인지 — 0.8, 그리고 그 이유 — 를 아는 것이야말로 학습된 시스템이 옳은 정도에 도달했는지, 아니면 그저 그럴싸해 보이는 정도에 그쳤는지를 확인할 수 있게 해 줍니다.

핵심 용어

  • 주석 달린(퍼지) 해석(annotated (fuzzy) interpretation) — 엄밀한 {0,1}\{0, 1\} 대신 각 원자를 [0,1][0,1] 안의 진리 정도로 보내는 함수; 레이블은 바뀌지만 사실은 바뀌지 않습니다.
  • 신뢰도 격자(confidence lattice)\le로 순서가 매겨진 구간 [0,1][0,1]이며, 미트 =min\sqcap = \min(가장 약한 연결 고리)과 조인 =max\sqcup = \max(최선의 경우)를 가집니다.
  • 미트(meet) / 조인(join) — 논리곱을 결합하는 최대하계 min\min과, 논리합의 대안들을 결합하는 최소상계 max\max입니다.
  • 신뢰도 반환(Confidence semiring)([0,1],max,min,0.0,1.0)([0,1], \max, \min, 0.0, 1.0): 더하기는 max\max, 곱하기는 min\min이므로, 이 격자는 하나의 반환이며 주석 달린 고정점 엔진은 그 위에서 변경 없이 돌아갑니다.
  • t-노름(triangular norm)[0,1][0,1] 위의 등급 매겨진 논리곱; min\min은 곱 t-노름 및 우카시에비치 t-노름과 나란히 놓이는, 멱등적이고 가장 큰 괴델 t-노름(Gödel t-norm)입니다.
  • 일반화된 주석 논리 프로그램(generalized annotated logic program) — 사실들이 격자 주석을 지니는 프로그램; 각 규칙 인스턴스는 그 몸체를 미트하고 각 머리는 그 유도들에 대해 조인합니다.
  • 등급 매겨진 도달가능성 답 — reach(p3, p1)은 신뢰도 max(min(0.9,0.8),0.5)=0.8\max(\min(0.9, 0.8), 0.5) = 0.8을 가집니다: 강한 두-홉 경로가 약한 직접 엣지를 이깁니다.

이 장이 이끄는 곳

신뢰도와 유래는 우리에게 한 사실이 얼마나 확실한지어디서 왔는지를 말해 주었으며, 둘 다 각 사실에 단 하나의 레이블을 매달고 그 레이블들을 반환으로 결합함으로써 그렇게 했습니다. 다음 장 시간 추론은 레이블의 종류를 숫자에서 시간의 구간(interval of time)으로 바꾸고, 이 장이 답할 수 없었던 물음을 던집니다: 사실이 언제 성립하며, 두 시간 폭은 서로 어떤 관계에 있는가? 그것은 앨런의 구간 대수(Allen's interval algebra)로 답합니다 — 두 구간이 서로 상대적으로 놓일 수 있는 열세 가지 방식이며, 그 합성 표는 동반 파일이 손으로 입력하는 대신 직접 계산해 냅니다 — 이는 faculty(alice)를 시간을 초월한 0.8에서, 시작하고 끝나며 학계 세계의 타임라인 안에서 다른 모든 사실과 나란히 놓이는 하나의 사실로 바꾸어 놓습니다.