NLP におけるトークン化を理解する: テキスト処理の初心者ガイド

公開: 2024-11-26

トークン化は、自然言語処理 (NLP) の重要なコンポーネントですが、見落とされがちなコンポーネントです。このガイドでは、トークン化、そのユースケース、長所と短所、およびトークン化がほぼすべての大規模言語モデル (LLM) に関与する理由について説明します。

目次

  • NLP におけるトークン化とは何ですか?
  • トークン化の種類
  • トークン化の仕組み
  • トークン化アプリケーション
  • トークン化のメリット
  • トークン化の課題

NLP におけるトークン化とは何ですか?

トークン化は、テキストを機械学習 (ML) モデルが使用できる数値形式に変換する NLP 手法です。 Anthropic の Claude、Google の Gemini、OpenAI の GPT シリーズのメンバーなどの LLM にプロンプ​​トを送信すると、モデルはテキストを直接読み取りません。これらのモデルは入力として数値のみを取ることができるため、最初にトークナイザーを使用してテキストを一連の数値に変換する必要があります。

トークナイザーがテキストをトークン化する 1 つの方法は、テキストを個別の単語に分割し、それぞれの一意の単語に番号を割り当てることです。

「Grammarly は文法と ML とライティングが大好きです」は次のようになります。

NLP でのトークン化の例

各単語 (およびそれに関連付けられた数字) はトークンです。 ML モデルは、トークンのシーケンス ([7,102]、[37]、[564]、[2]、[9,763]、[2]、[231]) を使用して操作を実行し、出力を生成できます。通常、この出力は数値であり、これと同じトークン化プロセスの逆を使用してテキストに変換されます。実際には、この単語ごとのトークン化は例としては優れていますが、後で説明する理由により業界ではほとんど使用されません。

最後に注意すべき点は、トークナイザーには語彙、つまり処理できるトークンの完全なセットがあるということです。基本的な英単語は知っているが会社名は知らないトークナイザーは、語彙内にトークンとして「Grammarly」を含まない可能性があり、トークン化の失敗につながります。

Grammarly で賢く仕事をする
仕事を持つすべての人のための AI ライティング パートナー

トークン化の種類

一般に、トークン化とは、テキストの塊を一連の数字に変換することです。トークン化を単語レベルで考えるのは自然ですが、他にも多くのトークン化方法があり、そのうちの 1 つであるサブワード トークン化が業界標準です。

単語のトークン化

単語のトークン化は前に見た例で、テキストは各単語と句読点ごとに分割されます。

NLP での単語のトークン化の例

Word のトークン化の主な利点は、理解しやすく、視覚化しやすいことです。ただし、いくつかの欠点があります。

  • 句読点がある場合は、「書く」場合と同様に単語に句読点が付けられます。
  • 新しい単語や珍しい単語 (「文法」など) はトークン全体を占めます。

その結果、単語のトークン化により、数十万のトークンを含む語彙が作成される可能性があります。語彙が多い場合の問題は、トレーニングと推論の効率が大幅に低下することです。テキストと数値の間の変換に必要な行列が膨大になる必要があります。

さらに、使用頻度の低い単語が多数あるため、NLP モデルには、使用頻度の低い単語に対して正確な応答を返すのに十分な関連トレーニング データがありません。明日新しい単語が発明された場合、その単語を組み込むために単語のトークン化を使用する LLM を再トレーニングする必要があります。

サブワードのトークン化

サブワードのトークン化では、テキストが単語以下のチャンクに分割されます。各トークンには固定サイズはありません。各トークン (およびその長さ) はトレーニング プロセスによって決定されます。サブワードのトークン化は、LLM の業界標準です。以下は、GPT-4o トークナイザーによってトークン化が行われた例です。

NLP でのサブワードのトークン化の例

ここでは、珍しい単語「Grammarly」が「Gr」、「amm」、「arly」の 3 つのトークンに分解されます。一方、他の単語はテキスト内で十分に一般的であるため、独自のトークンを形成します。

