Add sentencepiece to BertJapaneseTokenizer
Author: conan1024hao
Pull request: yes

# What does this PR do?
This PR adds a class to use [sentencepiece](https://github.com/google/sentencepiece) as subword tokenizer with `BertJapaneseTokenizer`.

Thanks to https://github.com/huggingface/transformers/pull/19043, it's more convenient now to use Japanese models in transformers. However, our model(https://huggingface.co/nlp-waseda/roberta-base-japanese, currently SOTA MLM model in Japanese) was trained by sentencepiece, and `BertJapaneseTokenizer` currently only supports WordPiece. There is only one last step to use our model without any data preprocessing, that's sentencepiece, so we added it.

We also found https://github.com/huggingface/transformers/pull/19043 did not update the documentation, if it's necessary, we can update the documentation for these 2 PR together.

## Before submitting
- [ ] This PR fixes a typo or improves the docs (you can dismiss the other checks if that's the case).
- [x] Did you read the [contributor guideline](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md#start-contributing-pull-requests),
      Pull Request section?
- [ ] Was this discussed/approved via a Github issue or the [forum](https://discuss.huggingface.co/)? Please add a link
      to it if that's the case.
- [ ] Did you make sure to update the documentation with your changes? Here are the
      [documentation guidelines](https://github.com/huggingface/transformers/tree/main/docs), and
      [here are tips on formatting docstrings](https://github.com/huggingface/transformers/tree/main/docs#writing-source-documentation).
- [x] Did you write any new necessary tests?


## Who can review?
Models: @LysandreJik
Library: @n1t0
Documentation: @sgugger 

@r-terada @hiroshi-matsuda-rit
If you have time, welcome to review this PR (They are the last contributors of `BertJapaneseTokenizer` ). 



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

Thanks for your PR. The Transformers library is not a modular toolbox however and a model called `BertJapanese` should have the same tokenizer as BERT for obvious reasons. To use another tokenizer you can simply put the tokenizer code in the repo of your model, using our [custom code feature](https://huggingface.co/docs/transformers/custom_models).

@sgugger Thanks for your reply. We believe sentencepiece is as important as [sudachi](https://github.com/WorksApplications/SudachiPy) and [jumanpp](https://github.com/ku-nlp/pyknp) which are also not a part of origin BERT tokenizer. Since there will be more sentencepiece-based Japanese models in the futures, if we use the custom code feature, it's will be difficult to maintain a lot of model repos.

Hi @sgugger,

In [our blog post (in Japanese)](https://www.megagon.ai/jp/blog/autotokenizer/), we explained how `trust_remote_code=True` becomes an unavoidable barrier for utilizing the custom Japanese transformers models on the application side.

As you mentioned above, we should consider not making `BertJapanese` a messy toolbox.
I think the answer is generalizing `SentencePiece` as universal sub-word tokenizer in huggingface/transformers like [tokenizers/sentencepiece_bpe](https://github.com/huggingface/tokenizers/blob/96a9e5715c5e71ddc26f36fc456c95d729b23923/bindings/python/py_src/tokenizers/implementations/sentencepiece_bpe.py#L10).

Actually, many Japanese trasnformers models are trained with [AlbertTokenizer](https://github.com/huggingface/transformers/blob/main/src/transformers/models/albert/tokenization_albert.py) to subtokenize the pre-tokenized input text by `SentencePiece`.
We want to find a way to combine `mecab`, `sudachi`, or `jumanpp` (implemented in BertJapaneseTokenizer) and `SentencePiece` (implemented in AlbertTokenizer) like [tokenizers/pre_tokenizers.Sequence](https://github.com/huggingface/tokenizers/blob/main/bindings/python/py_src/tokenizers/pre_tokenizers/__init__.py#L11).

Do you have any good ideas?

I agree with @sgugger that we don't want the library to be a modular toolbox, and this PR goes against this philosophy. However, I think the file is already modular, and the changes here directly align with the existing code.

I would be fine with merging this PR, but I think we should consider splitting this file into separate components instead of having it be configurable as it is right now.

@sgugger  Thanks for checking. I have fixed the breaking change and removed the fixture.