I've been taught this way:
Pup sits on your left hand side, lead in your right hand (so its across your body), treat in left hand (show them it just before you go forward), use the 'heel' command and move forward always left foot 1st (so later you can do this without a command—as soon as mine see my left foot move off they now know its their command to move). When dog pulls, stop straight away, gently jerk the lead back until dog is sitting back with you on the left, quietly praise them for sitting (or even treat them in the early days), then repeat moving forward again. Later when they pull of the lead but respond quite quickly to you, you don't need to do stop-start but gently jerk the lead back using the command 'heel' as your walking (but still a treat in left hand so they know its there).
It will take a while as although we think they have bonded with us their concentrations levels are such that they are easily distracted but find it difficult to focus back on you (mine are easily distracted but now I know through practice that I can focus them back on to me to give them further commands)