トークン化(Tokenization)
概要
トークン化は、未加工のテキストを 大規模言語モデル が扱える単位(トークン)の系列へ変換する処理です。モデルが「どのような言葉を学習するか」を規定する重要な構成要素であり、事前学習 の前提となります。トークンは私たちの直感的な「単語」の概念と必ずしも一致しません。
語彙(Vocabulary)
- 英語を母語とする人の語彙数は平均2万〜3万5千語とされる
- 語彙に存在しないトークンは OOV(Out-Of-Vocabulary)トークン と呼ばれる
- 語彙数が多いほど、与えられたテキストを表現するのに必要なトークン数が減り、圧縮効率が向上する(最適な語彙数のトレードオフがある)
トークン化パイプライン
- 正規化(Normalization)
- 小文字化、アクセント記号の除去、Unicode 正規化
- 日本語では一般に NFKC(正規化形式KC)が適用され、全角英数字が半角に置換される
- プリトークン化(Pre-tokenization)
- まず単語単位に分割し、その出力をサブワードトークナイザに渡す
- トークン化(サブワード分割)
- 後処理(Post-processing)
主なアルゴリズム
| アルゴリズム | 特徴 |
|---|---|
| BPE(Byte Pair Encoding) | 出現頻度に基づきマージルールを繰り返し適用 |
| Byte-Level BPE | バイト単位の BPE。未知文字に強い |
| WordPiece | BPE に類似するが、頻度ではなく最尤推定(頻度の積で正規化したスコア)でマージ |
トークン化を行わない文字・バイトレベルのモデル(CANINE, ByT5, Charformer)も存在します。トークナイザはスペルミスに弱い傾向がありますが、大規模モデルはスペルミスに対して比較的堅牢です。
特殊トークン(Special Token)
モデルに応じて、処理を補助する特殊トークンが語彙に追加されます。
<PAD>— 最大系列長に満たない入力を埋めるパディング<EOS>— 系列の終わり。生成モデルはこれが出力された時点で生成を停止<UNK>— 語彙外(OOV)トークン<TOOL_CALL>/</TOOL_CALL>— 外部ツールへの入力(AIエージェント のツール呼び出し)<TOOL_RESULT>/</TOOL_RESULT>— ツールから返された結果
関連ページ
参考資料
- つくりながら学ぶ!LLM自作入門(3章 語彙とトークン化)