RNNLogic과 기호 기준선 AnyBURL
📍 현재 위치: 4부 · 미분 가능 규칙 학습 — 14장. 신경 정리 증명: NTP와 CTP는 단일화(unification) 그 자체를 부드럽게 만들고 모든 증명 경로의 대가를 연산으로 치렀습니다; 이 장은 논리를 통해 단 하나의 경사도 흘려보내지 않고 동일한 규칙을 학습하는 두 시스템으로, 그리고 그 모든 경사가 실제로 무엇을 사들였는지 말해 주는 정직한 성적표로 4부를 마무리합니다.
4부는 이제 "어떤 규칙이 이 그래프를 설명하는가"라는 물음에 대해 두 개의 미분 가능한 답을 지어 왔습니다: Neural-LP와 DRUM은 규칙의 구조를 관계 행렬들에 대한 주의로 완화했고, NTP는 규칙의 매칭을 부드러운 단일화(unification)로 완화했습니다. 둘 다 그 완화의 대가를 물려받습니다: 조밀한 텐서 곱, 가짜 부드러운 증명, 그리고 연속적인 대리물을 따라 경사 하강함으로써 이산 구조를 발견해야 하는 경사들입니다. 이 마지막 장은 그런 모든 방법이 반드시 견주어져야 할 두 개의 규율 잡힌 대안을 제시합니다. RNNLogic은 규칙을 이산적으로 유지한 채 규칙 집합을 잠재 변수로 다루며, 생성기가 연쇄 규칙을 제안하고 추론기가 그것을 통해 정답을 채점하는 기댓값 최대화(expectation-maximization, EM) 루프로 학습됩니다 [1]. AnyBURL(Anytime Bottom-Up Rule Learning, 언제라도 멈출 수 있는 상향식 규칙 학습)은 한 걸음 더 나아가 경사에 의한 학습을 완전히 버립니다: 접지 경로 하나를 표본으로 뽑아, 그것을 작고 고정된 규칙 템플릿 가족으로 일반화하고, 각 규칙을 그 접지들의 표본 헤아림(작은 장난감 그래프에서는 전수)으로 채점한 다음, 후보 엣지들을 그 최선의 규칙의 신뢰도로 순위 매깁니다 [2]. 어디에도 미분이 단 하나도 없습니다. 이 장이 존재하는 이유이기도 한 불편한 발견은, 두 번째 방식이 표준 지식 그래프 완성 벤치마크에서 당시 신경망 최신 기술과 경쟁력이 있거나 그것보다 나았음이 입증되었고 [2], 비교 문헌이 바로 이런 종류의 규칙 기반 시스템들을 계속 선두 그룹에서 발견한다는 것입니다 [3]. 동반 모듈 rule_mining.py는 학계 그래프 위에서 둘 다를 실행하며, 이 장의 모든 숫자는 그 코드로 단언되거나 커밋된 출력 옆에서 손으로 유도됩니다.
같은 사건 파일 더미를 다루는 두 명의 형사를 상상해 보십시오. 첫 번째는 수첩을 든 베테랑입니다: 그녀는 해결된 사건 하나를 읽고 그것이 시사하는 패턴을 적어 둔 다음("범인은 공동 직장을 통해 피해자를 알고 있었다"), 모든 파일을 다시 훑으며 그 패턴이 얼마나 자주 들어맞고 얼마나 자주 틀렸는지를 헤아리고, 성공 비율과 함께 그 패턴을 정리해 두는데, 한두 번밖에 보지 못했다면 살짝 깎아 둡니다. 용의자를 지목하라고 하면, 그녀는 적용 가능한 자신의 가장 강력한 패턴 단 하나를 인용합니다. 두 번째 형사는 아카데미를 운영합니다: 훈련생이 이론을 제안하고, 현장 요원이 해결된 사건들에 맞서 각 이론을 시험하며, 매 라운드가 끝나면 훈련생은 정확히 통했던 이론들만으로 다시 훈련받아 제안이 점점 날카로워집니다. 두 형사 모두 이론을 조금씩 "슬쩍 밀어" 조정하는 법이 없습니다; 이론은 통째로 유지되거나 버려집니다. 첫 번째가 AnyBURL이고 두 번째가 RNNLogic이며, 이 장의 스캔들은 수첩을 든 베테랑이 여전히 이겨야 할 상대라는 것입니다.
이 장에서 다루는 내용
- 기준선 장이 존재하는 이유: 빠른 기호적 채굴기가 표준 벤치마크에서 당시 신경망 최신 기술과 경쟁력이 있고 종종 그것보다 낫다는 이 분야의 발견, 그리고 2권과 3권이 이미 세워 둔 방법론적 원칙: 모든 신경망 주장에는 기호적 통제군이 필요하다는 것.
- AnyBURL의 언어 편향, 해독됨: 하나의 표본 접지 경로가 정확히 세 가지 템플릿 형태(C, AC1, AC2)로 일반화되는 방식을, 학계 세계의 구체적인 경로 bob → carol → erin 위에서 걸어 보며, 각 형태에서 정확히 어떤 상수가 변수가 되는지와 함께 다룹니다.
- 정직한 헤아림으로서의 신뢰도: 분모에 있는 비관 상수(pessimism constant)로 감쇠된, 몸체 접지에 대한 지지도(support)의 비율을 동반 코드에서 전수 계산하고, 독립된 중첩 루프 손 헤아림과 같음을 단언합니다.
- 최댓값에 의한 추론: 후보들을 사전식 동점 처리와 함께 최선의 발화 규칙으로 순위 매기는 방법을 노이즈-오어(noisy-or) 집계와 견주며, 홀드아웃 엣지들에 대한 커밋된 비교를 정직하게 읽어 내고, 노이즈-오어가 왜 상관된 규칙들을 이중으로 헤아리는지를 다룹니다.
- RNNLogic의 통계적 틀: 잠재 변수로서의 규칙, 생성기-추론기 분리, 그리고 항별로 유도된 EM 루프: E-단계의 규칙 점수, 상위 K개 선택, M-단계의 감쇠된 최대우도 재적합.
- 커밋된 EM 추적: 출력된 모든 숫자(1.5300, 0.504545, 0.876136)를 손으로 다시 유도하는 세 번의 반복, 그리고 이 규모에서 무엇이 수렴을 쉽게 만들었는지에 대한 정직한 해석.
- 이 부의 마감 결산: 보정되지 않은 신뢰도, 집계를 무너뜨리는 규칙 중복, 그리고 연쇄 형태 규칙 언어의 표현력 한계.
이 부가 독자에게 빚진 통제 실험
2권은 하나의 규율을 세웠습니다: 추론기의 출력은 인상이 아니라 의미론에 맞서 검사된다는 것입니다. 3권은 기하학을 위해 이를 되풀이했습니다: 모든 임베딩 모델은 고정된 무작위 기준선과 나란히 동일한 필터링된 순위 매김 프로토콜에 맞서 실행되어, "모델이 무언가를 학습했다"는 것이 기분이 아니라 측정된 여백이 되도록 했습니다. 4부는 세 개의 장을 규칙 학습을 미분 가능하게 만드는 데 써 왔고, 이제 같은 규율이 통제군을 요구합니다: 경사가 전혀 없는 방법이 같은 규칙을 채굴하고 같은 엣지들을 그만큼 잘 또는 더 잘 순위 매긴다면, 미분 가능성은 짐을 지는 부분이 아니었던 것입니다.
그 통제군은 가설이 아닙니다. AnyBURL 자신의 평가는 경로 표본추출과 헤아림만을 사용하여, 당시 신경망 최신 기술과 경쟁력 있거나 그것보다 나은 결과를 아주 적은 연산량으로 보고했습니다 [2]. 그 이유는 명료하게 진술해 둘 가치가 있는데, 모든 규모에서 되풀이되기 때문입니다: 지식 그래프 완성은 정밀하고 고신뢰도인 규칙성에 보상을 주며, 후보 규칙들을 열거하고 그 접지들을 정확히 헤아리는 기호적 채굴기는 그런 규칙성을 찾는 데 매우 능합니다. 반면 최댓값 집계(단 하나의 최선 규칙으로 순위 매기기)는 여러 약한 상관관계가 하나의 강한 법칙을 억누르지 못하게 막는 강력한 귀납적 편향입니다. 미분 가능한 학습기는 매끄러워진 대리물을 통해 같은 규칙성을 다시 발견해야 하며, 그 매끄러움은 공짜가 아닙니다.
동반 코드는 이 통제군을 진행 중인 예시 위에서 무대에 올립니다. 그래프는 3권의 분할이며, 가져와서 다시 타이핑하지 않습니다: 관측된 15개의 학습 엣지, 홀드아웃된 3개, 그리고 kg.py(79–122행)의 필터링된 순위 매김 프로토콜을 변경 없이 재사용합니다. 채굴 대상은 grandAdvisor이며, 이 모듈은 관측된 advises 엣지들을 합성하여 그 사실들을 유도할 뿐 주장하지 않으므로, 정답 기준은 1권의 규칙을 가정한 것이 아니라 적용한 것입니다(rule_mining.py 110–114행). 관측된 지도 사슬이 alice → bob → carol → erin이므로(엣지 bob → dave는 홀드아웃되어 있습니다), 정확히 두 개의 grandAdvisor 사실이 유도 가능합니다: (alice, carol)과 (bob, erin)입니다.
어느 방법이든 실행되기 전에 표현 장치 하나가 필요합니다. 연쇄 규칙은 엣지를 거꾸로 걸을 수 있어야 하므로("내 지도교수의 소속 기관"은 advises를 역방향으로 걷습니다), 관측된 모든 엣지 (h, r, t)("머리 개체 h가 관계 r로 꼬리 개체 t와 관련되어 있다"로 읽습니다)는 역엣지 (t, inv_r, h)와 함께 두 배로 늘어납니다. 이 모듈은 그 결과를 부호 있는 그래프(signed graph)라 부릅니다: 15개의 학습 트리플로부터 나온 10개의 부호 있는 관계(기본 5개, 역방향 5개)와 30개의 유향 엣지입니다(rule_mining.py 87–104행).
AnyBURL: 하나의 접지 경로에서 나온 세 가지 일반화
AnyBURL은 상향식(bottom-up)입니다: 규칙 문법에서 시작해 예화하는 것이 아니라 데이터에서 시작해 추상화합니다. 한 번의 반복은 접지 경로(ground path), 곧 관측된 사실의 머리 개체에서 시작해 그 꼬리에서 끝나는 그래프를 관통하는 구체적인 걷기 하나를 표본으로 뽑습니다. 학계 그래프에서, 유도된 사실 grandAdvisor(bob, erin)과 그것을 설명하는 두 엣지짜리 걷기를 살펴봅시다:
접지 경로는 상수만을 언급합니다. AnyBURL의 언어 편향(language bias), 곧 그것이 고려할 의향이 있는 규칙 형태들의 고정된 메뉴 전체는, 단 하나의 질문에 대한 답입니다: 이 상수들 가운데 어느 것이 변수가 되는가? [2] 세 가지 답이 동반 코드의 세 템플릿을 만들며, 커밋된 실행은 바로 이 경로의 세 가지 일반화를 모두 출력합니다:
[2] one ground path, three generalizations (AnyBURL's templates)
path: bob -advises-> carol -advises-> erin head: grandAdvisor(bob, erin)
C : grandAdvisor(X,Y) <- advises(X,A), advises(A,Y)
AC1: grandAdvisor(X,erin) <- advises(X,A), advises(A,erin)
AC2: grandAdvisor(bob,Y) <- advises(bob,A), advises(A,Y)
| 템플릿 | 무엇이 일반화되는가 | 위 경로에서 나온 규칙 | 해석 |
|---|---|---|---|
| C(순환형) | 양 끝점 모두: bob → X, erin → Y, carol → A | grandAdvisor(X,Y) ← advises(X,A), advises(A,Y) | 두 머리 변수 모두 몸체 사슬을 통해 묶인다; 규칙이 "순환을 닫는다" |
| AC1(비순환형, 꼬리 상수) | 머리 쪽 끝만: bob → X; erin은 그대로 | grandAdvisor(X,erin) ← advises(X,A), advises(A,erin) | 자신의 지도학생이 erin을 지도하는 사람은 누구든 erin의 조부 지도교수(grand-advisor)다 |
| AC2(비순환형, 머리 상수) | 꼬리 쪽 끝만: erin → Y; bob은 그대로 | grandAdvisor(bob,Y) ← advises(bob,A), advises(A,Y) | bob은 자신의 지도학생이 지도하는 누구에게든 조부 지도교수다 |
중간 개체 carol은 언제나 변수가 됩니다; 그것을 상수로 유지하면 규칙은 오직 carol을 통해서만 발화하게 되는데, 이는 그저 원래 경로를 다시 진술한 것일 뿐입니다. C 형태는 일반 법칙이고, AC1과 AC2는 개체별 규칙성인데, 실제 그래프에서는 짐작보다 더 중요합니다(많은 사실은 보편 법칙보다는 특정한 인기 개체에 관한 규칙, 이를테면 "X는 mit에 소속되어 있다"에 의해 가장 잘 예측됩니다). 이름에 관한 한 가지 주의 사항이 있습니다: 위의 AC1과 AC2라는 이름표는 동반 코드의 것이며, 마찬가지로 정확히 세 가지 유형을 갖는 공식 발표된 분류법은 그 공간을 다르게 나눕니다 [2]. 그 논문의 C는 동반 코드의 C와 같습니다. 그러나 논문 자신의 AC1은 몸체 사슬이 상수에서 끝나는 비순환 형태입니다; 규칙은 언제나 각 관계를 그 역방향으로 뒤집어 다시 쓸 수 있으므로(부호 있는 그래프는 정확히 이를 위해 존재합니다), 위 동반 코드의 상수 하나짜리 규칙 둘 다는 그 단일 유형의 사례입니다. 논문 자신의 AC2, 곧 몸체가 다른 어디에도 나타나지 않는 새로운 변수에서 끝나는 비순환 형태는, 동반 코드가 버리는 형태입니다: 13개 개체짜리 그래프에서는 아무것도 더해 주지 않기 때문입니다(rule_mining.py 127–133행).
채굴기 자체는 네 단계의 중첩 구조입니다(rule_mining.py 200–217행): 관측된 머리 사실마다, 그 양 끝점 사이의 몸체 경로들을 열거하고, 각 경로를 세 가지 방식 모두로 일반화한 다음, 서로 다른 규칙마다 점수를 매깁니다. 두 가지 세부 사항이 헤아림을 정직하게 지켜 줍니다. 첫째, paths_between은 경로가 어느 방향으로든 머리 엣지 자체를 밟는 것을 거부하므로, 어떤 사실도 결코 스스로를 설명하지 않습니다(136–158행). 둘째, 공식 시스템이 시간 예산 아래에서 경로를 표본추출하는 곳에서, 이 장난감 그래프는 길이 2 이하의 모든 경로를 전수 열거할 수 있을 만큼 작습니다; 표본추출을 전수 열거로 대체한 이 치환은 모듈 독스트링에서 명시적으로 선언되어 있으며(26–31행) 어떤 공식도 바꾸지 않습니다.
"어떤 규칙이 이 그래프를 설명하는가"에 대한 두 가지 규율 잡힌 답: AnyBURL은 템플릿으로 일반화된 경로들의 접지를 헤아려 최선의 규칙으로 순위를 매기고, RNNLogic은 규칙 집합을 잠재 변수로 다루며 규칙 선택과 생성기 재적합을 번갈아 수행한다.
저자가 AI의 도움을 받아 직접 제작한 원본 도해.
신뢰도, 저울에 손끝을 얹은 헤아림의 비율
채굴된 규칙마다 하나의 점수가 매겨지며, 그 점수는 헤아림들의 비율입니다. 두 가지 헤아림이 필요합니다. 규칙의 몸체 접지(body grounding)는 몸체 사슬이 관측된 그래프 위에서 성립하도록 규칙의 머리 변수들에 개체를 배정하는 것 하나이며, 지지도(support)는 그 접지들 가운데 머리 원자 또한 알려진 사실인 것의 개수입니다. 규칙 에 대해, AnyBURL의 신뢰도는 이 둘을 나누되 항 하나를 추가합니다 [2]:
비관 상수(pessimism constant) 는 분모에 더해지는 고정된 양수이며, 그 전체 목적이 작은 표본을 불신하는 데 있는 라플라스식 감쇠입니다: 단 하나의 접지에서 한 번 성공한 것으로 관측된 규칙이 백 개 중 백 번 성공한 규칙과 같은 점수를 받아서는 안 됩니다. 일 때, 하나 중 하나는 점을 받는 반면 가상의 백 개 중 백 개는 점을 받을 것입니다; 감쇠는 증거가 쌓일수록 사라집니다. 공식 시스템은 유용한 규칙이 수백 개의 접지를 갖는 규모에 알맞은, 고정된 전역 설정인 를 사용합니다; 동반 코드는 을 사용하는데(rule_mining.py 72행), 장난감 그래프에서는 모든 지지도 헤아림이 한 자릿수이고, 5라는 감쇠는 규칙집 전체를 0을 향해 눌러 버릴 것이기 때문입니다(정답 규칙은 대신 점을 받을 것이고, 지지도가 1인 모든 규칙은 많아야 으로 무너질 것입니다). 이 상수의 값은 조절 손잡이일 뿐이며, 그 존재가 원칙입니다. 이렇게 규칙을 채점하는 방식은 온톨로지 채굴 전통에서 내려온 것으로, 그곳에서 AMIE는 더 날카로운 밑바탕 질문을 던졌습니다: 그래프가 불완전하고 빠진 사실이 거짓인 사실이 아닐 때, 분모는 대체 무엇을 헤아려야 하는가 [4]? AMIE의 부분 완전성 답은 분모를 정교하게 다듬으며, AnyBURL은 단순한 닫힌 세계 헤아림을 유지한 채 가 그 불신을 흡수하도록 둡니다.
동반 코드는 그 비율을 템플릿별로 전수 계산합니다(rule_mining.py 170–197행):
def confidence(rule: tuple) -> tuple[float, int, int]:
"""AnyBURL's sampled confidence, computed exhaustively here:
conf(rule) = support / (#body groundings + pc)
..."""
kind, head_rel, chain = rule[0], rule[1], rule[2]
facts = HEAD_FACTS[head_rel]
if kind == "C":
# groundings: every (x, y) pair connected by the chain
pairs = [(x, y) for x in kg.ENTITIES for y in chain_reach(x, chain)]
support = sum((x, y) in facts for x, y in pairs)
n_ground = len(pairs)
이제 정답 규칙 grandAdvisor(X,Y) ← advises(X,A), advises(A,Y)에 대해 손으로 헤아려 봅시다. 관측된 advises 엣지는 alice → bob, bob → carol, carol → erin입니다. 두 개의 advises 엣지로 이루어진 사슬: (alice, bob, carol)과 (bob, carol, erin)이며, 세 번째는 없습니다. 학습 집합에서 erin은 아무도 지도하지 않기 때문입니다. 따라서 정확히 2개의 몸체 접지가 있습니다. 이 그래프에서는 몸체를 만족하는 각 머리 변수 쌍에 그것을 잇는 사슬이 정확히 하나씩 있으므로, 사슬 수와 머리 변수 쌍 수(위 정의)를 세면 같은 값이 나옵니다. 바로 그렇기 때문에 아래의 사슬별 중첩 루프는 채굴기의 쌍별 셈에 대한 타당한 독립 검사입니다. 두 사슬이 제안하는 머리 쌍은 (alice, carol)과 (bob, erin)이며, 둘 다 유도된 grandAdvisor 사실이므로 지지도는 2입니다:
이는 단순히 출력되는 것이 아니라 단언됩니다. 하니스 run()은 채굴기와 아무것도 공유하지 않는 코드인 kg.TRAIN에 대한 독립된 중첩 루프 한 쌍으로 두 헤아림을 다시 계산하고, 정확한 동등성을 요구합니다(rule_mining.py 361–374행):
ind_ground = ind_sup = 0
for x, r1, a in kg.TRAIN:
if r1 != "advises":
continue
for a2, r2, z in kg.TRAIN:
if r2 == "advises" and a2 == a:
ind_ground += 1 # body: adv(x,a), adv(a,z)
ind_sup += (x, z) in GOLD_GA # head: grandAdvisor(x,z)
gold_c = ("C",) + GOLD_RULE
conf, sup, ng = mined[gold_c]
assert (sup, ng) == (ind_sup, ind_ground) == (2, 2), \
f"gold rule counts {(sup, ng)} != hand count {(ind_sup, ind_ground)}"
두 번째 단언(376–377행)은 이 규칙이 채굴기가 찾아낸 모든 것의 신뢰도 순위에서 맨 위에 있는지를 검사합니다. 커밋된 규칙집은 둘 다를 확인해 주며, 지지도 ≥ 1 관문을 통과한 14개 규칙 가운데 정답 규칙이 맨 위에 있습니다:
[3] the mined rulebook (14 rules with support >= 1; conf = support/(groundings + 1))
conf sup/gnd rule
0.667 2/2 grandAdvisor(X,Y) <- advises.advises
0.500 1/1 affiliated(X,mit) <- advises.affiliated
0.500 1/1 grandAdvisor(X,carol) <- advises.advises
0.500 1/1 grandAdvisor(X,erin) <- advises.advises
0.500 1/1 affiliated(alice,Y) <- advises.affiliated
0.500 1/1 affiliated(bob,Y) <- inv_advises.affiliated
0.500 1/1 grandAdvisor(alice,Y) <- advises.advises
0.500 1/1 grandAdvisor(bob,Y) <- advises.advises
gold chain rule conf = 0.666667 == hand-counted 2/(2+1) (asserted, and the top rule overall)
이 규칙집을 그래프의 사회학으로 읽어 봅시다. 일반 법칙이 맨 위에 앉아 있습니다. 그 아래에는 그 자신의 AC1/AC2 특수화들이 각각 0.5점을 받고(접지 하나, 성공 하나, 감쇠됨), 진짜로 유용한 곁가지 지식이 등장합니다: affiliated(X,Y) ← advises(X,A), affiliated(A,Y), 곧 "당신의 지도학생의 소속 기관은 당신의 것이다"가 신뢰도 1/3로 채굴되고, 그 역방향 해석인 "당신의 지도교수의 소속 기관은 당신의 것이다"는 1/4입니다. 맨 아래에는 거짓 동료 어림법(colleague heuristic)인 advises(X,Y) ← affiliated(X,A), inv_affiliated(A,Y), 곧 "당신은 자신과 소속 기관을 공유하는 누구든 지도한다"가 앉아 있는데, 그 몸체가 8개의 접지를 갖고 그 가운데 단 하나만이 참인 지도 쌍이기 때문에 로 올바르게 강등됩니다. 경사가 아니라 헤아림이 이들을 정렬했습니다.
최댓값에 의한 추론, 그리고 노이즈-오어를 위해 되돌아온 유령
채굴된 규칙집은 다음과 같이 후보 엣지를 순위 매깁니다: 규칙은 그 머리 관계가 r이고 그 몸체 사슬이 h에서 t로 이어질 때(AC 상수가 일치할 때) 후보 (h, r, t)에서 발화하며, 각 후보는 발화한 규칙들의 신뢰도를 집계하여 채점됩니다. AnyBURL의 선택은 최댓값 집계(max-aggregation)입니다: 최선의 발화 규칙으로 채점하고, 동점이면 두 번째로 좋은 것으로, 그다음 세 번째로 사전식 비교를 통해 동점을 처리합니다 [2]. 동반 코드는 정확히 그것을 0으로 채운 3-튜플로 인코딩하며, 파이썬은 이를 공짜로 사전식으로 비교합니다(rule_mining.py 251–259행); 논문의 한계 없는 동점 처리를 세 성분으로 잘라 내는 것은 동반 코드의 단순화이며, 이는 이 그래프에서 정확한데 어떤 후보도 두 개보다 많은 규칙에 맞지 않기 때문입니다(399–412행의 다중 발화 감사는 규칙 두 개짜리 후보 단 하나만을 찾아내며 그보다 깊은 것은 없습니다):
def make_max_scorer(mined: dict):
"""AnyBURL's ranking: order candidates by best rule confidence, break
ties by the next-best rule (lexicographic) — encoded as a 3-tuple score,
zero-padded, which Python compares exactly lexicographically."""
def score(h: str, r: str, t: str) -> tuple[float, float, float]:
c = fired_confs(mined, h, r, t)
return (c[0] if c else 0.0, c[1] if len(c) > 1 else 0.0,
c[2] if len(c) > 2 else 0.0)
return score
자연스러워 보이는 대안은 발화한 각 규칙을 독립적인 증거로 다루어 노이즈-오어(noisy-or)로 결합합니다: 신뢰도 를 지닌 규칙들이 발화하면, 후보는 로 채점되는데, 이는 규칙들이 독립적인 동전이라면 "적어도 하나의 규칙이 옳다"는 확률입니다(곱 기호 는 개의 실패 확률을 곱합니다). 2부는 이미 이 오류를 다른 이름 아래에서 만난 적이 있습니다: 실패 확률들을 곱하여 선언의 확률을 계산하는 것은 정확히 분리합 오류(disjoint-sum error)이며, 이는 선언지들이 독립적일 때에만 유효한데, 발화한 규칙들은 결코 독립적이지 않습니다. 그 다수가 같은 접지에서 성공하고 실패하는, 서로의 사소한 변종이기 때문입니다. 최댓값 집계는 구조상 이 이중 헤아림을 거부하며, 공식 발표된 발견은 그것이 실제로도 더 나은 순위를 매긴다는 것입니다 [2].
커밋된 실행은 세 개의 홀드아웃 엣지에 대한 여섯 개의 필터링된 순위 매김 질의에서 둘 다를, 그리고 고정 무작위 기준선까지 비교합니다(kg.evaluate, kg.py 110–122행):
[4] ranking the 3 held-out edges (filtered ranks: tail, head)
test edge max noisy-or random
(bob, advises, dave) [3, 3] [3, 3] [8, 8]
(bob, authored, p1) [1, 1] [1, 1] [3, 2]
(erin, affiliated, cmu) [1, 2] [1, 2] [13, 10]
filtered MRR 0.6944 0.6944 0.21
평균 역순위(mean reciprocal rank, MRR), 곧 질의들에 걸친 1/순위의 평균은 최댓값 열에 대해 한 줄의 산술로 확인해 볼 가치가 있습니다: 여섯 순위는 3, 3, 1, 1, 1, 2이므로, 이며, 이는 무작위 기준선의 0.21보다 세 배 넘게 크고, 하니스는 그 여백을 단언합니다(rule_mining.py 383–384행). 이제 이 모듈 자신이 출력하는 정직한 해석입니다. (bob, authored, p1)에 대한 완벽한 순위는 지식이 아닙니다: 관계 authored에 대해서는 어떤 채굴된 규칙도 전혀 발화하지 않고, 모든 후보가 0 튜플로 채점되며, 필터링된 프로토콜의 동점 관례(동점은 참인 개체에 유리하게 풀립니다, kg.py 88–90행)가 참인 정답에 1위를 건네줍니다. (erin, affiliated, cmu)에서의 1위는 진짜 지식입니다: 채굴된 규칙 "당신의 지도교수의 소속 기관은 당신의 것이다"가 erin의 지도교수인 carol을 통해 발화하며, carol은 cmu에 있습니다. 그리고 (bob, advises, dave)는 3위에 머무는데, 각 방향에서 거짓 동료 어림법 규칙들에 의해 끌어올려진 두 후보가 발화하지 않은 참값보다 높은 점수를 받기 때문입니다.
최댓값 열과 노이즈-오어 열은 똑같으며, 그것을 "집계는 중요하지 않다"로 읽는 것은 정직하지 못할 것입니다. 이 모듈은 그것을 단언만 하는 것이 아니라 여기서 왜 둘이 동점을 이루는지 유도합니다(rule_mining.py 391–412행): 정확히 하나의 규칙에 맞은 후보에서는 이므로 노이즈-오어는 최댓값과 같으며, 두 채점기는 둘 이상의 규칙에 맞은 후보에서만 서로 다를 수 있습니다. 하니스는 프로토콜이 채점하는 정확한 후보 집합, 곧 여섯 질의에 걸친 71개의 필터링된 후보를 열거하여, 정확히 하나의 다중 발화 후보를 찾아냅니다: (bob, advises, bob)이며, 동료 어림법에 의해 (그 AC1 형태)과 (그 C 형태)로 맞습니다. 그 후보에 대해,
엄격한 상승이며(410–411행에서 단언됩니다), 교과서적인 이중 헤아림입니다: AC1 규칙은 C 규칙의 특수화이므로 둘은 완벽하게 상관된 증거인데도, 노이즈-오어는 그것들을 독립적인 증인으로 다룹니다. 여기서는 그 상승이 이미 참값보다 위에 순위 매겨져 있던 후보를 끌어올렸을 뿐이므로 어떤 순위도 옮겨지지 않았습니다; 인기 있는 후보가 수십 개의 상관된 규칙에 맞을 수 있는 실제 그래프에서는, 같은 메커니즘이 체계적으로 틀린 답을 부풀리며, 이것이 최댓값 집계가 이긴다고 이 분야가 보고하는 이유입니다 [2]. 이는 또한 벤치마크 규모에서, 규칙 기반 시스템이라는 부류가 전체 임베딩 동물원과 계속 경쟁력을 유지하는 이유의 일부이기도 합니다: 이 모든 시스템을 나란히 순위 매기는 비교 문헌은 헤아려서 최댓값을 취하는 기준선들이 계속 선두 그룹에 있음을 발견합니다 [3].
언제라도 멈출 수 있는 루프, 그리고 축소판이 지키는 것
공식 시스템은 장난감 버전에는 필요 없지만 독자는 알아야 할 통제 루프를 통해 그 이름 속 "언제라도"(anytime)를 얻습니다 [2]. 채굴은 고정된 시간 조각들(논문의 설정에서는 각각 1초) 안에서 진행됩니다: 각 조각은 현재 길이의 접지 경로들을 표본추출하고 그것들을 일반화합니다; 각 조각이 끝난 뒤 채굴기는 포화도(saturation), 곧 이미 본 적 있는 표본 규칙의 비율을 측정하고, 포화도가 임계값을 넘으면 현재 경로 길이가 소진되었다고 결론짓고 길이를 하나 늘립니다. 품질 관문(논문에서는 규칙이 적어도 두 개의 올바른 예측을 만들어 내야 한다는 기준)이 쓰레기가 규칙집에 들어오지 못하게 막으며, 전체 과정은 언제라도 멈출 수 있습니다. 그래서 anytime입니다: 시계가 멈추는 순간에 존재하는 어떤 규칙집이든 사용 가능하며, 더 많은 시간은 그것을 다듬을 뿐입니다. 이 축소판은 세 개의 템플릿, 감쇠된 신뢰도, 최댓값 순위 매김을 유지하고, 시간 구획화 대신 전수 열거를 택합니다; 모듈 독스트링은 그 절충을 명시적으로 진술하며(rule_mining.py 26–31행), 유지된 수학의 어떤 부분도 그것에 의존하지 않습니다.
RNNLogic: 잠재 변수로서의 규칙 집합
RNNLogic은 AnyBURL의 순수한 헤아림과 완전히 미분 가능한 학습기들 사이의 중간 지점을 차지합니다: 규칙은 이산적으로 남아 있지만, 어떤 규칙을 쓸 것인가가 통계적 추론 문제가 됩니다 [1]. 질의 를 고정합시다. 이는 머리 와 관계 로 연결된 개체들을 묻는 것입니다. 가 관계 에 대한 연쇄 규칙들의 집합을 나타낸다고 합시다; 가 잠재 변수이며, 관측되지 않고 추론되어야 합니다. 두 모델이 그 작업을 나누어 맡습니다. 매개변수 를 지닌 생성기(generator) 는 질의 관계에 대한 규칙 집합을 제안합니다; 공식 시스템에서 이는 각 규칙을 관계 토큰들의 수열로 내놓는 순환 신경망(recurrent neural network, RNN)이며, RNNLogic이라는 이름도 바로 이 신경망 계열에서 왔습니다. 매개변수 를 지닌 추론기(reasoner) 는 그래프 위에서 안의 규칙들이 에서 까지 제공하는 접지 경로들의 가중 헤아림으로 각 후보 정답 를 채점합니다. 정답의 확률은 잠재 규칙 집합에 대해 주변화되며, 가능한 모든 에 대해 합산합니다:
학습은 참인 정답들의 우도를 최대화하며, 규칙 집합에 대한 합산은 다루기 어려운데, 이는 정확히 기댓값 최대화(expectation-maximization, EM)가 만들어진 상황입니다: 현재 모델이 주어졌을 때 잠재 변수를 추론하는 것(E-단계)과, 추론된 잠재 변수가 주어졌을 때 모델을 다시 적합시키는 것(M-단계) 사이를 번갈아 오갑니다. RNNLogic의 E-단계는 생성기의 현재 분포 아래에서 그럴듯하면서도 참인 정답을 맞히는 데 가장 크게 기여하는, 사후확률이 높은 작은 규칙 집합을 찾아냅니다; 그런 다음 M-단계는 그 선택된 규칙들을 관측된 데이터로 다루어 최대우도로 생성기를 그것들에 다시 적합시킵니다 [1]. 경사는 두 모델의 매개변수 갱신, 곧 추론기의 규칙별 가중치와 생성기의 재적합 안에 머무르며, 결코 논리를 통해 흐르지 않습니다: 규칙 접지는 이산적이고 미분되지 않은 계산으로 남습니다.
동반 코드는 각 부분을 축소판으로 만들고 그것을 큰 소리로 밝힙니다(독스트링 rule_mining.py 31–35행). 규칙 공간은 10개의 부호 있는 관계에 대한 길이 1 또는 2의 모든 사슬이며, 대상 관계 grandAdvisor에 대해 개의 후보 몸체입니다(288–289행). 생성기는 이 110개 사슬에 대한 명시적인 범주형 분포가 되며, 균등하게 로 초기화됩니다: 이는 순환 생성기의 정직한 축소판으로, 논문이 신경망을 두는 자리에 조회 테이블을 둔 것입니다. 질의는 두 개의 유도 가능한 grandAdvisor 머리, 곧 정답이 carol인 alice와 정답이 erin인 bob입니다(292–294행). 이 축소판에는 표기법상의 전환이 하나 따라옵니다: 선택된 집합은 한 번에 규칙 하나씩 조립되므로, 이제부터 는 잠재 집합의 원소인 개별 연쇄 규칙 하나하나를 가리키고, 는 그 단일 규칙에 대한 생성기의 범주형 확률로 읽힙니다.
E-단계는 두 항으로 이루어진 기준으로 모든 규칙 를 채점합니다(319–322행):
그리고 인 상위 개의 규칙을 유지합니다. 두 항을 모두 해독해 봅시다. 데이터 항은 규칙이 질의에 답하는 데 얼마나 도움이 되는지를 측정합니다: 각 질의에 대해, 질의의 머리에서 규칙의 몸체 사슬을 걸어가 도달한 개체들을 모으고, 도달한 정답 하나마다 을 주고 도달한 오답 하나마다 를 물립니다(297–306행):
def contribution(chain: tuple[str, ...]) -> float:
"""The E-step's data term: how much the rule helps answer the queries.
Per query, +1 if the chain reaches a gold answer from the query head,
minus WRONG_COST for every non-answer it also reaches:
contrib(z) = sum_q [ |reach ∩ gold| - 0.5 |reach - gold| ]."""
total = 0.0
for h, gold in GA_QUERIES:
reach = chain_reach(h, chain)
total += len(reach & gold) - WRONG_COST * len(reach - gold)
return total
사전 항 는 그 규칙에 대한 생성기의 현재 확률의 로그이며, 작은 상수 로 가중됩니다(73행): 생성기가 이미 믿고 있는 규칙은 선택되는 데 더 적은 증거만 있으면 되는데, 이는 정확히 공식 발표된 E-단계가 지닌 사후확률의 풍미입니다. 그곳에서는 선택 기준이 정답 우도에 대한 규칙의 기여와 생성기 사전 확률을 결합합니다 [1]. 를 작게 유지하면 데이터가 주도권을 쥐게 되며, 사전 확률은 오직 거의 동점인 경우만을 갈라놓습니다.
M-단계는 선택된 규칙들에 대해 생성기를 다시 적합시킵니다. 가중된 관측이 주어졌을 때 범주형 분포의 최대우도 추정(maximum-likelihood estimate, MLE)은 그저 정규화된 가중치이므로, 목표 분포는 선택된 규칙 각각에 만큼의 질량을 두고 나머지에는 0을 둡니다(이 는 새로운 기호로, 목표 분포에 붙는 EM의 표준 이름이며, 질의 와는 무관합니다). 이 갱신은 감쇠된 채로 적용되며, 걸음 크기는 입니다(329–332행):
이는 이전 분포와 MLE 목표의 볼록 혼합입니다. 이 감쇠는 실제 시스템의 경사 훈련을 대신하는 축소판의 대역입니다: 확률적 경사 단계로 훈련되는 RNN 생성기는 곧바로 뛰어드는 것이 아니라 최대우도 적합을 향해 점진적으로 움직이며, 이 혼합은 그 점진적인 움직임을 닫힌 형식으로 재현합니다. 마지막으로 추론기는 가중 투표로 각 질의에 답합니다: 선택된 규칙마다 자신의 생성기 확률을 자신의 사슬이 도달하는 모든 개체에 더하고, argmax(가장 많은 표를 받은 개체)가 예측이 됩니다(335–342행).
세 번의 반복, 다시 유도되는 모든 숫자
커밋된 추적은 한 줄 한 줄 검사할 수 있을 만큼 짧습니다:
[5] RNNLogic's EM: generator mass converging onto the gold rule
iter p_gen(advises.advises) #selected H(gold) H(runner-up) reasoner acc
init 0.009091 - - - -
1 0.504545 1 1.5300 -0.4700 1.00
2 0.752273 1 1.9316 -0.5394 1.00
3 0.876136 1 1.9715 -0.6087 1.00
E-step keeps top-4 rules with H > 0; M-step is the damped MLE (eta = 0.5).
반복 1을 손으로 유도해 봅시다. 정답 규칙의 사슬 advises∘advises(합성 기호 ∘는 "그다음"으로 읽습니다: 먼저 advises 엣지 하나, 그다음 또 하나)는, alice에서 걸으면 정확히 하나의 개체 carol에 도달하는데 이것이 정답이며, bob에서 걸으면 정확히 erin에 도달하는데 이 역시 정답입니다. 어떤 오답 개체도 도달하지 않으므로 입니다. 생성기는 여전히 균등하므로 사전 항은 이고,
이는 출력된 값입니다. 준우승 규칙은 이야기의 나머지 절반을 말해 줍니다: 정답이 아닌 것들 가운데 최고 점수는 이며, 이는 입니다. 이는 몸체 사슬이 아무것도 도달하지 못하는(기여도가 정확히 0인) 규칙이 오직 균등 사전 확률만으로 실어 나르는 값입니다. 질의 머리에서 실제로 개체에 도달은 하지만 오답에 도달하는 모든 규칙은 그보다 낮은 점수를 받습니다: 한 홉짜리 사슬 (advises,)는 alice로부터 bob에, bob으로부터 carol에 도달하는데 둘 다 오답이므로 입니다. 오직 정답 규칙만이 을 넘으므로, 임에도 선택은 정확히 하나의 규칙만을 남기고(그래서 #selected = 1입니다), 목표 분포는 이며, 감쇠된 갱신은 다음을 줍니다
다시 이는 출력된 값입니다. 반복 2와 3은 커지는 사전 확률과 함께 같은 패턴을 되풀이합니다: , 그다음 입니다; 질량은 과 으로 갱신됩니다. 한편 선택되지 않은 모든 규칙의 질량은 매 반복마다 절반이 되므로, 준우승 규칙의 점수는 떨어집니다, , 그다음 입니다: 부자는 더 부유해지고 빈자는 더 가난해지며, 이 갱신의 고정점은 정답 규칙에 모든 질량이 실리는 것입니다. 선택된 규칙으로 투표하는 추론기는 반복 1부터 계속 두 질의 모두에 올바르게 답합니다. 하니스는 이 추적의 끝점만이 아니라 전체 모양을 단언합니다: 정답 규칙의 질량은 에서부터 엄격하게 단조 증가하고, 매 반복마다 E-단계 순위의 꼭대기에 있으며, 과반 질량 위에서 끝나고, 추론기의 정확도는 1로 끝납니다(rule_mining.py 414–423행).
무엇이 이것을 쉽게 만들었는지 읽어 봅시다. 그 해석이야말로 정직한 부분이기 때문입니다. 잠재 구조는 깔끔합니다: 110개 사슬 공간 가운데 정확히 하나의 규칙만이 양의 기여도를 가지므로, E-단계의 선택 문제는 하나의 정답을 가지고 있고 EM 루프는 경쟁하는 설명들 사이에서 진동할 수 없습니다. 그리고 그 기여도는 완전히 열거 가능한 그래프 위에서 정확한 접지 헤아림으로부터 계산됩니다. 실제 규모에서는 이 두 가지 편안함 모두 사라집니다: 규칙 공간은 규칙 길이에 따라 지수적으로 커지고, 거의 동등한 많은 규칙이 공을 나누어 가지며, 접지 헤아림 자체도 근사되어야 합니다. 이 문제의 콜드 스타트 절반에 대한 공식 시스템의 답은 시사하는 바가 큽니다: 그것은 학습 그래프에서 표본추출된 관계 경로들 위에서 생성기를 미리 훈련시키는데, 이는 AnyBURL이 시작하는 것과 같은 상향식 접지 경로 수확이며, 그래서 통계 기계 장치는 경사가 아니라 기호적 경로 증거로 씨뿌려집니다 [1].
아직 풀리지 않은 부분
이 부의 결산을 두 방법 모두가 빚지고 있는 세 가지 부채로 마무리 짓되, 에둘러 말하지 않겠습니다.
첫째, 신뢰도는 확률이 아닙니다. AnyBURL의 과 RNNLogic의 은 확률처럼 보이고 점수처럼 더해지지만, 둘 다 아닙니다: 첫 번째는 표본추출 방식과 비관 상수, 그리고 알려지지 않은 모든 사실을 거짓으로 헤아리는 닫힌 세계 분모 아래에서의 접지 비율입니다; 두 번째는 특정한 감쇠 일정 아래에서 하나의 범주형 분포가 지닌 질량입니다(를 절반으로 줄이면 같은 세 번의 반복은 같은 순위를 유지한 채 다른 숫자로 끝납니다). 5권이 정밀하게 다룰 의미에서, 어느 숫자도 보정되어 있지 않습니다: 로 채점된 모든 엣지 가운데 약 3분의 2가 참이라는 보장은 어디에도 없습니다. 순위 매김은 이를 견뎌 내지만, 그 점수를 가능성으로 읽는 어떤 하류 용도도 그러지 못합니다.
둘째, 규칙 중복은 양방향 모두에서 집계를 무너뜨립니다. 이 장의 다중 발화 후보는 노이즈-오어가 말 그대로 서로의 특수화인 두 규칙을 이중으로 헤아리는 모습을 보여 주었습니다; 그것은 독립성 방식의 집계 아래에서 벌 받는 중복입니다. 그러나 최댓값 집계는 반대 방향으로 실수를 저지릅니다: 각각 독립적으로 세 번 중 두 번 옳은, 진짜로 다양한 열 개의 약한 규칙은 함께 강한 증거를 이루는데, 최댓값은 마치 최선의 규칙 하나만 존재하는 것처럼 후보를 채점하며 이를 그저 무시해 버립니다. 올바른 집계는 어떤 규칙들이 어떻게 상관되어 있는지를 알아야 할 텐데, 이는 두 방법 모두가 모델링하지 않는, 규칙 발화들에 대한 결합 분포입니다. AMIE 방식의 분모 수술 [4]에서부터 학습된 규칙별 가중치 [1]에 이르기까지, 제시된 모든 해법은 증상만을 다룹니다.
셋째, 템플릿 언어는 하나의 한계입니다. 이 장의 모든 것, 그리고 이 부의 모든 것은 연쇄 규칙(그리고 AnyBURL의 상수 하나짜리 변형들)을 학습합니다: 몸체 원자들이 하나의 머리 변수에서 다른 머리 변수까지 한 줄로 꿰어져 있습니다. 어떤 사슬도 "X와 Y가 서로 다른 두 논문을 공저했다"(가지 치는 조인과 부등식을 지닌 몸체), "X는 적어도 세 명의 학생을 지도한다"(헤아림 한정사), 또는 2권의 서로소 공리(부정)를 표현하지 못합니다. Neural-LP, DRUM, 연쇄 템플릿을 쓴 NTP, RNNLogic, AnyBURL 모두 이 편향을 공유하며, 이것이 바로 정직한 기호적 기준선이 신경망 방법들과 맞먹을 수 있는 정확한 이유입니다: 규칙성이 대부분 사슬인 벤치마크에서는, 모두가 같은 작은 언어를 탐색하고 있는 것이며, 미분 가능한 우회로는 거의 벌어들이는 것이 없습니다. 경사 기반 탐색이 열거와 헤아림이 정말로 무너지는 더 큰 규칙 언어에서 언젠가 스스로를 정당화할 것인지는, 이 부가 연구 프론티어에 넘겨주는 열린 질문입니다.
왜 중요한가
메타 교훈은 이 장의 제목을 거꾸로 읽은 것입니다: 어떤 미분 가능 규칙 학습기든 믿기 전에, 기호적 통제군을 돌려 보라는 것입니다. 이것은 수사가 아닙니다; 이는 2권이 밑바닥부터 만든 추론기를 오라클에 맞서 검사할 때 썼던 것과, 3권이 모든 임베딩 모델이 동일한 프로토콜 아래에서 고정 무작위 채점기를 이겨야 했을 때 썼던 것과 같은 실험적 규율입니다. 여기서는 통제군이 처치군보다 흔히 더 강력하며, 비교 문헌은 이것이 장난감 규모의 인공물이 아니라 지식 그래프 완성에서의 정상적인 상태라고 말합니다 [3]. 앞으로의 길을 위해, 두 방법 모두 5권의 영역도 표시해 둡니다: 그 보정되지 않은 신뢰도는 정확히 프론티어 권이 다루는 신뢰(trust) 문제이며, 그 명시적인 규칙들은 그 권의 충실성(faithfulness) 장들의 통화입니다. "advises∘advises, 신뢰도 2/3, 나열된 접지들"로 뒷받침된 예측은 사람이 감사할 수 있는 설명이지만, 어떤 임베딩 점수도 결코 그런 적이 없었기 때문입니다. 그리하여 4부는 두 기둥이 균형을 이루며 끝을 맺습니다: 논리는 규칙 언어와 헤아림 의미론을 제공했고, 학습은 탐색하고 가중치를 매기는 방법을 제공했습니다. 아직 어느 쪽도 제공하지 못한 것은 합성 질의에 답하는 방법이며, 그것이 질문 자체를 완전히 바꾸어 놓습니다.
핵심 용어
- AnyBURL(Anytime Bottom-Up Rule Learning, 언제라도 멈출 수 있는 상향식 규칙 학습) — 경사 없는 규칙 채굴기입니다: 접지 경로를 표본추출하고, 각각을 규칙 템플릿으로 일반화하며, 표본 신뢰도로 채점하고, 후보 엣지를 그 최선의 발화 규칙으로 순위 매깁니다; 채굴이 시간 조각 단위로 진행되고 언제라도 멈추어도 사용 가능한 규칙집을 남기므로 anytime입니다 [2].
- 접지 경로(ground path) / 언어 편향(language bias) — 사실의 머리에서 꼬리까지 상수로만 이루어진 구체적인 걷기입니다; 언어 편향은 채굴기가 고려할 일반화들(어떤 상수가 변수가 되는가)의 고정된 메뉴입니다.
- C / AC1 / AC2 템플릿 — 동반 코드에서 접지 경로의 세 가지 일반화입니다: 순환형(두 머리 논항 모두 변수이며 몸체 사슬을 통해 묶임), 꼬리를 상수로 유지하는 비순환형, 머리를 상수로 유지하는 비순환형입니다. AC1/AC2라는 이름표는 동반 코드의 것입니다: 공식 발표된 분류법은 두 개의 상수 하나짜리 형태를 (관계를 그 역방향으로 뒤집는 것을 법으로 하여) 하나의 상수로 끝나는 비순환 유형으로 접어 넣고, 그 두 번째 비순환 유형은 다른 어디에도 나타나지 않는 새로운 변수로 끝나는 몸체를 위해 남겨 두는데, 이는 동반 코드가 버리는 형태입니다.
- 비관 상수를 지닌 신뢰도 — ; 상수 (공식 시스템에서는 5, 동반 코드에서는 1)는 지지도가 아주 작은 규칙을 감쇠시키며, 이 비율은 관측된 그래프 위에서의 정확한 헤아림입니다.
- 최댓값 집계 대 노이즈-오어 — 후보를 사전식 동점 처리와 함께 최선의 발화 규칙으로 순위 매기는 것과, 를 견주는 것입니다; 노이즈-오어는 상관된 규칙들을 이중으로 헤아리는데, 이는 2부의 분리합 문제(disjoint-sum problem)가 규칙 수준에서 되돌아온 것입니다.
- RNNLogic — 잠재 변수 로서의 규칙입니다: 생성기 가 연쇄 규칙을 제안하고, 추론기가 가중된 접지 경로 헤아림으로 정답을 채점하며, EM 루프가 규칙 선택과 생성기 재적합을 번갈아 수행합니다 [1].
- E-단계 규칙 점수 — : 정답에 대한 규칙의 측정된 기여도에 작은 로그 사전 확률을 더한 것입니다; 양의 점수를 지닌 상위 개의 규칙이 선택됩니다.
- 감쇠된 M-단계 — 이며, 여기서 는 선택된 규칙들에 대한 최대우도 범주형 분포입니다; 이는 경사로 훈련되는 생성기의 점진적인 움직임을 닫힌 형식으로 축소해 놓은 것입니다.
- 기호적 통제군 — 이 부가 마무리 짓는 방법론적 원칙입니다: 신경망 방법의 주장은 동일한 프로토콜 아래에서 실행된 규율 잡힌 기호적 기준선에 대한 여백으로 측정됩니다.
이 장이 향하는 곳
4부는 단일 엣지를 예측하는 규칙을 학습했습니다. 다음 부는 질문 자체를 바꿉니다: "alice의 학생을 지도하는 누군가를 고용하는 기관은 어디인가"라는 질의가 주어지면, 그 답은 하나의 엣지가 아니라 그래프 위에서 이루어지는 다중 홉의, 가지 치는 계산의 결과이며, 그 과정에서 묶여야 할 존재 변수들을 동반합니다. 질의 임베딩: 계산 DAG는 바로 그 계산 자체를 임베딩되는 대상으로 만듦으로써 5부를 엽니다: 각 질의는 사영과 교집합으로 이루어진 유향 비순환 그래프가 되어 벡터 공간에서 실행되며, 진행 중인 예시의 학계 세계는 그 기하학이 감사받을 정답이 딸린 다중 홉 질의들을 제공합니다. 이 규율은 우리와 함께 이어집니다: 5부의 신경망 질의 응답기는, 정확히 이 장이 경사를 헤아림에 맞서 측정했던 것과 똑같이, 기호적 질의 실행에 맞서 측정될 것입니다.
동반 코드: examples/integration/rule_mining.py는 3권의 학계 그래프 분할 위에서 두 시스템 모두를 처음부터 끝까지 구현합니다: 부호 있는 그래프와 유도된 grandAdvisor 대상(87–122행), 경로 열거와 세 템플릿(127–158행과 200–217행), 비관 상수를 지닌 전수 신뢰도(170–197행), kg.py의 필터링된 프로토콜 아래에서의 최댓값, 노이즈-오어, 고정 무작위 채점기(232–280행), RNNLogic의 규칙 공간, 기여도 함수, 감쇠된 EM 루프(288–348행), 그리고 정답 규칙의 신뢰도에 대한 독립적인 손 헤아림과 EM 추적의 모양을 포함해 이 장의 모든 주장을 지키는 단언들을 지닌 하니스(354–433행)입니다. python3 examples/integration/rule_mining.py를 실행하면 모든 숫자를 바이트 단위까지 그대로 재현하며, 그 실행은 다음으로 끝납니다: SUMMARY rule_mining: rules=14 gold_conf=0.6667 mrr_max=0.6944 mrr_noisyor=0.6944 mrr_random=0.2100 p_gold=0.8761 em_acc=1.00.