LLMがテキストを処理するときの最小単位が「トークン」って聞いたんだけど、 そもそもなぜ文字や単語をそのまま使わずに、わざわざトークンという概念を導入してるの? (解決したら閉じます)
LLMのトークンはなぜ文字と単語を使わないのか教えてくれ
9レス / 最終更新 2026/07/20 12:18
>>1 トークンはヒト言語のための単位じゃなくて、文字列をモデルが処理できる離散的な記号に変換したものを指す。 1は「1トークン」を、グラム/リットルみたいな普遍的な単位だと誤解してるんじゃないかな。 正確には、辞書から取り出された1個の記号=1トークンだから、同じ文章でも、モデルやトークナイザーが違えばトークン数が変わるっていうこと。 コンピューターはそのままで「猫」という意味を扱えないから、最終的に文章を数字の列に変換する必要がある。 例えば「猫が走る」を次のような整数列にする。 [5821, 114, 9387] このとき、番号(5821等)に対応する要素がトークンで、モデルは大まかに「これまでのトークン"列"を見て、次に来るトークンの確率を計算する」 っていう処理を繰り返す。 だから、文章をどの大きさで区切るかを決めないといけないんだけど、それはだいたい3つあり、 文字単位: 走 る 単語単位: 走る サブワード単位: 走 る / 走る みたいに、頻度に応じて変える。 (最近のモデルはこのサブワード方式を採用してることが多い)
文字単位だけでもLLMは作れるけど、効率上の問題が有るからやってないだけで、 例えば英語の文章を文字単位にすると、internationalization(国際化)は20個の処理単位になって、 サブワードならinternational,izationのように数個にできる。(この処理する位置の数を、系列長と呼ぶ) 系列長が増えると、計算量が増えるし、遠く離れた情報同士を結びつけにくくなったり、色んな問題が起きる。 「ありがとう」が何百万回もデータに出てくるなら、毎回1文字ずつ処理するより、まとまった記号として扱う方が効率的っていうことね。 なんなら文字の定義も普遍的ではなく、人間には一文字に見えても、コンピューター内部で複数のUnicodeコードから構成されてることがある。 国旗の絵文字とか。一文字という概念自体が機械的に明確じゃないです。 そこでトークンという妥協案が生まれた~っていう流れ。 文字単位と単語単位の中間を取れば(サブワード型トークナイザー)、 頻出する単語と文字列は一つのトークンにして、珍しい単語は複数の小さなトークンに分割できる。 グラム/リットルのような普遍的な単位ではないっていうのは、このことから。 (1トークンが表す情報量は一定ではなく、モデルによって異なるから) 尚入力は1,000トークン、1秒間に50トークン生成、みたいな計数単位としての表現は成立する。
>>4 そうだけど、 1Tトークンで訓練 → モデルの事前学習で使ったトークナイザーに通した結果、 合計1兆個のトークン位置を処理した って意味だけど、1兆"種類"のトークンでは無いです。 語彙が12万8000種なら、12万8000種の記号が合計1兆回出現した、という数え方で、 Llama3は語彙数12万8000で最大モデルは約15.6兆個のトークンを処理してます。 延べ数だということが重要で、同じ文章を2回学習すれば2回分として数えられるから、1兆トークン分の個性的な文章があった、とは限らない。 先の説明から分かるように、トークナイザーが違うと同じ文章のトークン数も変わるから、モデルAで2兆トークン、モデルBで1.5兆トークン → AはBより33%多く文章を学んだ という訳では無いです。
「訓練トークン数が多いほど良いのか」 → 良質なデータを追加するなら基本的には増やした方が良い。但し効果は逓減するから、後半ほど改善幅が小さくなる傾向があります。同じ訓練予算なら、大きなモデルを短く訓練するか、小さなモデルを長く訓練するかを選ぶ必要もあるから、「常に大きいモデルにすべき」「常に小さいモデルにすべき」というのはない。 訓練は一度だけど、推論はその後何億回も行われるから、巨大なモデルを短く訓練するより、小さいモデルを大量のトークンで徹底的に訓練する方が、訓練費は高くてもその後の推論費を安く出来ることがあるから、将来まで含めたら合理的なことも有る。