Fix bugs when LayoutLMv3Tokenizer use model microsoft/layoutlmv3-base-chinese
Author: rogerdehe
Pull request: yes

# What does this PR do?
`microsoft/layoutlmv3-base-chinese` **use `sentencepiece` tokenizer** file "sentencepiece.bpe.model" from XLMRoberta instead of "tokenizer.json", when `LayoutLMv3Tokenizer` load this model with `LayoutLMv3Tokenizer.from_pretrained("microsoft/layoutlmv3-base-chinese")`, it will raise exception as follow:

```
[/usr/local/lib/python3.7/dist-packages/transformers/models/layoutlmv3/tokenization_layoutlmv3.py](https://localhost:8080/#) in __init__(self, vocab_file, merges_file, errors, bos_token, eos_token, sep_token, cls_token, unk_token, pad_token, mask_token, add_prefix_space, cls_token_box, sep_token_box, pad_token_box, pad_token_label, only_label_first_subword, **kwargs)
    322         )
    323 
--> 324         with open(vocab_file, encoding="utf-8") as vocab_handle:
    325             self.encoder = json.load(vocab_handle)
    326         self.decoder = {v: k for k, v in self.encoder.items()}

TypeError: expected str, bytes or os.PathLike object, not NoneType
```

 I have tried to fix this bugs by merge code from `XLMRobertaTokenizer`.

And also, after `LayoutLMv3Tokenizer` changed,  `LayoutLMv3Converter` should also be updated to convert to fast tokenizer.

I have write a new test file to test chinese tokenizer.

!!!NOTICE
I have found some differences when processing `chinese` because of `sentencepiece`. 

For example, when we process english document, we have a bound box text `hello word` consist of words `["hello", "word"]`, we tokenize by the words `["hello", "word"]`, get token ids`[[42891], [14742]]`, this is absolutely ok.

But if we have a chinese bound box text `汇丰` consist of words `["汇", "丰"]`, we tokenize by words `["汇", "丰"]`, will get token ids `[[6, 47360], [6, 49222]]`, this is a little strange, **both token ids has `6`, token id `6` is a "▁" (U+2581) , but we do not input `▁`**. It is because **sententcepiece will add space at the begining**(refer [this](https://github.com/google/sentencepiece/issues/15))

So the import thing is that, **when use chinese tokenizer, do not use bound box words as input, use bound box text as input**, here is `["汇丰"]`


```python
from transformers import AutoTokenizer
eng_tok = AutoTokenizer.from_pretrained("roberta-base") # microsot/layoutlmv3-base refer roberta-base
eng_tok(["hello", "word"], add_special_tokens=False)["input_ids"] # [[42891], [14742]]

xlm_tok = AutoTokenizer.from_pretrained("xlm-roberta-base") # microsoft/layoutlmv3-base-chinse refer xlm-roberta-base
xlm_tok(["汇", "丰"], add_special_tokens=False)["input_ids"] # [[6, 47360], [6, 49222]]

xlm_tok = AutoTokenizer.from_pretrained("xlm-roberta-base")
xlm_tok(["汇丰"], add_special_tokens=False)["input_ids"] # [[6, 47360, 49222]]
```

<!--
Congratulations! You've made it this far! You're not quite done yet though.

Once merged, your PR is going to appear in the release notes with the title you set, so make sure it's a great title that fully reflects the extent of your awesome contribution.

Then, please replace this with a description of the change and which issue is fixed (if applicable). Please also include relevant motivation and context. List any dependencies (if any) that are required for this change.

Once you're done, someone will review your PR shortly (see the section "Who can review?" below to tag some potential reviewers). They may suggest changes to make the code even better. If no one reviewed your PR after a week has passed, don't hesitate to post a new comment @-mentioning the same persons---sometimes notifications get lost.
-->

<!-- Remove if not applicable -->


<!-- Your PR will be replied to more quickly if you can figure out the right person to tag with @

 If you know how to use git blame, that is the easiest way, otherwise, here is a rough guide of **who to tag**.
 Please tag fewer than 3 people.

Models:

- albert, bert, xlm: @LysandreJik
- blenderbot, bart, marian, pegasus, encoderdecoder,  t5: @patrickvonplaten, @patil-suraj
- longformer, reformer, transfoxl, xlnet: @patrickvonplaten
- fsmt: @stas00
- funnel: @sgugger
- gpt2: @patrickvonplaten, @LysandreJik
- rag: @patrickvonplaten, @lhoestq
- tensorflow: @LysandreJik

Library:

- benchmarks: @patrickvonplaten
- deepspeed: @stas00
- ray/raytune: @richardliaw, @amogkam
- text generation: @patrickvonplaten
- tokenizers: @n1t0, @LysandreJik
- trainer: @sgugger
- pipelines: @LysandreJik

Documentation: @sgugger

HF projects:

- datasets: [different repo](https://github.com/huggingface/datasets)
- rust tokenizers: [different repo](https://github.com/huggingface/tokenizers)

Examples:

- maintained examples (not research project or legacy): @sgugger, @patil-suraj
- research_projects/bert-loses-patience: @JetRunner
- research_projects/distillation: @VictorSanh

 -->


Comments:
_The documentation is not available anymore as the PR was closed or merged._

Hi,

Could you try using [LayoutXLMTokenizer](https://huggingface.co/docs/transformers/model_doc/layoutxlm#transformers.LayoutXLMTokenizer)/[LayoutXLMTokenizerFast](https://huggingface.co/docs/transformers/model_doc/layoutxlm#transformers.LayoutXLMTokenizerFast) instead?

Normally, these should be compatible with microsoft/layoutlmv3-base-chinese.

> Hi,
> 
> Could you try using [LayoutXLMTokenizer](https://huggingface.co/docs/transformers/model_doc/layoutxlm#transformers.LayoutXLMTokenizer)/[LayoutXLMTokenizerFast](https://huggingface.co/docs/transformers/model_doc/layoutxlm#transformers.LayoutXLMTokenizerFast) instead?
> 
> Normally, these should be compatible with microsoft/layoutlmv3-base-chinese.

@NielsRogge sorry, I didn't find that `LayoutXLMTokenizer` is used for this model, maybe this will make code easier，but maybe   more document is better. I will close this pr