Nathan Aspinall fought back with a fine 130 checkout after making a torrid start to his World Grand Prix semi-final.