It's possible to reduce how many multiple begin events you get, but the problem is that it's not a very reliable way to detect individual contacts. If your objects bounce or jitter at all (even by a fraction of a pixel), it will register as multiple begin events.
Basically the same problem a debouncing a switch (like with an Arduino), and the solution will be the same. The basic idea is that you shouldn't consider the state of the collision to be switched until the changed state lasts for more than a certain duration. An easy way to do that would be to start a timer for 0.1 seconds in the separate callback and set the timer in an instance variable. When the timer finishes, set the ivar back to nil. In the begin callback, check to see if the timer exists. If it does, then your sprite bounced and you should ignore the begin event.