1. Our understanding of the brain is poor, and I think that will be necessary to have good machine decoding. In principal, a machine learning algorithm does not need to know how the brain works to make an accurate decoding prediction, but I suspect understanding will be needed to help construct and constrain machine learning models learn to deal with the myriad of mental states, intentions, emotions, etc that can occur. While we can train classifiers better than chance to identify whether one or another item is observed, remembered, etc, these training are quite constrained to a type of information or class. I imagine those classifiers are hopeless when you start performing another activity or mental state, and the machine would need to recognize the new state and apply different decoders.
Second, yes there is too much noise in most available methods (EG, fMRI, MEG) and the information is not dense enough (spatial, temporal resolution) and not specific enough to the type of activity (excitation, inhibition, chemical diffusion, etc). Electrodes have done cool things, but I suspect that even millions of wires would not provide enough information and types of information to provide a full fledged brain interface.
However, I'll admit, tech is moving so fast...
TED talk by Jack Gallant https://www.youtube.com/watch?v=Ecvv-EvOj8M
recreating vision: https://www.youtube.com/watch?v=nsjDnYxJ0bo
another ted talk by John-Dylan Haynes https://www.youtube.com/watch?v=mMDuakmEEV4
paraphrased: "wireless non-contact mind reading tech may be cheap and mass producible within the next 50 years."
the only rate limiting step with his method of decoding thoughts is that it takes time under a high energy device to pair associations in the brain.
Think of how much screen time we currently use. If we could pair a wireless 'headset' like headphones while looking at pictures on a screen it would be possible to build a brain bank of children->tenenagers. Currently we just need a lot of processing power and reserved bandwidth on the internet to do some cool stuff.