ailia Tokenizer

NLP テキストのエンコードとトークンのデコードを行うライブラリ。Python の transformers なしでトークナイズできます。

はじめに

プラットフォームを選び、Python transformers に依存せずにトークナイズしてみましょう。

1

インストール

ailia Tokenizer の Python パッケージを PyPI からインストールします。

pip3 install ailia_tokenizer
PyPI で見る
2

サンプルを実行

ailia-models をクローンし、multilingual-MiniLMv2 のゼロショット分類サンプルを実行します。tokenizer/ ディレクトリには sentencepiece.bpe.modeltokenizer_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 ランタイムなしで利用できます。

対応 OS

  • Windows 10 / 11
  • macOS 11 以降
  • Linux (Ubuntu 20.04 以降)
  • iOS 13 / Android 7 以降

言語とコンパイラ

  • Python 3.6 以降 / Dart・Flutter 3.19 以降
  • C++17 (VS 2019 以降 / Xcode 14.2 以降 / clang)
  • C# / Unity 2021.3.10f1 以降
  • Kotlin / Java (JNI)

組み込みコンポーネント

  • SentencePiece
  • MeCab + ipadic
  • BPE (最適化済)
  • NFKC 正規化

出力形式

  • トークン ID (int)
  • デコードされたテキスト (str / UTF-8)
  • convert_tokens_to_ids / ids_to_tokens
  • attention mask 付き encode_plus

機能

Hugging Face 互換 API を備えた 12 種類のトークナイザ。

音声 / 視覚

  • Whisper (多言語)
  • CLIP (テキスト・画像)

翻訳 / 要約

  • Marian (FuguMT 英 ↔ 日)
  • T5 (sentencepiece)
  • XLM-RoBERTa

BERT 系

  • BERT (英語)
  • BERT 日本語 WordPiece
  • BERT 日本語 Character
  • RoBERTa

LLM 系

  • GPT-2
  • Llama
  • Gemma

プロジェクトで API を使う

自分のアプリケーションでテキストをエンコード・デコードする最小サンプル。

import ailia_tokenizer

tok = ailia_tokenizer.BertTokenizer.from_pretrained("./tokenizer/")
ids = tok.encode("Hello, world!")
text = tok.decode(ids)

プラットフォーム別 API リファレンス

Python

C++

Unity

Flutter

JNI

よくある質問

ailia Tokenizer についてのよくある質問。

Hugging Face 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。

ailia Tokenizer は transformers の挙動とどう一致しますか?

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++ で使うとき、ライセンスファイルはどこに置きますか?

C++ バインディングはランタイムライブラリと同じ場所に ailia.lic を配置する必要があります:

Windows: ailia.dll と同じフォルダ (サンプルでは cpp/ 配下)。
macOS: ~/Library/SHALO/
Linux: ~/.shalo/

Python / Unity / Flutter / JNI バインディングは初回実行時にライセンスを自動ダウンロードするため、この手順は C++ バインディングに限ります。

ライセンスはどう扱われますか?

評価ライセンスは実行時に自動でダウンロードされ、開発・評価用途に利用できます。商用配布には製品ライセンスを申請してください。詳細は ailia ライセンス規約 を参照してください。

資料