I was just reading a post from a guy blogging as "Kirbitz", who said that he switched to using AdSense after some disappointing months with Bidvertiser. The irony is that after viewing five of his webpages, all such AdSense units are displaying public service ads.
Hopefully that will change for him soon.
A "public service ad" (PSA) is what AdSense displays when it can't identify any relevant ads for your website.
These don't generate any income for you.
So the trick is, obviously, to not get any PSAs.
One of the biggest factors I've noticed with determining relevancy, are the filenames, directory names, and domain names. Sometimes, this seems to have such a strong influence, that it even overcomes on-page keyword frequency. Perhaps the best "one-two" combination I can think of towards ensuring relevant ads, is to match your most frequently used on-page keyword with the filename of your webpage.
But that's just my observation, and not gospel from the AdSense team.
There's also in-HTML optimization that you can do. The Meta Keywords tag, and the Title tag also seem to help. It would be best to make sure these also match the on-page keyword and the filename.
Going back to this guy, "Kirbitz", and his blog. His blog is about making money online, which is a subject frought with AdWords. He shouldn't have any trouble attracting relevant ads.
Since AdSense doesn't explain their relevancy algorithm, we can never know exactly what causes a PSA to display. But since my blog is pretty much on a similar topic as his, and AdSense never seems to display PSAs here, it obviously has something to do with the blog itself.
If you happen to see too many PSAs displaying on your site, my best advice is to remove all "template content" until you have nothing left but the unique content itself (the article), and see what displays then. To do this, usually you can create a "test" page. Then, add pieces of the template back one by one and observe how that affects things.
You might just try a new (and simpler) template altogether.