Mitigating Reversal Curse in Large Language Models via Semantic-aware Permutation Training