Yup, sa-learn is the tool. It takes a certain amount of learned messages before SpamAssassin starts working "efficiently"; I don't remember the estimate, but it was some hundred messages I think. So after you've collected and sa-learn'ed a thousand messages, you may expect it to catch most of the incoming spam.
Here's a script I use to "teach" SA on my university account:
echo "* Learning new mails *"
echo "received: \c"
sa-learn --showdots --nonspam --mbox mail/received
echo "spam_assassin: \c"
sa-learn --showdots --spam --mbox mail/spam_assassin
echo "important_stuff: \c"
sa-learn --showdots --spam --mbox mail/important_stuff
echo "* Ready *"
Ok, a bit of an overkill maybe, but handy. So when I log in, I check my mail, if there are any spams, move them to spam_assassin, and once a week or so check that spam_assassin doesn't contain any non-spam messages and run the above script. Works like a charm. I haven't used it for very long yet, so I'll keep teaching the thing, but eventually I'll probably make SA not to move the spam to spam_assassin, but to delete it directly - when it has learned enough, the probability of non-spam getting caught is small enough for me to have the thing work automatically.
So now my only trouble with spam is to check once a week or so that there are no non-spam messages in the spam directory, and run the script. For some time now it has meant just running the script
EDIT: and yeah - in the beginning every second spam seemed to get trough to my inbox, but nowadays I see them very rarely, if at all.