モデルは文字ではなく トークン という単位で言葉を見ています。 ここでは、入力した文が実際にどう分割され、それぞれのトークンを ぐっぴーが学習中に何回見たかを確かめられます。 ひらがなの短い文と、漢字や英語の混じった文を見くらべてみてください。
読みかた
各トークンの下の数字は トークンID です。モデルの中では、この番号だけが扱われます。 色は、そのトークンが学習データに何回出てきたかを表します。
赤いトークンは、学習データに一度も出てこなかったものです。
IDは存在するので 入力できますが、モデルは この文字が
どんな意味で、つぎに何が来るのかを 学ぶ機会が 一度も ありませんでした。
つまり「読んだことがない字」です。
おもしろいことに、これらの数字が 手つかずのままなわけでは ありません。
このモデルは 埋め込みを 出力側とも 共有しているので、学習のたびに
「この字は 出さない」方向に 押し下げられています。実際に 測ると、
未出現トークンの点数は よく出るトークンより はっきり低くなっています。
使いかたは 知らないまま、「使わないこと」だけを 覚えた状態です。
また、学習データにない漢字は、1文字がまるごと1トークンにならず
E5 90 BE のようなバイト単位に分解されます
(UTF-8では たいていの漢字が3バイト)。だから
「おなか すいた」は3トークンなのに「吾輩は猫である」は12トークンにもなります。
これは、コーパスに自分の文章を足して学習させるときに効いてきます。 モデルが知らない文字ばかりの文章は、系列が長くなるうえに、 埋め込みをゼロから学ばせる必要があるので、覚えさせるコストが高くつきます。 逆に、すでによく知っている ひらがなの言い回しは少ない学習で早く馴染みます。