「魔法少女リリカルなのは」を形態素解析しよう
まずこの話題を話すためには「魔法少女リリカルなのは」形態素解析問題について話さねばなるまい。「魔法少女リリカルなのは」形態素解析問題とは簡単に言うと「なのは」を人名としてユーザー辞書に登録すると「~なのは」という日本文の解析がUnidicやMecabでうまくいかなくなる問題である。しかし最近はBPEやSentence Pieceなどの台頭によりトークナイザー方法も進化してきた。そこで, 現代のトークナイザーはどのように「魔法少女リリカルなのは」をトークナイズしていくのかを見ていこうというのがこの記事の目的である。
まずは人の手でトークナイズ
最近はトークナイズ方法も色々考案されてきているため意味が変わってきている気がするが, 元々の意味での形態素解析とは、文章を意味を持つ最小単位である「形態素」に区切り、それぞれを名詞や動詞などの品詞に分類することである。なので魔法少女リリカルなのはは固有名詞なので「魔法少女リリカルなのは」でも良いが, それだとコーパス内に「魔法少女リリカルなのは」トークンの存在確率は低いと考えられるので, より良いテキスト応答システムを作る観点から真面目に考えることにする。というわけで人手によるトークナイズ結果はこちらである。
['魔法', '少女', 'リリカル', 'なのは']
魔法, 少女が名詞であることは言うまでもないだろう。リリカルは「lyrical」という形容詞なのでこれが最も良い, なのはは人名である。これだけは譲れない。
Tokenizer比較
GPT2 BPE Tokenizer
- \ufffdとなるところはバイトリテラル表現にした
['魔', b'\xe6\xb3', b'\x95', b'\xe5\xb0', b'\x91', '女', 'リ', 'リ', 'カ', 'ル', 'な', 'の', 'は']
Gemma (google/gemma-7b)
['魔法', '少女', 'リ', 'リ', 'カル', 'なのは']
BERT base Japanese (tohoku-nlp/bert-base-japanese-whole-word-masking)
['魔法', '少女', 'リ', '##リカル', 'な', 'の', 'は']
intfloat/multilingual-e5-large
['▁', '魔法', '少女', 'リ', 'リ', 'カル', 'な', 'のは']
Mixtral (mistralai/Mixtral-8x7B-Instruct-v0.1)
['▁', '魔', '法', '少', '女', 'リ', 'リ', 'カ', 'ル', 'な', 'の', 'は']
google/flan-t5-large
['▁', '魔法少女リリカルなのは']
t5-base-japanese (sonoisa/t5-base-japanese)
['▁', '魔法少女', 'リ', 'リ', 'カル', 'な', 'の', 'は']
感想
日本語コーパスを含んでいるであろうモデルは「魔法」, 「少女」もしくは「魔法少女」でトークン分割できていてよかった。「魔法少女リリカルなのは」, 「なのは」を1トークンで表現するやつはコーパス制作係にオタクのスパイでも紛れ込んでいたんだろうか
優勝はGemmaです。名誉オタクトークナイザー賞を差し上げます。