NLP テキストのエンコードとトークンのデコードを行うライブラリ。Python の transformers なしでトークナイズできます。
プラットフォームを選び、Python transformers に依存せずにトークナイズしてみましょう。
ailia-models をクローンし、multilingual-MiniLMv2 のゼロショット分類サンプルを実行します。tokenizer/ ディレクトリには sentencepiece.bpe.model と tokenizer_config.json が同梱されており、これは XLMRobertaTokenizer.from_pretrained() が期待するファイル構成です。
git clone https://github.com/ailia-ai/ailia-models.git
cd ailia-models/natural_language_processing/multilingual-minilmv2
pip3 install -r requirements.txt
python3 multilingual-minilmv2.py
tokenizer/ file layout
ailia Tokenizer は Python transformers のトークナイザを置き換えるクロスプラットフォームライブラリで、C++ / Unity / Flutter からも Python ランタイムなしで利用できます。
Hugging Face 互換 API を備えた 12 種類のトークナイザ。
自分のアプリケーションでテキストをエンコード・デコードする最小サンプル。
import ailia_tokenizer
tok = ailia_tokenizer.BertTokenizer.from_pretrained("./tokenizer/")
ids = tok.encode("Hello, world!")
text = tok.decode(ids)
ailia Tokenizer についてのよくある質問。
transformers ではなく ailia Tokenizer を使う理由は?transformers は Python 専用です。ailia Tokenizer は同じトークナイザを C++ / Unity (C#) / Flutter (Dart) / JNI / Python から呼び出せるネイティブライブラリとして提供しているため、Python ランタイムを同梱せずに iOS / Android / 組み込み環境でもトークナイズできます。
Python API は transformers と同じインターフェース (from_pretrained() / encode() / decode() など) を提供するため、既存コードは通常 import の差し替えだけで動きます。
主要なモデルファミリをカバーする 12 種類: Whisper / CLIP / XLM-RoBERTa / Marian / BERT (英語) / BERT 日本語 WordPiece / BERT 日本語 Character / T5 / RoBERTa / GPT-2 / Llama / Gemma。
encode() は tokenizer(sents, split_special_tokens=True) と一致します (特殊トークンはテキストとしてエンコード、padding / truncation なし)。
encodeWithSpecialTokens() は tokenizer(sents) と一致します (特殊トークンを ID としてエンコード)。
decode() は tokenizer.decode(ids, skip_special_tokens=True) と一致します。decodeWithSpecialTokens() は特殊トークンを保持します。
Whisper / CLIP / GPT-2 は単体で完結します。それ以外のトークナイザは関連ファイルを同じ場所に配置する必要があります:
SentencePiece (T5 / XLM-RoBERTa / Marian / Llama / Gemma): spiece.model / tokenizer.model / source.spm。
BERT (英語): vocab.txt + tokenizer_config.json。
BERT 日本語: ipadic 辞書 + vocab.txt (NFKC 正規化は自動)。
RoBERTa: vocab.json + merges.txt。
Python: 必要なファイルをひとつのディレクトリに置き、そのパスを from_pretrained() に渡します (例: BertTokenizer.from_pretrained("./tokenizer/"))。
C / C++ / Unity / Flutter / JNI: 対応する OpenModelFile / OpenVocabFile / OpenMergeFile / OpenDictionaryFile API で個別に開きます。
C++ バインディングはランタイムライブラリと同じ場所に ailia.lic を配置する必要があります:
Windows: ailia.dll と同じフォルダ (サンプルでは cpp/ 配下)。
macOS: ~/Library/SHALO/
Linux: ~/.shalo/
Python / Unity / Flutter / JNI バインディングは初回実行時にライセンスを自動ダウンロードするため、この手順は C++ バインディングに限ります。
評価ライセンスは実行時に自動でダウンロードされ、開発・評価用途に利用できます。商用配布には製品ライセンスを申請してください。詳細は ailia ライセンス規約 を参照してください。