Aligning language models with human preferences