1P by GN⁺ | ★ favorite | 댓글 1개
  • Scallop은 AI 애플리케이션에 논리 규칙 기반 기호 추론을 넣기 위한 선언형 언어로, 관계형 데이터베이스 질의 언어인 Datalog에 기반함
  • 솔버는 이산적·확률적·미분 가능 추론을 지원해, 애플리케이션 요구에 맞춰 추론 방식을 선택할 수 있음
  • Python 바인딩을 통해 프로그램 안에 논리 추론 모듈을 넣을 수 있으며, 기존 PyTorch 머신러닝 파이프라인과 통합 가능함
  • 비전·NLP 작업에서 CNN이나 Transformer가 만든 신경 컴포넌트와 논리 규칙 컴포넌트를 함께 구성하는 방식임
  • CLEVR 시각 추론, Pathfinder 연결성 판별, 손글씨 수식 평가처럼 신경 컴포넌트와 규칙을 함께 학습하는 종단간(end-to-end) 예제를 제공함

Scallop의 핵심 구성

  • Language

    • Scallop은 AI 애플리케이션에서 기호 추론을 다루기 위한 선언형 언어임
    • 기반은 관계형 데이터베이스용 논리 규칙 기반 질의 언어인 Datalog
  • Solver

    • Scallop은 확장 가능한 Datalog 솔버임
    • 이산적 추론, 확률적 추론, 미분 가능 추론 모드를 지원함
    • 각 추론 모드는 서로 다른 AI 애플리케이션 요구에 맞게 설정 가능함
  • Framework

    • Python 프로그램 안에서 논리 추론 모듈을 사용할 수 있는 바인딩을 제공함
    • 기존 PyTorch 머신러닝 파이프라인과 깊게 통합될 수 있음

예제 애플리케이션

  • CLEVR는 이미지 속 단순한 3D 객체에 대해 “파란색 객체가 몇 개인가?” 같은 질문에 답하는 시각 추론 작업임
    • 신경 컴포넌트가 이미지의 장면 그래프(scene graph) 와 질문을 나타내는 프로그램형 질의(programmatic query) 를 생성함
    • 추론 컴포넌트는 지정된 속성에 따라 객체를 선택, 비교, 카운트하는 연산을 논리 규칙으로 지정함
    • Scallop은 이 컴포넌트들을 공통 프레임워크에 통합하고 종단간 학습을 수행할 수 있게 함
  • Pathfinder는 두 점과 점선이 있는 흑백 이미지에서 두 점이 점선으로 연결됐는지 판단하는 장거리 연결성 추론 작업임
    • 점과 대시를 감지하는 단순한 신경 아키텍처와 Scallop 논리 규칙 몇 줄로 구성할 수 있음
    • 제시된 규칙은 dash(x, y)를 경로로 두고, 재귀적으로 path(x, z), dash(z, y)를 연결해 is_connected()를 판별함
    • 이 구성은 최신 Transformer보다 더 높은 성능을 냄
  • 손글씨 수식 평가는 0부터 9까지의 숫자와 단순 산술 연산으로 된 손글씨 기호 시퀀스를 인식하고 식을 계산하는 작업임
    • 예시는 1 + 3 / 5를 입력으로 보고 결과값 1.6을 계산함
    • Scallop으로 확률적 입력을 파싱할 수 있는 전체 문맥 자유 문법 파서를 만들 수 있음
    • 파서와 평가기는 Scallop 코드 5줄로 작성 가능함
    • 이 프로그램은 개별 기호 인식 신경 모델과 함께 종단간 방식으로 학습될 수 있으며, 학습 후 가장 가능성 높은 수식을 찾아 평가 결과를 반환함

댓글과 토론

