  Data cleaning is naturally framed as probabilistic inference in a generative
model of ground-truth data and likely errors, but the diversity of real-world
error patterns and the hardness of inference make Bayesian approaches difficult
to automate. We present PClean, a probabilistic programming language (PPL) for
leveraging dataset-specific knowledge to automate Bayesian cleaning. Compared
to general-purpose PPLs, PClean tackles a restricted problem domain, enabling
three modeling and inference innovations: (1) a non-parametric model of
relational database instances, which users' programs customize; (2) a novel
sequential Monte Carlo inference algorithm that exploits the structure of
PClean's model class; and (3) a compiler that generates near-optimal SMC
proposals and blocked-Gibbs rejuvenation kernels based on the user's model and
data. We show empirically that short (< 50-line) PClean programs can: be faster
and more accurate than generic PPL inference on data-cleaning benchmarks; match
state-of-the-art data-cleaning systems in terms of accuracy and runtime (unlike
generic PPL inference in the same runtime); and scale to real-world datasets
with millions of records.