サブワードのトークン化により、より小さな語彙が可能になり、より効率的かつ安価なトレーニングと推論が可能になります。サブワード トークナイザーは、珍しい単語や新しい単語を、より小さな既存のトークンの組み合わせに分解することもできます。これらの理由から、多くの NLP モデルはサブワード トークン化を使用します。

文字のトークン化

文字のトークン化により、テキストが個々の文字に分割されます。この例は次のようになります。

NLP での文字トークン化の例

それぞれの固有の文字が独自のトークンになります。アルファベットは 52 文字 (大文字と小文字は異なるものとみなされます) といくつかの句読点しかないため、実際に必要な語彙は最小限で済みます。あらゆる英単語はこれらの文字から形成される必要があるため、文字トークン化は新しい単語や珍しい単語に対しても機能します。

ただし、標準の LLM ベンチマークによると、文字のトークン化は実際にはサブワードのトークン化ほどパフォーマンスが良くありません。サブワード トークン「car」には、文字トークン「c」よりも多くの情報が含まれているため、トランスフォーマーのアテンション メカニズムにはより多くの情報が含まれています。

文のトークン化

文のトークン化により、テキスト内の各文が独自のトークンに変換されます。この例は次のようになります。

NLP における文のトークン化の例

利点は、各トークンに大量の情報が含まれていることです。ただし、いくつかの欠点があります。単語を組み合わせて文章を書く方法は無限にあります。したがって、語彙も無限にある必要があります。

さらに、同じ意味であっても、わずかな違い(「and」の代わりに「as Well」など)さえ異なるトークンを意味するため、各文自体はかなりまれになります。トレーニングと推論は悪夢でしょう。文のトークン化は、文の感情分析などの特殊なユースケースで使用されますが、それ以外の場合はあまり見られません。

トークン化のトレードオフ: 効率とパフォーマンス

モデルのトークン化の適切な粒度を選択することは、実際には効率とパフォーマンスの間の複雑な関係です。非常に大きなトークン (文レベルなど) を使用すると、語彙が膨大になります。これらすべてのトークンを保持する行列が巨大になるため、モデルのトレーニング効率が低下します。関係を有意義に学習するためのすべての一意のトークンに対する十分なトレーニング データがないため、パフォーマンスが大幅に低下します。

一方で、トークンが小さいと語彙も少なくなります。トレーニングは効率的になりますが、各トークンにはモデルがトークン間の関係を学習するのに十分な情報が含まれていないため、パフォーマンスが急激に低下する可能性があります。

サブワードのトークン化はそのちょうど真ん中にあります。各トークンにはモデルが関係を学習するのに十分な情報が含まれていますが、語彙はトレーニングが非効率になるほど多くはありません。

トークン化の仕組み

トークン化は、トークナイザーのトレーニングと使用を中心に展開します。トークナイザーはテキストをトークンに変換し、トークンをテキストに戻します。サブワード トークナイザーは最も一般的なタイプであるため、ここではサブワード トークナイザーについて説明します。

サブワード トークナイザーは、テキストを効果的に分割するようにトレーニングする必要があります。

NLP でのサブワードのトークン化の例

「Grammarly」が「Gr」、「amm」、「arly」に分割されるのはなぜですか? 「Gram」「mar」「ly」も使えないでしょうか?人間の目にはそれが可能であることは間違いありませんが、おそらく最も効率的な表現を学習したトークナイザーは異なる考え方をします。この表現を学習するために使用される一般的なトレーニング アルゴリズム (GPT-4o では使用されていません) は、バイト ペア エンコーディング (BPE) です。 BPEについては次のセクションで説明します。

トークナイザーのトレーニング

優れたトークナイザーをトレーニングするには、トレーニングに使用する膨大なテキストのコーパスが必要です。このコーパスに対して BPE を実行すると、次のように動作します。

  1. コーパス内のすべてのテキストを個々の文字に分割します。これらをボキャブラリの開始トークンとして設定します。
  2. テキスト内の最も頻繁に隣接する 2 つのトークンを 1 つの新しいトークンにマージし、それを語彙に追加します (古いトークンは削除せずに、これが重要です)。
  3. 頻繁に発生する隣接トークンのペアがなくなるまで、または最大語彙サイズに達するまで、このプロセスを繰り返します。

