LOTlib is a Python 2.x library for programming "language of thought" models. Using LOTlib, you specify a set of primitives and then model learners who search over compositions of the primitives to express complex concepts. The examples provided all describe a grammar and a probablistic Bayesian model over the expressions generated by that grammar. LOTlib permits lambda expressions, meaning that learners can come up with abstractions over compositions and define new primitives. Frequently, models use sampling in order to determine likely compositional hypotheses given some observed data.
There are several sampling methods provided, including tree-regeneration metropolis-hastings (from the Rational Rules model of Goodman et al. 2010), and variants that include tempering, annealing, tempered transitions, and other search algorithms.
The best way to use this library is to read and modify the examples.
BEWARE: Development may occasionally break backward compatibility. Due to the rapid pace of changes, no guarantees are made about correctness. If you have a question about what is likely to work well, please email Steve. On-going development is focused on providing testing, documentation, and evaluation suites.
LOTlib also provides support for MPI through a wrapper for mpi4py (LOTlib.MPI), allowing sampling algorithms to run in parallel on a simple computer or cluster.
- numpy
- scipy
The following are frequently used, but not required for most functions:
- matplotlib (plotting)
- mpi4py (if using MPI; I recommend running with mpich3)
- pyparsing (for parsing)
- cachetools (for memoization)
- graphviz (for DOT images of trees)
Put this library somewhere - e.g. ~/Libraries/LOTlib/
Set the PYTHONPATH environment variable to point to LOTlib/:
$ export PYTHONPATH=$PYTHONPATH:~/Libraries/LOTlib
You can put this into your .bashrc file to make it loaded automatically when you open a terminal. On ubuntu and most linux, this is:
$ echo 'export PYTHONPATH=\$PYTHONPATH:~/Libraries/LOTlib' >> ~/.bashrc
And you should be ready to use the library via:
import LOTlib
A good starting place is the FOL folder, which contains a simple example to generate first-order logical expressions. These have simple boolean functions as well as lambda expressions.
The best reference for learning how to create/modify grammars is Examples.FunctionNodeDemo. It contains all of the syntax for various parts of grammars.
More examples are provided in the "Examples" folder. These include simple symbolic regression, the recursive number learning model, a quantifier learning model. The "tests" folder may also be useful, as this runs some simple models to check for, e.g., correct sampling and inference. The Number demo has syntax for a number of different sampling and inference schemes included in LOTlib.
Major contributors to this project include Hassler Thurston, Samay Kapadia, Matt Overlan, and Eric Bigelow.
This software may be cited as:
@misc{piantadosi2014lotlib,
author={Steven T. Piantadosi},
title={ LOTlib: Learning and Inference in the Language of Thought},
year={2014},
howpublished={available from https://github.com/piantado/LOTlib}
}