Hacker News 의견들
  • 지금 Scallop 논문을 읽고 있어서 여기 올라온 게 재미있음. 개념이 정말 마음에 듦
    Scallop은 단순히 미분 가능한 신경-기호 선언형 확률 프로그래밍만 하는 게 아니라, 포함된 18개 또는 사용자 정의 출처 반환환(provenance semiring)을 써서 관계형 사실이 왜 성립하는지의 “증명”도 추적할 수 있음. 확률만 붙이는 것보다 훨씬 유연해 보이지만, 실제 활용성은 아직 파악 중임
    꽤 진지한 엔지니어링도 들어간 듯함. 인터프리터와 JIT 컴파일러가 있고, Rust로 컴파일한 뒤 Python 모듈로 동적 로드함
    Scallop 프로그램은 미분 가능할 수 있으므로 종단 간 학습 시스템 어디에나 들어갈 수 있고, 예제처럼 신경망에서 입력을 받아 최종 출력을 내는 구조에만 묶일 필요는 없음. 예를 들어 내부 층에서 Scallop 코드를 실행하고 잔차 스트림을 읽고 쓰는 하이브리드 Transformer도 가능할 듯함. 더 단순하고 현실적인 예로는 에이전트의 정책 함수에 들어갈 특징을 계산하는 용도가 있음
    한계는 프로그램 자체가 학습되는 게 아니라 사람이 작성한다는 점임. 다만 표현식 평가 예제처럼 인터프리터나 평가기를 구현할 수는 있음

  • 범주론과 기호 추론의 관계를 알게 된 뒤로, AGI는 기호 추론과 확률 추론을 우아하게 결합하는 데서 나올 것 같다고 생각해 왔음. Scallop은 그런 방향에 자리 잡은 첫 프로젝트처럼 보여서 아주 멋짐

    • LLM이 추론하려고 코드를 작성하는 것도 확률 추론과 기호 추론의 결합 아닌가?
    • https://www.brunogavranovic.com/posts/2024-03-13-my-thesis-i...
    • http://forestdb.org는 꽤 오래된 프로젝트이고, 개인적으로는 기호 추론과 확률 추론을 우아하게 결합한 장난감 예제들이 들어 있음
    • 관련: 그래프와 범주론 기반 신경-기호 AI
      “이 연구는 범주론에서 영감을 받은 방법으로 만든 그래프를 중심 장치로 사용해, 모델이 과학의 기호적 관계를 이해하도록 가르친다”
      https://news.mit.edu/2024/graph-based-ai-model-maps-future-i...
    • 범주론은 아주 조금 알지만 기호 추론은 전혀 모름. 둘 사이의 연결을 초등학생도 이해할 정도로 설명해 줄 수 있을까?
  • Scallop이 큰 지식 베이스에서 확률 추론을 할 때 얼마나 확장되는지 궁금함
    지금 약 1,200만 개 사실을 가진 큰 지식 베이스에서 확률 추론을 시도 중이고, 지금까지는 SWI-Prolog 기반인 cplint를 써 왔음. 장난감 예제에서는 잘 동작하지만 큰 지식 베이스에서는 일주일 넘게 기다려도 끝나지 않음
    큰 지식 베이스까지 빠르게 확장되는 확률 논리 프로그래밍 라이브러리를 아는지 궁금함. Prolog 생태계면 좋지만 필수는 아님

    • ProbLog는 어떨까? https://dtai.cs.kuleuven.be/problog
    • 1,200만 개 사실을 일주일 안에 처리하지 못한다는 건 놀라움. 쓰고 있는 소프트웨어의 버그처럼 보임
  • Scallop이 마음에 든다면 Lobster도 좋아할 듯함:
    https://liby99.github.io/res/papers/lobster.pdf

    • 아쉽게도 아직 사용할 수는 없어 보임. Scallop과 Lobster는 둘 다 UPenn에서 나왔고, Scallop 웹사이트에도 “Scallop을 오픈소스로 공개하는 과정에 있다”고 되어 있으니 시간문제라고 봄
    • Scallop과 Lobster의 관계, 그리고 지금 무슨 일이 벌어지고 있다고 보는지 몇 가지 bullet로 간단히 설명해 줄 수 있을까?
  • Scallop의 문제는, 이걸 쓰는 편이 더 쉬운 프로그램을 단 하나도 보여준 적이 없다는 것임
    논문에도 보통 예제가 없고, 예제가 있는 경우에도 모델에 직접 시키는 것보다 훨씬 복잡함. 프로그래밍 언어 쪽은 LLM 세계와 관련 있어 보인다는 이유로 이런 걸 너무 쉽게 통과시켜 주는 듯함
    내가 리뷰어라면 이런 작업은 받아들이지 않을 것임. 실제 프로그램을 많이 작성하고 기준선과 비교해서, 이 언어가 어떤 가치라도 제공한다는 걸 보여줘야 함
    웹사이트 예제만 봐도 세 개 모두 약하고, 이 언어 없이 하는 편이 훨씬 쉬움
    새 고성능 시스템 언어를 냈다고 하면서 벤치마크를 하나도 안 넣는 것과 비슷함. 그런 경우라면 거절됐을 것임. ML+PL 세계가 아직 그 기준을 따라잡지 못한 느낌임

    • Scallop 같은 신경-기호 프로그래밍 언어의 목적을 오해한 것 같음
      핵심은 성능이 아니라 안전성임
      기계학습과 에이전트가 발전할수록, “성능은 좋지만” 결국 비효율적이거나 위험하거나 낭비적인 추론을 피하려면 안전한 결정을 내리는 일이 기하급수적으로 중요해짐
  • 1년 전에 Scallop을 살펴봤고, 내 기준에서는 Prolog 대체재가 아니라고 판단했음
    지금은 더 매끄러운 LLM 통합과 미분 가능성을 생각해서 다시 평가해 볼 수도 있음
    Scallop을 큰 애플리케이션에 써 본 사람이 있는지 궁금함. 1980년대에 Prolog로 중대형 애플리케이션을 작성했는데 개발자 경험이 꽤 좋았음

    • Scallop 관련은 아니지만 Mercury를 써 봤는지 궁금함. 타입과 결정적 함수 표시가 있는 Prolog라고 볼 수 있음
      우리가 포팅한 Prolog 코드는 성능이 아주 크게 좋아졌고, 코드 규모도 꽤 컸음. 포팅도 대체로 점진적으로 가능함
  • 이런 걸 보니 좋음. 신경-기호 방법을 정말 좋아하지만, 사람들이 Scallop을 채택하거나 시도해 보도록 설득하려면 더 고급 예제가 필요할 것 같음
    페이지에 있는 세 예제는 너무 장난감처럼 느껴짐. 자연어 처리에 뿌리를 둔 예제나 LLM을 전면에 둔 예제가 도움이 될 듯함
    브랜딩은 매우 기분 좋고, 잘 만든 작업임

  • Scallop은 PyReason(https://neurosymbolic.asu.edu/pyreason/)과 어떻게 다른가?
    대체로 같은 것인지, 아니면 서로 다른 사용 사례에 맞춰져 있는지 궁금함

  • 내 이해 범위를 조금 넘지만, Prolog로도 비슷한 결과를 낼 수 있지 않나?

    • 충분한 시간과 자원이 있으면 무엇이든 다른 것을 할 수 있겠지만, 내 생각에는 꼼수 없이는 어렵다고 봄
      Scallop에는 신경망, 특히 기반 모델과 인터페이스하는 기본 요소가 있어서, 예를 들어 CLIP으로 고양이와 개 이미지를 라벨링하게 한 다음 그 결과 위에서 추론할 수 있음
      그래서 신경망 추론과 논리 추론을 깔끔하게 결합하려는 목적에 가깝다고 봄
    • Scallop 예제에는 확률 프로그래밍을 위한 문법이 있으니, 아마 Prolog만으로는 아닐 듯함