AIは文字をそのまま読んでいません。
まず細かい単位に切り分け、番号に変えてから処理します。この工程が、料金と精度の両方に効いています。
何をしているか
文章を、決められた辞書にある単位へ分解する作業です。
単位は単語とは限りません。「understanding」が「understand」と「ing」に割れることもあれば、1語がそのまま1単位のこともある。この分け方を決めるのがトークナイザーです。
分解したあと、それぞれに辞書の番号が振られます。モデルが受け取るのは、この番号の並びです。
なぜ単語で切らないのか
単語ごとに辞書を作ると、収まりきらないからです。
新語、固有名詞、打ち間違い。辞書にない語が来たときに処理できません。かといって全部を1文字ずつにすると、こんどは並びが長くなりすぎる。
その中間を取る手法が、機械翻訳の研究から出てきました。よく出る並びをまとめて1単位にし、珍しい語は細かく割る。頻度に応じて粒度を変える考え方です。
これにより、辞書に載っていない語も、断片の組み合わせとして必ず表せるようになりました。
日本語は不利になる
| 言語 | 1トークンあたりの文字数 |
|---|---|
| 英語 | およそ4〜5文字 |
| 日本語 | およそ1〜1.5文字 |
辞書を作るときに読ませた文章の多くが英語なので、英語の並びほどまとめて1単位になりやすい。日本語は1文字が1単位になることが多く、そのぶん数が膨らみます。
料金は数に比例します。同じ内容を伝えるのに、日本語のほうが高くつく。入れられる分量の上限も、そのぶん早く来ます。
精度にも関わる
文字を数える作業が苦手な理由も、ここにあります。
モデルが見ているのは番号の並びであって、1文字ずつではありません。「この単語に文字はいくつあるか」と聞かれても、内部では分解されていない塊として扱われている。
しりとりや、文字数の指定が守られないのも、同じ理由です。数えるという作業が、そもそも設計に入っていない。
桁の大きい数字が苦手なのも近い話で、数値が途中で割れることがあります。
画像や音声も同じ扱い
文章以外を扱えるモデルも、内部では同じことをしています。
画像は小さな区画に分けられ、それぞれが1単位として番号に変わる。音声も短い区間に切られて番号になります。文章と同じ場所で処理できるのは、この形に揃えているからです。
料金表に「画像1枚あたり何トークン」と書かれているのは、この換算の結果です。解像度が上がれば区画が増え、そのぶん数も増えます。
モデルごとに違う
切り分け方は共通ではありません。
提供元ごと、モデルの世代ごとに辞書が違います。同じ文章でも、数えたトークン数がサービスによって変わる。
料金を見積もるときは、使うモデルの数え方で測る必要があります。提供元が公開している計測ツールを使うのが確実です。他社の数字を流用すると、2割前後ずれることがあります。
絵文字と記号は重い
意外に数を食うのが、絵文字や特殊な記号です。
1文字に見えても、内部では複数の単位に割れることがある。装飾のために記号を並べた指示文は、見た目より高くついている場合があります。
罫線で表を描く書き方も同じ。渡すだけなら、見出しと項目を素直に並べたほうが軽く済みます。
実務で効くこと
知っておくと、判断が変わる場面があります。
長い資料を投げる前に、おおよそのトークン数を出しておく。日本語の資料なら、文字数と近い数になると見ておけば大きく外れません。
費用を下げたい処理では、英語で指示を書く手もあります。ただし出力を日本語にするなら、出力側は結局かさむ。効くのは指示文が長い場合です。
文字数を厳密に守らせたいときは、モデルに数えさせず、出てきた文をこちらで数える。仕組み上、任せられない作業だからです。
辞書は後から足せない
自社の専門用語を1単位として登録したい、という要望はよく出ます。
できません。辞書は学習の前に決まっていて、モデルの構造と結びついているからです。後から語を足すと、番号の対応が崩れます。
専門用語が細かく割れること自体は、精度にほとんど影響しません。割れた断片の並びとして、文脈から意味を取れるためです。気にする必要があるのは料金のほうだけ。
出典
分割手法の原典と、モデルの入力形式については下記に基づきます。

