이전 글에서는 언어 이론을 기반으로 논리적 갈등을 처리하는 방법을 설명하는 예시를 살펴봤어요. 그리고 Behavior Tree(BT)를 사용해서 AI에 의도성을 불어넣는 방법도 간단하게 알아봤죠. 이번에는 그래프가 *일관성이 없다*고 가정하고, 시스템이 특정 목표에 도달하려고 시도하는 동안 나타나는 동작, 즉 *의도적인* 이동에 대해 이야기해볼게요. 여기서 목표는 *바람직한* 그래프 구성을 만드는 거예요. 이는 단순히 Machine Learning만을 기반으로 해서 입력에 *반응*만 하는 대화 시스템과는 중요한 차이점이죠. Machine Learning 기반 시스템은 실제 목표가 없으니까요.
그래프가 일관성이 없다면 시스템은 *의도적인* 대화 이동을 통해 그래프 구성을 원하는 방향으로 이끌어갈 수 있어요.
우선, 시스템은 새로운 결정을 내릴 수 있도록 신념 그래프에 변경 사항을 적용해요. 그런 다음 답변되지 않은 질문과 같이 해결되지 않은 문제가 있는지 확인하죠. 이 경우 그래프는 *불안정한* 상태로 정의되고, 따라서 이러한 문제를 해결하는 것이 우선순위가 돼요. 그래프가 불안정하지는 않지만 목표 패턴을 나타내지 않는다면 *탐탁지 않은* 상태라고 할 수 있어요. 바람직하지 않은 문제를 해결하기 위해 ANGMAR에서는 Bayesian Network(BN)를 사용해서 의사 결정 프로세스를 관리하고, 그래프를 원하는 구성에 더 가깝게 만들 가능성이 가장 높은 전략을 선택한답니다.
FANTASIA는 Unreal이 제공하는 기능을 Unreal과 통합하고, Agrume 라이브러리와 Neo4j를 함께 사용해서 그래프에서 수집된 정보를 기반으로 BN을 동적으로 조립할 수 있게 해줘요. 간단히 말해서, BN은 무작위 변수 사이의 인과 관계를 모델링해서 하나의 변수에 대해 수집된 증거가 네트워크의 나머지 부분에 전파되도록 하고, 네트워크의 각 Node의 실제 값 추정치를 향상시키는 역할을 해요. 영화 도메인의 경우 배우, 영화, 장르를 고려한 네트워크 구축을 간단한 예로 들 수 있겠죠. 배우들의 연기는 그들이 출연하는 영화의 평점에 영향을 미치고, 영화의 평점은 그들이 속한 장르의 평점에 영향을 미치는 것처럼요. 영화와 장르의 평점은 상위 등급의 중앙값으로 추정된다고 가정해볼게요.
처음에는 우리가 아무것도 모르기 때문에 네트워크의 변수는 무작위 분포를 가져요. 배우에 대한 추정 평가는 평점에 대한 균일한 분포로 표현되어서 모든 것이 사실일 수 있음을 나타내죠. 그에 따라 분포가 계산될 거예요. 다음으로, 커널 밀도 추정을 사용해서 Movielens 등급에 맞춰진 가능한 등급에 대한 Gaussian 분포로 영화 등급을 추정해요. 이는 *연성 증거*이고, 영화에 대한 정보와 배포판은 다음 그림과 같이 결과적으로 업데이트될 수 있어요.
이 프레임워크에서 질문하는 것은 *확실한 증거*를 수집하는 것과 같아요. 네트워크의 변수에 대해 Node에 포함된 정보의 불확실성을 나타내는 Node의 엔트로피를 계산하고 시스템의 일반적인 목표를 고려함으로써 대화 관리 전략은 다음 동작을 평가할 수 있는 거죠.
하지만 전체 데이터베이스만큼 큰 BN을 생성하는 것은 불가능해요. 이렇게 하면 애플리케이션이 멈춰버릴 수도 있겠죠. 하지만 BN은 그래프이기도 하잖아요! 이는 Cypher Query를 사용해서 *흥미로운* 하위 그래프를 추출할 수 있다는 의미이기도 해요. 일반 도메인에서 사용자에 대해 수집된 신념과 일관되고 Neo4j 데이터 구조를 기반으로 Unreal 내부에서 BN을 동적으로 조립하는 하위 그래프 말이에요.
그래프에서는 온톨로지를 사용해서 프로세스의 이 부분을 안내하는 *일부* Relationship을 정의해요. BN으로 추론할 하위 그래프를 추출하는 것은 그래프 패턴이나 Node Embedding을 사용해서 수행할 수 있고, 이는 Semantic Search와 비슷한 것을 시뮬레이션할 수 있게 해줘요. 또한 링크 예측과 같은 그래프 데이터 과학 기술은 추론을 지원해서 사용 가능한 대화 동작을 고려하여 바람직한 연결이 형성될 가능성을 확립할 수 있도록 도와주죠. 다음 그림은 BT를 사용해서 이 메커니즘을 구현하는 방법을 보여주고 있어요.
대화 동작을 생성할 때 *추론적 진술*을 제시해야 할 수도 있어요. 이는 시스템이 표현하는 위치를 지원하기 위해 그래프의 Node에 대한 Path를 추출해서 얻을 수 있죠. 진술의 *발화력*과 그 표현의 동기는 다음과 같아요. *논증*은 대화 상대가 해결되지 않은 주장을 받아들이도록 설득하려는 의도이거나, *설명*은 대화 상대가 요점을 이해할 수 있도록 의도된 경우를 대표할 수 있죠.
BT 측면에서 진술의 발화력은 진술을 생성하는 작업의 위치(BT에서)로 표현돼요. ANGMAR의 현재 버전에서는 주요 주장을 뒷받침하는 추론 진술이 질문에 대한 답변을 뒷받침하기 위해 생성된 경우 설명으로 간주돼요. 도중에 생성된 경우 *착취*, 실제 추천 단계 또는 *탐구*, 사용자에 대한 추가 정보가 수집되는 단계에서는 다음 그림과 같이 인수로 간주되죠.