bug with inputs_embeds for bert (tensorflow)
Author: tomergur
Pull request: no

### System Info

- `transformers` version: 4.22.2
- Platform: Linux-3.10.0-1160.31.1.el7.x86_64-x86_64-with-glibc2.10
- Python version: 3.8.8
- Huggingface_hub version: 0.10.0
- PyTorch version (GPU?): 1.7.1 (True)
- Tensorflow version (GPU?): 2.6.0 (True)
- Flax version (CPU?/GPU?/TPU?): not installed (NA)
- Jax version: not installed
- JaxLib version: not installed
- Using GPU in script?: yes
- Using distributed or parallel set-up in script?: yes


### Who can help?

@LysandreJik

### Information

- [ ] The official example scripts
- [X] My own modified scripts

### Tasks

- [ ] An officially supported task in the `examples` folder (such as GLUE/SQuAD, ...)
- [X] My own task or dataset (give details below)

### Reproduction

I use the following code for using inputs_embeds for TFBertForTokenClassification:
(text embedding is a tensor with shape (1, SEQ_LEN,768))
```
bert_conf = BertConfig(num_hidden_layers=2, num_labels=2)
bert_model=TFBertForTokenClassification(bert_conf)
res = self.group_bert(inputs_embeds=text_emb, training=training)
```

but it throws the following exception 
```
/lv_local/home/tomergur/convo_search_project/experiments/qpp/supervised/train_ragged_bert_qpp.py:71 call  *
        res = self.bert(inputs_embeds=text_emb, training=training)
    /lv_local/home/tomergur/convo_search_project/csp_venv/lib/python3.8/site-packages/keras/engine/base_layer.py:967 __call__  **
        inputs, args, kwargs = self._split_out_first_arg(args, kwargs)
    /lv_local/home/tomergur/convo_search_project/csp_venv/lib/python3.8/site-packages/keras/engine/base_layer.py:3011 _split_out_first_arg
        raise ValueError(

    ValueError: The first argument to `Layer.call` must always be passed.


Process finished with exit code 1

```

while this snippet works: 
```
bert_conf = BertConfig(num_hidden_layers=2, num_labels=2)
bert_model=TFBertForTokenClassification(bert_conf)
# text embedding is a tensor with shape (1, SEQ_LEN,768)
inputs={'inputs_embeds':text_emb}
res=self.group_bert(group_inputs,training=training)
```

so for some reasons we have ug when using keyword input 

### Expected behavior

make it possible to use inputs_embed with keyword args 

Comments:
Hey @tomergur 👋 

Sadly, we have no power to prevent this issue. If you look at the traceback from a script like
```python
from transformers import BertConfig, TFBertForTokenClassification
bert_conf = BertConfig(num_hidden_layers=2, num_labels=2)
bert_model=TFBertForTokenClassification(bert_conf)
bert_model(inputs_embeds=[[0, 1, 2]], training=True)
``` 

you'll see

```
Traceback (most recent call last):
  File "/home/joao/transformers/../joao_scripts/dbg.py", line 4, in <module>
    bert_model(inputs_embeds=[[0, 1, 2]], training=True)
  File "/home/joao/hf/lib/python3.10/site-packages/keras/utils/traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "/home/joao/hf/lib/python3.10/site-packages/keras/utils/layer_utils.py", line 812, in split_out_first_arg
    raise ValueError(
ValueError: The first argument to `Layer.call` must always be passed.
```

In other words, it crashes on `Keras` code before reaching `transformers` code. Passing `input_ids=None` or wrapping in a dictionary (as you mentioned) are the workarounds for this issue -- `Keras` expects the first input defined in the signature of `call` to always be provided.

_______________________________
I'm closing this issue, but feel free to reopen if you have other queries 🤗