Aligning Large Language Models with Self-generated Preference Data