Justin Kim
Logic meets intuition
-
RDF Reification을 다시 보기: RDF 1.2와 Wirelog Compound Term
지난 RDF Reification 글에서 김철수의 이직 기록을 예제로 들었습니다. 김철수는 2020년부터 2022년까지 삼성전자에서 근무했고, 2023년부터 현재까지 네이버에서 근무하고 있다. 기본 RDF 트리플로는 이렇게 됩니다. ex:김철수 ex:worksAt ex:삼성전자 . ex:김철수 ex:worksAt ex:네이버 . 이 두 줄만 보면 너무 많은 것이 빠져 있습니다. 삼성전자에는 언제부터 언제까지 다녔는지, 네이버에는 지금도 다니는지, 이 정보가...
-
Askitect의 SPARQL 루프를 Datalog로 바꾸기
지난번 Askitect 프로토타입 글에서는 LLM이 사용자의 자연어를 RDF 트리플로 바꾸고, 그 중간 상태를 SPARQL로 검사하는 구조를 구현했습니다. 사용자가 “친구랑 도쿄 가려고. 맛집이 제일 중요해.”라고 말하면 LLM은 hasDestination, hasCompanionType, hasPriority를 추출하고, SPARQL은 hasDuration과 hasBudget이 빠졌다는 사실을 찾아냈습니다. 그 글의 핵심은 LLM을 추론 엔진으로 쓰지 않는다는 점이었습니다. LLM은 자연어와 구조화된 데이터 사이를...
-
WITH RECURSIVE로는 답답했던 질문들: 내 노트 그래프에 Datalog 얹기
지난 글 Datalog, 일상의 도구가 될 수 있을까의 마지막에 이렇게 적어두었습니다. “다음에는 이 고민을 코드로 옮겨볼 생각입니다. 가벼운 Datalog 엔진을 실제 일상적인 문제에 적용해보는 실험을 해보려 합니다.” 이번 글은 그 문장을 실제 코드로 옮겨본 기록입니다. 그때 일상적 유즈케이스 후보로 네 가지를 꼽았습니다. 노트 간 관계, 의존성 분석, 권한 추론, 설정...
-
Datalog에서 '데이터' 대신 '사실(Fact)'이라고 부르는 이유
Datalog나 Prolog 같은 논리 프로그래밍 언어를 이야기하다 보면, 자연스럽게 “이건 데이터가 아니라 사실(fact)과 규칙(rule)으로 이루어져 있다”고 말하게 됩니다. 그런데 생각해보면 표에 들어있는 값이나 그래프에 들어있는 노드나 똑같은 ‘데이터’로 보일 수 있습니다. 그럼에도 굳이 ‘사실’이라는 다른 단어를 가져와서 쓰는 데에는 시스템의 전제와 관련된 분명한 이유가 있습니다. 이 작은 단어의 차이는 궁극적으로...
-
TBox로 LLM 환각을 줄이는 방법: Datalog Facts 수준의 스키마 제약
LLM으로 비정형 텍스트에서 구조화된 데이터를 뽑아내다 보면 결국 한 가지 문제가 남습니다. 바로 환각(hallucination)입니다. 모델은 입력에 없는 관계를 만들어내거나, 스스로 새로운 클래스를 정의하거나, 원문에 없는 속성값을 그럴듯하게 채워 넣습니다. 이번 글에서는 이 문제를 프롬프트만으로 억제하는 대신, TBox와 Datalog facts를 이용해 구조적으로 제약하는 방법을 정리해 보았습니다. 완전히 새로운 기법이라기보다는, 온톨로지와 논리...