This is the repository for Human-like Few-Shot Learning via Bayesian Reasoning over Natural Language
It contains source code and data, critically including precomputed samples from expensive LLMs in completions.db.
Released under GPLv3 (see LICENSE.txt)
OpenAI keys should be placed in a file called secret_keys.py. You need to make this file. Structure it like this:
def retrieve_keys():
return ["<my-first-key>", "<my-second-key-as-backup>", ...]
Train the model using:
python number.py --n_proposals <number_of_samples> --methods <a_method> --export <export_path_to_logs> --iterations <gradient_descent_steps>
Further options:
-
--deduplicationpreforms deduplication of samples from$q$ instead of importance sampling (model in paper used this option) -
--methods "latent lang2code"uses both a latent language representation of the concept and a Python likelihood (model in paper used this option) -
--prior fixedforces it to use the pretrained prior -
--methods "latent code"uses only a latent Python representation of the concept
To plot model-human correlations, do:
python plotting.py --correlation <path(s)_to_csv_file_created_by_training> --export <filename.pdf>
To visualize the model predictions (like Figure 2), do:
python plotting.py --predictions <path_to_a_csv_file_created_by_training> --export <filename.pdf> --examples 16 16_8_2_64 16_23_19_20 60 60_80_10_30 60_52_57_55 98_81_86_93 25_4_36_81
Train the model using:
python shape.py --examples 15 --set 2 --methods "latent lang2code" \ # always use these options
--n_proposals <number_of_samples> --prior <learned_or_fixed> \
--iterations 100
Further options:
--performanceoptimizes for task performance instead of optimizing for fit to human data--force_higher_ordersamples using a single prompt for every task that only shows example higher order rules. Otherwise, a different prompt is used for propositional and higher order tasks
To plot model-human correlations, do:
python visualize_shape.py --export <filename.pdf> --compare <csv_files_produced_from_training>
To visualize individual learning curves, do:
python visualize_shape.py <a_single_csv_file_produced_from_training> --curve <concept_number>_2 --export <filename.pdf>
Concept number ranges from 1-112. The suffix _2 tells it to use the holdout testing learning curve (split 2, which was designated as test data by --set 2 when invoking python shape.py).
Data from the human study can be found in special_human_data.tsv. It is processed by human.py in the function special_concept.
The web app for the human study can be found under human_experiment_webpage/
To run the model on this data, execute:
python shape.py --examples 15 --set 2 --methods "latent lang2code" \ # always use these options
--n_proposals 100 --prior learned \
--iterations 100 \
--concept 200 201 --transfer_prior # this tells it to run on the special human data
The option --transfer_prior tells it to load the learned prior from the most recent shape.py training run, as done in the paper.