Scallop, uma linguagem de programação neuro-simbólica
(scallop-lang.org)- Scallop é uma linguagem declarativa para inserir raciocínio simbólico baseado em regras lógicas em aplicações de IA, baseada em Datalog, uma linguagem de consulta para bancos de dados relacionais
- O solver oferece suporte a inferência discreta, probabilística e diferenciável, permitindo escolher o método de inferência conforme as necessidades da aplicação
- Com bindings para Python, é possível inserir módulos de inferência lógica dentro de programas e integrá-los a pipelines de machine learning existentes em PyTorch
- Em tarefas de visão e NLP, a abordagem combina componentes neurais gerados por CNNs ou Transformers com componentes de regras lógicas
- Fornece exemplos end-to-end que aprendem componentes neurais e regras em conjunto, como raciocínio visual no CLEVR, determinação de conectividade no Pathfinder e avaliação de expressões manuscritas
Componentes principais do Scallop
-
Language
- Scallop é uma linguagem declarativa para lidar com raciocínio simbólico em aplicações de IA
- Sua base é Datalog, uma linguagem de consulta baseada em regras lógicas para bancos de dados relacionais
-
Solver
- Scallop é um solver Datalog extensível
- Oferece suporte aos modos de inferência discreta, inferência probabilística e inferência diferenciável
- Cada modo de inferência pode ser configurado conforme diferentes necessidades de aplicações de IA
-
Framework
- Fornece bindings para usar módulos de inferência lógica dentro de programas Python
- Pode ser profundamente integrado a pipelines de machine learning existentes em PyTorch
Aplicações de exemplo
- CLEVR é uma tarefa de raciocínio visual que responde a perguntas como “quantos objetos azuis há?” sobre objetos 3D simples em uma imagem
- O componente neural gera o grafo de cena (scene graph) da imagem e uma consulta programática (programmatic query) que representa a pergunta
- O componente de inferência especifica, como regras lógicas, operações para selecionar, comparar e contar objetos de acordo com atributos definidos
- Scallop integra esses componentes em um framework comum e permite realizar treinamento end-to-end
- Pathfinder é uma tarefa de raciocínio de conectividade de longa distância que determina se dois pontos em uma imagem em preto e branco com pontos e linhas tracejadas estão conectados por linhas tracejadas
- Pode ser composto por uma arquitetura neural simples que detecta pontos e traços e por algumas linhas de regras lógicas em Scallop
- As regras apresentadas tratam
dash(x, y)como um caminho e, recursivamente, conectampath(x, z), dash(z, y)para determinaris_connected() - Essa configuração alcança desempenho superior ao de Transformers de última geração
- A avaliação de expressões manuscritas é uma tarefa que reconhece uma sequência de símbolos manuscritos composta por dígitos de 0 a 9 e operações aritméticas simples, e calcula a expressão
- O exemplo considera
1 + 3 / 5como entrada e calcula o valor resultante1.6 - Com Scallop, é possível criar um parser completo de gramática livre de contexto capaz de analisar entradas probabilísticas
- O parser e o avaliador podem ser escritos em 5 linhas de código Scallop
- Esse programa pode ser treinado de forma end-to-end junto com um modelo neural de reconhecimento de símbolos individuais e, após o treinamento, encontra a expressão mais provável e retorna o resultado da avaliação
- O exemplo considera
Ainda não há comentários.