トークナイザ
テキストをトークン列に変換する仕組み。
BPE(Byte Pair Encoding)#
最も広く使われる方式。
- 全文字を初期語彙とする
- 最も頻出する隣接ペアを新しいトークンとして統合する
- 語彙サイズに達するまで繰り返す
頻出する語はそのまま 1 トークンに、 珍しい語は部分列に分解される。 データ駆動で語彙が決まるのが要点。
元は 1994 年のデータ圧縮アルゴリズムで、 Sennrich らが機械翻訳に転用した。
主な方式#
| 方式 | 使用例 |
|---|---|
| BPE | GPT 系 |
| WordPiece | BERT |
| Unigram | SentencePiece の既定 |
| SentencePiece | 空白を特別扱いしない。日本語に適する |
バイトレベル BPE#
Unicode 文字ではなくバイト列に BPE を適用する。
- どんな文字列も表現できる(未知語が原理的に存在しない)
- 絵文字、多言語、バイナリも扱える
代わりに、日本語のようなマルチバイト文字は 1 文字が複数バイトなのでトークン効率が悪くなる。
語彙サイズのトレードオフ#
| 大きい語彙 | 小さい語彙 |
|---|---|
| 系列が短い(速い) | 系列が長い |
| 埋め込み行列が大きい | 埋め込みが小さい |
| 珍しい語の学習が難しい | 部分列で汎化しやすい |
近年は 10 万〜20 万程度が多い。
参考文献#
- Rico Sennrich, Barry Haddow, Alexandra Birch. Neural Machine Translation of Rare Words with Subword Units. ACL, 2016. https://arxiv.org/abs/1508.07909
- Taku Kudo, John Richardson. SentencePiece: A simple and language independent subword tokenizer. EMNLP, 2018. https://arxiv.org/abs/1808.06226
- Dan Jurafsky, James H. Martin. Speech and Language Processing, 3rd ed. draft.(全文公開) https://web.stanford.edu/~jurafsky/slp3/