First, check your contract. See how much detail it does (or doesn't) lay out.
Then, check any surrounding communication. What did you and the other company actually say to each other?
And then the important thing: You and them need to get on the same page about what this contract does and doesn't cover as soon as possible. I'd phone them or send an email that goes like this:
Hi (whoever your primary contact is),
Your work has been fantastic so far.
I've received your latest bill and I want to discuss a couple of
items. Specifically there's a lot of training being billed, which I
wouldn't normally expect to see included. When are you free to
discuss?
I'd consider internal comms to be fine. Work is work, and a fair amount of it is communicating with other people.
Training is iffy. Generally, the point of outsourcing is that they are responsible for providing people/equipment to do the work, not you. If it were one-off specialist training for something unique to your project, then maybe. But training their new employee is hardly something you should be paying for.
So have a discussion, see what they say, and then see where it goes from there. If their work is as good as you say, and you need them as much as you do, then maybe you decide to allow this bill as it is but agree that going forwards, this kind of thing isn't covered. Or if it's not too much then just pay it without issue and chalk it up to experience for the next time you do one of these deals.
There are a lot of unethical/not particularly great consulting companies out there. If this company is doing awesome work at a total price that works for you then I'd be inclined to accept the bill (after a discussion) in the interests of maintaining a good relationship until the project is finished.