例として、トレーニング コーパス全体がテキスト「abc abcd」で構成されていると仮定します。

  1. テキストは [“a”, “b”, “c”, “ ”, “a”, “b”, “c”, “d”] に分割されます。そのリストの 4 番目のエントリはスペース文字であることに注意してください。この場合、私たちの語彙は [「a」、「b」、「c」、「 」、「d」] になります。
  2. 「a」と「b」は、テキスト内で最も頻繁に隣り合って出現します (「b」と「c」と同点ですが、アルファベット順では「a」と「b」が優先されます)。そこで、これらを 1 つのトークン「ab」に結合します。語彙は ["a"、"b"、"c"、" "、"d"、"ab"] のようになり、更新されたテキスト ("ab" トークン マージが適用されたもの) は ["ab" のようになります。 、「c」、「 」、「ab」、「c」、「d」]。
  3. さて、「ab」と「c」はテキスト内で最も頻繁に同時に出現します。それらをトークン「abc」にマージします。語彙は [“a”, “b”, “c”, “ ”, “d”, “ab”, “abc”] のようになり、更新されたテキストは [“abc”, “ ”, “abc” のようになります) ”、”d”]。
  4. 隣接するトークンのペアはそれぞれ 1 回だけ発生するため、ここでプロセスを終了します。さらにトークンをマージすると、結果として得られるモデルの他のテキストに対するパフォーマンスが低下します。実際には、語彙サイズの制限が制限要因となります。

新しい語彙セットを使用すると、テキストとトークンをマッピングできます。 「cab」など、これまでに見たことのないテキストでも、単一文字のトークンを破棄していないため、トークン化できます。語彙内のトークンの位置を確認するだけで、トークン番号を返すこともできます。

優れたトークナイザーのトレーニングには、ほとんどの企業が負担できる以上の、非常に大量のデータと大量のコンピューティングが必要です。企業は、独自のトークナイザーのトレーニングをスキップすることでこれを回避します。代わりに、事前トレーニングされたトークナイザー (上記リンクの GPT-4o トークナイザーなど) を使用するだけで、モデルのパフォーマンスの損失を最小限に抑えて時間とコストを節約します。

トークナイザーの使用

そこで、このサブワード トークナイザーを BPE を使用して大規模なコーパスでトレーニングしました。さて、新しいテキストでそれをどのように使用すればよいでしょうか?

トークナイザーのトレーニング プロセスで決定したマージ ルールを適用します。まず入力テキストを文字に分割します。次に、トレーニングと同じ順序でトークンのマージを実行します。

説明のために、少し異なる入力テキスト「dc abc」を使用します。

  1. これを文字 [「d」、「c」、「 」、「a」、「b」、「c」] に分割します。
  2. トレーニングで行った最初のマージは「ab」だったので、ここではそれを実行します: ["d", "c", " ", "ab", "c"]。
  3. 2 番目に行ったマージは「abc」だったので、[「d」、「c」、「 」、「abc」] とします。
  4. これらが私たちが持つ唯一のマージ ルールなので、トークン化が完了し、トークン ID を返すことができます。

多数のトークン ID があり、これをテキストに変換したい場合は、リスト内の各トークン ID を検索して、それに関連付けられたテキストを返すだけです。 LLM は、処理するエンベディング (周囲のトークンを見てトークンの意味を捉える数値のベクトル) を人間が読めるテキストに戻すためにこれを行います。

トークン化アプリケーション

トークン化は常に、すべての NLP の最初のステップです。テキストを ML モデル (およびコンピューター) が操作できる形式に変換するには、トークン化が必要です。

LLM でのトークン化

