言語モデルのしくみ
過去数十年にわたり、自然言語処理 (NLP) の分野で複数の進展があり、その結果、大規模言語モデル (LLM) が実現されました。 言語モデルの開発と可用性により、生成 AI アシスタントやエージェントを通じて、アプリケーションやシステムとやり取りする新しい方法が生み出されました。
次のような言語モデルの歴史的な開発を振り返りましょう。
- トークン化: マシンの 読み取りを有効にします。
- Word 埋め込み: コンピューターで単語間の関係をキャプチャできるようにします。
- アーキテクチャの開発: (言語モデルの設計の変更)、単語コンテキストをキャプチャできるようにします。
トークン化
ご期待のとおり、コンピューターは主に数字に依存するため、テキストの解読に苦労します。 テキストを読み取るには、提示されたテキストを数値に変換する必要があります。
マシンがテキストをより簡単に操作できるようにするための重要な開発の 1 つは、トークン化です。 トークン は既知の意味を持つ文字列であり、通常は単語を表します。 トークン化 では、単語がトークンに変換され、数字に変換されます。 トークン化に対する統計的アプローチは、パイプラインを使用することです。
- トークン化したいテキストから始めます。
- ルールに基づいてテキスト内の単語を分割します。 たとえば、空白がある単語を分割します。
-
ストップ ワードの削除。
the
やa
のような意味がほとんどないノイズの多い単語を削除します。 これらの単語の辞書は、テキストから構造的に削除するために提供されます。 - 各ユニークなトークンに番号を割り当てます。
テキストにラベルを付けるトークン化。 その結果、統計手法を使用して、コンピューターがルールベースのモデルを適用するのではなく、データ内のパターンを見つけることができます。
Word の埋め込み
ディープ ラーニング手法を NLP に適用することによって導入される主要な概念の 1 つは 、単語埋め込みです。 単語埋め込みでは、単語間の セマンティックリレーションシップ を定義できないという問題に対処します。
Word 埋め込みは、ディープ ラーニング モデルのトレーニング プロセス中に作成されます。 トレーニング中に、モデルは文内の単語の一連のパターンを分析し、 それらをベクトルとして表す学習を行います。 ベクトルは、n 次元空間内の点 (つまり、線) を通るパスを表します。 セマンティック リレーションシップは、線の角度 (つまり、パスの方向) の類似によって定義されます。 単語埋め込みはベクトル空間内の単語を表すので、単語間の関係を簡単に記述して計算できます。
トークン間のセマンティック リレーションシップをカプセル化するボキャブラリを作成するために、埋め込みと呼ばれるコンテキスト ベクトルを定義します。 ベクトルは、情報の複数値の数値表現です。たとえば、[10, 3, 1] では、各数値要素が情報の特定の属性を表します。 言語トークンの場合、トークンのベクターの各要素はトークンのセマンティック属性を表します。 言語モデル内のベクトルの要素の特定のカテゴリは、一緒に使用される一般的な単語または同様のコンテキストに基づいてトレーニング中に決定されます。
ベクトルは多次元空間の線を表し、複数の軸に沿った方向と距離を記述します (これらの振幅と大きさを呼び出すことで、数学者の友人に感銘を与えることができます)。 全体として、ベクトルは、原点から終点までのパスの方向と距離を記述します。
埋め込み空間内のトークンの要素はそれぞれトークンのセマンティック属性を表しているため、意味的に似たトークンは、同じ方向を指すベクトルになります。つまり、同じ方向を指します。 コサイン類似性と呼ばれる手法は、2 つのベクトルの方向が (距離に関係なく) 似ているかどうかを判断するために使用され、意味的にリンクされた単語を表します。 たとえば、"dog" と "子犬" の埋め込みベクターは、ほぼ同じ方向に沿ったパスを記述します。これは、"cat" の方向とかなり似ています。 しかし、"skateboard" の埋め込みベクターは、まったく異なる方向での旅を表します。
アーキテクチャの開発
機械学習モデルのアーキテクチャ (設計) は、さまざまなコンポーネントとプロセスの構造と編成を記述します。 データの処理方法、モデルのトレーニングと評価方法、予測の生成方法を定義します。 言語モデル アーキテクチャの最初のブレークスルーの 1 つは 、リカレント ニューラル ネットワーク (RNN) です。
テキストを理解することは、個別に表示される個々の単語を理解するだけではありません。 単語は、表示される コンテキスト によって意味が異なる場合があります。 つまり、単語の周囲の文は、単語の意味に重要です。
RNN は、複数の順次ステップを通じて単語のコンテキストを考慮に入れることができます。 各ステップは、入力と非表示状態を受け取ります。 各ステップの入力が新しい単語であるとします。 各ステップは出力も生成します。 非表示の状態は、ネットワークのメモリとして機能し、前の手順の出力を格納し、次のステップに入力として渡すことができます。
次のような文を想像してみてください。
Vincent Van Gogh was a painter most known for creating stunning and emotionally expressive artworks, including ...
次に来る単語を知るために、あなたは画家の名前を覚えている必要があります。 文を完了するためには、最後の単語がまだ欠けている必要があります。 NLPタスクでは、欠けている単語やマスクされた単語は、しばしば[MASK]
で表されます。 文で特殊な [MASK]
トークンを使用すると、不足しているトークンまたは値が何であるかを予測する必要がある言語モデルに通知できます。
この例の文を簡略化すると、RNN に入力 Vincent was a painter known for [MASK]
を指定できます。
図は、文の中で最も重要な単語を個別のトークンとして提示するためにトークン化された文を示しています。
RNN は、各トークンを入力として受け取り、それを処理し、そのトークンのメモリを使用して非表示の状態を更新します。 次のトークンが新しい入力として処理されると、前の手順の非表示状態が更新されます。
最後に、最後のトークンがモデルへの入力 (つまり、#D0 トークン) として提示されます。 情報が不足しており、モデルがその値を予測する必要があることを示します。 次に、RNN は隠れ状態を使用して、出力が Starry Night
のようになると予測します。
RNN に関する課題
この例では、非表示の状態には、 Vincent
、 is
、 painter
、および know
の情報が含まれています。 RNN では、これらの各トークンは非表示状態でも同様に重要であるため、出力を予測するときにも同様に考慮されます。
RNN を使用すると、完全な文に関連して単語の意味を解読するときにコンテキストを含められます。 ただし、RNNの隠れ状態が各トークンごとに更新されると、実際の関連情報、つまりシグナルが失われる可能性があります。
提供された例では、ヴィンセント・ヴァン・ゴッホの名前は文の先頭にあり、マスクは末尾にあります。 最後の手順では、マスクが入力として表示されるときに、マスクの出力を予測するために関係のない大量の情報が非表示の状態に含まれる場合があります。 非表示の状態にはサイズが限られているため、関連情報を削除して、新しい情報や最近の情報を格納する必要が生じる場合もあります。
この文を読むと、最後の単語を予測するために必要なのは特定の単語だけであることがわかります。 ただし、RNN には、非表示状態のすべての (関連性があり、無関係な) 情報が含まれます。 その結果、関連情報は潜在状態で弱いシグナルになる可能性があります。つまり、モデルに影響を与える無関係な情報が他に多すぎるため、見逃される可能性があります。
ここまでは、言語モデルが トークン化 によってテキストを読み取る方法と、 単語埋め込みを通じて単語間の関係を理解する方法について説明しました。 また、過去の言語モデルが単語のコンテキストをキャプチャしようとした方法についても説明しました。 次に、トランスフォーマー アーキテクチャを使用した現在の言語モデルで、以前のモデルの制限がどのように処理されるかについて説明します。