OpenAIのChatGPTやGoogleのBardなど、近年ではさまざまなAIが人間レベルに近い会話を行うことができるようになりました。AIは基本的に文章の処理に「トークン」と呼ばれる単位で認識を行います。普通の文章がトークン的にはどのように分解されるのかを一目で判断できるツールが「トークナイザー」で、Metaの大規模言語モデルである「LLaMA」専用のツール「LLaMA-Tokenizer」が公開されています。

GitHub - belladoreai/llama-tokenizer-js: JS tokenizer for LLaMA based LLMs

https://github.com/belladoreai/llama-tokenizer-js

画像生成AIや対話型AIなどにプロンプトを入力するにあたって必要となるのは自然言語処理(NLP)です。自然言語処理とは、人間が使用する自然言語をコンピューターで処理して内容を抽出する技術です。自然言語処理を行うためには、まず文章を「トークン」とよばれる単語に分解し、それぞれのトークンにIDを振る「トークナイズ」を行い、コンピューターが処理できる入力形式に変換する必要があります。それを可視化するプログラムが「トークナイザー」です。

「LLaMA-Tokenizer」はJavaScript実行環境「Node.js」を利用する事で実行可能なほか、以下のサイトで無料のウェブデモが公開されており、実際に試すことが可能です。

llama-tokenizer-js playground

https://belladoreai.github.io/llama-tokenizer-js/example-demo/build/

LLaMA-Tokenizerの画面はこんな感じ。



最初から表示されている「Replace this text in the input field to see how 🦙 tokenization works.」という69文字の英文の場合、20トークンになる模様。下部に色分けされた「Replace this text in the input field to see how 🦙 tokenization works.」が出力されます。



日本語を入力してみた結果がこんな感じ。75文字の文章で61トークンになりました。日本語はトークン化する際に1字ずつ言葉を区切るため、英文と比べるとトークン数が増大してしまいます。



数字の羅列を入力してみました。「123456789」と入力すると、トークンの開始を示す「<s>」と空白が挿入された後、1字ずつトークンに区切られ、合計で11トークンになりました。



LLaMA-Tokenizerの開発者であるBelladore氏は、「現在トークナイザーで最も人気があるアプリケーションの一つは、OpenAIが公開するものですが、LLaMAを使っている人が、なぜLLaMAと互換性のないOpenAIのトークナイザーでトークン数を数えようとするのか、私には理解できません」と述べています。

ChatGPTなどのチャットAIがどんな風に文章をトークンとして認識しているのかが一目で分かる「Tokenizer」 - GIGAZINE



Belladore氏によると、自身が行ったテストの結果、OpenAIのトークナイザーとLLaMA-Tokenizerを比較するとトークン数が平均20%異なることが明らかになりました。「OpenAIのトークナイザーを使用してLLaMAに入力するプロンプト数を計測した場合、おおまかな数値しか得られません」と指摘しています。

また、GPT-3とCodexにしか互換性を持たなかったOpenAIのトークナイザーに対して、LLaMA-Tokenizerは「wizard-vicuna-13b-uncensored-gptq」や「manticore-7b-ggml」などの幅広いモデルに対して互換性を持つとのこと。一方で、LLaMA-TokenizerはOpenLLaMAのようなゼロから学習したモデルに関しては互換性を持ちません。

なお、LLaMA-Tokenizerのソースコードは、以下のリンク先で公開されています。

GitHub - belladoreai/llama-tokenizer-js: JS tokenizer for LLaMA based LLMs

https://github.com/belladoreai/llama-tokenizer-js