トークン化は通常、すべての LLM 呼び出しの最初と最後の部分です。まずテキストがトークンに変換され、次にトークンが埋め込みに変換されて各トークンの意味が取り込まれ、モデルの主要部分 (トランスフォーマー ブロック) に渡されます。トランスフォーマー ブロックの実行後、埋め込みはトークンに変換されて戻されます。最後に、返されたばかりのトークンが入力に追加されてモデルに戻され、このプロセスが再度繰り返されます。 LLM はサブワードのトークン化を使用して、パフォーマンスと効率のバランスをとります。

検索エンジンにおけるトークン化

検索エンジンはユーザーのクエリをトークン化して標準化し、ユーザーの意図をより深く理解します。検索エンジンのトークン化には、テキストの単語への分割、フィラー単語 (「the」や「and」など) の削除、大文字から小文字への変換、ハイフンなどの文字の処理が含まれる場合があります。パフォーマンスと効率は語彙サイズにあまり依存しないため、通常、ここではサブワードのトークン化は必要ありません。

機械翻訳におけるトークン化

機械翻訳のトークン化は、入力言語と出力言語が異なるため興味深いものです。その結果、言語ごとに 1 つずつ、合計 2 つのトークナイザーが存在することになります。サブワードのトークン化は、モデルの効率とモデルのパフォーマンスの間のトレードオフのバランスをとるため、通常は最も効果的です。しかし、中国語などの一部の言語には、単語よりも小さな言語構成要素がありません。そこでは単語のトークン化が必要になります。

トークン化のメリット

トークン化は、あらゆる NLP モデルにとって必須です。適切なトークン化により、ML モデルがテキストを効率的に処理し、新しい単語を適切に処理できるようになります。

トークン化によりモデルがテキストを操作できるようになります

内部的には、ML モデルは数値のみを処理します。 ML モデルの背後にあるアルゴリズムは計算に完全に依存しており、計算自体に数値の計算が必要です。したがって、ML モデルがテキストを操作できるようにするには、テキストを数値に変換する必要があります。トークン化後、その番号に対してアテンションや埋め込みなどの手法を実行できます。

トークン化により、新しく珍しいテキストが一般化されます

より正確に言えば、適切なトークン化は、新しくて珍しいテキストを一般化します。サブワードと文字のトークン化を使用すると、新しいテキストを既存のトークンのシーケンスに分解できます。したがって、意味不明な単語を含む記事を ChatGPT に貼り付けても、ChatGPT が壊れることはありません (ただし、あまり一貫した応答が得られない可能性もあります)。適切な一般化により、モデルはサブトークン内の関係に基づいて、まれな単語間の関係を学習することもできます。

トークン化の課題

トークン化はトレーニング コーパスとアルゴリズムに依存するため、結果は異なる場合があります。これは、LLM の推論能力と入力および出力の長さに影響を与える可能性があります。

トークン化は LLM の推論能力に影響を与えます

LLM をしばしば悩ませる簡単な問題は、単語「strawberry」に含まれる文字「r」の出現数を数えるというものです。モデルは、実際には答えは 3 つであるにもかかわらず、2 つあると誤って判断します。このエラーの一部はトークン化が原因である可能性があります。サブワード トークナイザーは、「strawberry」を「st」、「raw」、「berry」に分割しました。したがって、モデルは、中央のトークンの 1 つの「r」を最後のトークンの 2 つの「r」に接続できなかった可能性があります。選択したトークン化アルゴリズムは、単語がどのようにトークン化されるか、および各トークンが他のトークンとどのように関連するかに直接影響します。

トークン化は LLM の入力および出力の長さに影響します

LLM は主にトランスフォーマー アーキテクチャに基づいて構築されており、各トークンをコンテキスト化するアテンション メカニズムに依存しています。ただし、トークンの数が増加すると、注意に必要な時間は二次関数的に増加します。したがって、4 つのトークンを含むテキストには 16 単位の時間がかかりますが、8 つのトークンを含むテキストには 64 単位の時間がかかります。これにより、LLM は数十万トークンの入出力制限に制限されます。トークンが小さいと、モデルに入力できるテキストの量が実際に制限され、モデルを使用できるタスクの数が減少する可能性があります。