トークナイゼーションとは
Tokenization / トークン化 / トークナイザー
テキストをモデルが扱う最小単位であるトークンの列へ分割する処理
ひとことで言うと
文章をAIが読める細かい部品(トークン)に切り分ける処理。切り方しだいでAIの効率や得意・不得意が変わる。
概要
トークナイゼーションとは、テキストをモデルが扱う最小単位であるトークンの列へ分割する処理を指す。分割するプログラムはトークナイザーと呼ばれる。 単語単位や文字単位の分割に対し、現在のLLMでは頻出パターンをまとめるサブワード分割(BPEやUnigram法など)が主流で、未知語への頑健さと語彙サイズのバランスを取る。 トークンの区切り方は、モデルの処理コスト・多言語の効率・数値や文字列の扱いに直結する。日本語はアルファベット圏の言語より1文字あたりのトークン数が多くなりやすいなど、言語による差も生む。
歴史
サブワード分割の代表であるBPEは、2016年に機械翻訳向けの手法として導入されたものがLLMへ受け継がれている。
コード例
Hugging Face Transformersでのトークン化
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
tokens = tokenizer.encode("Hello, world!")
print(tokens)
print(tokenizer.convert_ids_to_tokens(tokens))利点
- 語彙サイズを抑えつつ、未知語にもサブワード単位で対応できる
- 文字単位より少ないトークン数で長い文章を表現でき、計算効率を高める
欠点
- 分割の境界が人間の直感的な単語区切りと一致しないことがあり、数値計算や文字列操作を誤らせやすい
- 言語によってトークン化の効率に差があり、非英語圏の言語ではトークン数が増えやすい
- 学習後に語彙やトークナイザーを変更するのが難しく、モデル設計の初期段階で決定する必要がある
関連用語
よくある質問
BPEとは何か。
Byte Pair Encodingの略で、頻出する文字やサブワードのペアを繰り返し結合して語彙を構築するサブワード分割手法。LLMのトークナイザーで広く使われている。