トークナイザーとは|文章が数字に変わるところ

文を切り分ける AIの仕組みと用語

AIは文字をそのまま読んでいません。

まず細かい単位に切り分け、番号に変えてから処理します。この工程が、料金と精度の両方に効いています。

何をしているか

文章を、決められた辞書にある単位へ分解する作業です。

単位は単語とは限りません。「understanding」が「understand」と「ing」に割れることもあれば、1語がそのまま1単位のこともある。この分け方を決めるのがトークナイザーです。

分解したあと、それぞれに辞書の番号が振られます。モデルが受け取るのは、この番号の並びです。

なぜ単語で切らないのか

単語ごとに辞書を作ると、収まりきらないからです。

新語、固有名詞、打ち間違い。辞書にない語が来たときに処理できません。かといって全部を1文字ずつにすると、こんどは並びが長くなりすぎる。

その中間を取る手法が、機械翻訳の研究から出てきました。よく出る並びをまとめて1単位にし、珍しい語は細かく割る。頻度に応じて粒度を変える考え方です。

これにより、辞書に載っていない語も、断片の組み合わせとして必ず表せるようになりました。

日本語は不利になる

言語 1トークンあたりの文字数
英語 およそ4〜5文字
日本語 およそ1〜1.5文字
同じ内容でも、日本語のほうがトークン数が増える

辞書を作るときに読ませた文章の多くが英語なので、英語の並びほどまとめて1単位になりやすい。日本語は1文字が1単位になることが多く、そのぶん数が膨らみます。

料金は数に比例します。同じ内容を伝えるのに、日本語のほうが高くつく。入れられる分量の上限も、そのぶん早く来ます。

精度にも関わる

文字を数える作業が苦手な理由も、ここにあります。

モデルが見ているのは番号の並びであって、1文字ずつではありません。「この単語に文字はいくつあるか」と聞かれても、内部では分解されていない塊として扱われている。

しりとりや、文字数の指定が守られないのも、同じ理由です。数えるという作業が、そもそも設計に入っていない。

桁の大きい数字が苦手なのも近い話で、数値が途中で割れることがあります。

画像や音声も同じ扱い

文章以外を扱えるモデルも、内部では同じことをしています。

画像は小さな区画に分けられ、それぞれが1単位として番号に変わる。音声も短い区間に切られて番号になります。文章と同じ場所で処理できるのは、この形に揃えているからです。

料金表に「画像1枚あたり何トークン」と書かれているのは、この換算の結果です。解像度が上がれば区画が増え、そのぶん数も増えます。

モデルごとに違う

切り分け方は共通ではありません。

提供元ごと、モデルの世代ごとに辞書が違います。同じ文章でも、数えたトークン数がサービスによって変わる。

料金を見積もるときは、使うモデルの数え方で測る必要があります。提供元が公開している計測ツールを使うのが確実です。他社の数字を流用すると、2割前後ずれることがあります。

絵文字と記号は重い

意外に数を食うのが、絵文字や特殊な記号です。

1文字に見えても、内部では複数の単位に割れることがある。装飾のために記号を並べた指示文は、見た目より高くついている場合があります。

罫線で表を描く書き方も同じ。渡すだけなら、見出しと項目を素直に並べたほうが軽く済みます。

実務で効くこと

知っておくと、判断が変わる場面があります。

長い資料を投げる前に、おおよそのトークン数を出しておく。日本語の資料なら、文字数と近い数になると見ておけば大きく外れません。

費用を下げたい処理では、英語で指示を書く手もあります。ただし出力を日本語にするなら、出力側は結局かさむ。効くのは指示文が長い場合です。

文字数を厳密に守らせたいときは、モデルに数えさせず、出てきた文をこちらで数える。仕組み上、任せられない作業だからです。

辞書は後から足せない

自社の専門用語を1単位として登録したい、という要望はよく出ます。

できません。辞書は学習の前に決まっていて、モデルの構造と結びついているからです。後から語を足すと、番号の対応が崩れます。

専門用語が細かく割れること自体は、精度にほとんど影響しません。割れた断片の並びとして、文脈から意味を取れるためです。気にする必要があるのは料金のほうだけ。

出典

分割手法の原典と、モデルの入力形式については下記に基づきます。

タイトルとURLをコピーしました