Small molecule generation via disentangled representation learning