Machine Learning for Synthetic Data Generation: a Review