Aligning Language Models with Preferences through f-divergence Minimization