If the gear is ok, try lubeing the cable. easiest to do from the top so disconnect from the dash unit and pull it out where you can get the speedo lube into it.
Could also be the cable slipping in the gear or in the speedo unit in the dash but less likely.
JD