Token
Tokenについて
トークンとは何ですか?
ラフのアバター
作者:ラフ
一週間以上前に更新
トークンとは何ですか?
トークンは単語の一部と考えることができます。APIがプロンプトを処理する前に、入力はトークンに分解されます。これらのトークンは単語の先頭や末尾で正確に分割されるわけではなく、トークンには末尾のスペースやサブワードが含まれることもあります。以下に、トークンの長さを理解するための経験則を示します:
1トークン~=英語では4文字
1トークン = ¾ワード
100トークン = 75ワード
または
1-2文 ‾= 30トークン
1段落 ‾= 100トークン
1500語 ‾= 2048トークン
トークンがどのように積み重なっていくのか、さらに背景を知るために、次のことを考えてみよう:
ウェイン・グレツキーの名言「シュートを打たないのは100%失敗する」には11個のトークンが含まれる。
OpenAIの憲章には476のトークンが含まれている。
アメリカの独立宣言のトランスクリプトには1,695のトークンが含まれている。
単語をどのようにトークンに分割するかも言語に依存する。例えば「Cómo estás」(スペイン語で「お元気ですか」)には5個のトークンが含まれる(10文字分)。トークン対文字の比率が高くなると、英語以外の言語のAPIを実装するコストが高くなります。
トークン化についてさらに詳しく調べるには、トークンの数を計算し、テキストがどのようにトークンに分割されるかを確認できるインタラクティブなTokenizerツールをご利用ください。また、プログラムでテキストをトークン化したい場合は、OpenAIモデル専用の高速なBPEトークナイザーであるTiktokenを使用してください。Python用のtransformersパッケージやnode.js用のgpt-3-encoderパッケージもあります。
トークンの制限
使用するモデルにもよりますが、リクエストは最大4097トークンをプロンプトと完了の間で共有することができます。プロンプトが4000トークンなら、補完は最大97トークンです。
この制限は現在のところ技術的な制限ですが、プロンプトを凝縮する、テキストを小さく分割するなど、制限内で問題を解決するクリエイティブな方法がよくあります。
トークンの価格
APIは異なる価格帯で複数のモデル・タイプを提供している。各モデルにはさまざまな機能があり、davinciが最も高機能で、adaが最も高速です。これらの異なるモデルへのリクエストは、それぞれ異なる価格で提供されます。トークンの価格についての詳細はこちらをご覧ください。
トークンの探索
APIはコーパスデータの文脈に従って単語を扱います。GPT-3はプロンプトを受け取り、入力をトークンのリストに変換し、プロンプトを処理し、予測されたトークンをレスポンスに表示される単語に変換します。
私たちには2つの同じ単語に見えるかもしれないが、それらがテキスト内でどのように構造化されているかによって、異なるトークンに生成されるかもしれない。APIがテキスト内の文脈に基づいて「red」という単語のトークン値を生成する方法を考えてみよう:
観察
あるトークンの出現頻度が高いほど、そのトークンに割り当てられるトークン番号は低くなる:
ピリオドに対して生成されたトークンは、3つの文すべてで同じ(「13」)である。これは、文脈上、ピリオドがコーパスのデータ全体でほとんど同じように使われているからである。
red」に対して生成されるトークンは、文中の配置によって異なる:
文の途中の小文字: ' red' - (token: "2266")
文の途中の大文字: ' red' - (token: "2297")
文頭の大文字: 'Red' - (token: "7738")
よりよいプロンプトデザインのためにトークンの知識を使用する
スペースで終わるプロンプト
トークンには末尾にスペース文字を含めることができることがわかっているので、スペース文字で終わるプロンプトは低品質の出力になる可能性があることを覚えておくとよい。これは、APIがすでにトークンの辞書に末尾のスペースを組み込んでいるためです。
logit_bias パラメータの使用
logit_bias パラメータで特定のトークンに対するバイアスを設定すると、指定したトークンが補完候補に表示される可能性を変更できます。例えば、ユーザーの卵アレルギーに敏感なAIベーキングアシスタントを構築しているとします。
バナナブレッドの材料は」というプロンプトでAPIを実行すると、26.8%の確率で2番目の材料として「卵」が含まれる応答が返されます。
注:Playgroundで完了確率を表示するには、Show ProbabilitiesドロップダウンからFull Spectrumを選択します。
AIベーキング・アシスタントは卵アレルギーに敏感なので、トークンの知識を使ってlogit_biasパラメータにバイアスを設定し、モデルが'egg'という単語のバリエーションを含む回答を生成しないようにすることができます。
まず、このトークナイザ・ツールを使って、バイアスを設定する必要のあるトークンを特定します。
トークン
末尾にスペースを含む単数形: ' egg' - "5935"
末尾にスペースを含む複数形: ' eggs' - "9653"
Egg'または'Eggs'に対して生成されるサブワードトークン - 'gg': "1130"
logit_biasパラメータは、-100から+100の範囲のバイアス値を受け入れ、極端な値は、関連するトークンの禁止(-100)または排他的選択(100)のいずれかになります。
プロンプトにロジットバイアスを追加すると、バナナブレッドプロンプトの応答に「egg」 (およびそのバリエーション) が含まれる可能性が変更されます。上記のプロンプトは卵を含まない応答を生成します!
最高の卵なしバナナブレッドレシピを生成することは保証できませんが、AIベーキングアシスタントはユーザーの卵アレルギーに配慮するという要件を満たしています。
関連: