Choke's function is reduce air intake by the motor. Therefore, based on that information, and the statement of the motor only run with choke on, we can conclude the mixture with choke off is too lean, or too much air.
First, you should try to loosen the idle needle to increase the airflow. If this work, it simply mean the motor is out of tune. If this doesn't work, you may have a air leak. Common place of leak includes any gasket used near carb body. crank seals. The way you can test this without fancy equipment is by using starter fluid. With your engine idling, doesn't matter choke on or off, as long as you can get it to idle at constant RPM. Spread starter fluid near any gasket, seal that you suspect is leaking. The motor RPM should not change. If it does, the leak is in the nearby area. Change gasket or seal as needed.