Assaulting cities/castles is always the worst possible option - at least according to Sun Tzu
There are already some good tips (or 'cheats') to beat the enemy AI at sieges. Spies plus a couple (good) HA units can clear cities without casualties (beware of enemy heavy cav and turn off skirmish). Better though, is to look (or wait) for an enemy stack in front of the settlement you want to take. Attack it with a small force so it won't retreat. Destroy both forces and you can take the settlement (undamaged). You can also lay siege with a small force (composed to deal with the enemy units inside the settlement) - when the force is small enough, the enemy will sally out = Heroic Victory.
I've stopped siege warfare because it feels cheap and takes a long time to finish. I either attack stacks in front of settlements, have the enemy sally out or, when there are only one or a couple units on guard, auto-resolve. I also don't use sieges defensively. AI will always attack cities (not armies) so leaving only a governor almost guarantees you're besieged. Attack the besieging army and destroy them in the field (instead of on the walls).