自然言語処理入門(セッション#10)

AI入門
この記事は約34分で読めます。

本講義は自然言語処理(NLP)の基礎から最新技術までを体系的に解説したものである。コンピュータが人間の言語を理解するために必要な一連のプロセスを、数学的な詳細に立ち入りすぎることなく直感的に説明している。トークン化や正規化といった前処理から始まり、Word2Vecによる単語のベクトル表現、多層パーセプトロン(MLP)、リカレントニューラルネットワーク(RNN)、長短期記憶(LSTM)、そしてアテンション機構へと段階的に発展していく様子を追う。特に、単語に意味を持たせるためのベクトル空間での表現方法や、文脈を理解するための記憶機構の進化が詳しく説明されている。最終的には、これらの技術がどのように組み合わさって現代の大規模言語モデルの基礎を形成しているかが明らかにされる。技術的な厳密さと理解しやすさのバランスを保ちながら、ChatGPTのような最先端AI技術の核心部分を解き明かす内容となっている。

(Session #10): Getting started with Natural Language Processing
This is Session #10 of our workshop series - Getting started with Natural Language Processing.In this session, you will ...

自然言語処理の概要と本講義の目的

皆さん、今夜お集まりいただきありがとうございます。今夜は自然言語処理についての講義を行います。私の名前はジョシュア・トムです。コンピュータシステムエンジニアリングの2年生です。今日取り上げる内容は、見方によっては非常に興味深いものにもなりますし、退屈なものにもなり得ます。

私はこれをできるだけ興味深い形で提示しようと思っています。ですので、大量の数学や複雑なことは出てきません。もし何か見慣れないものがあれば、遠慮なく止めて教えてください。

自然言語処理とは、基本的にコンピュータに単語や言語、つまり私たちが話したり単語を使って相互作用したりするあらゆるものを理解させることです。明らかに、コンピュータは英語を話しません。数字と信号以外の言語は話さないのです。ですから、コンピュータに「りんご」という単語を適切に与え、単なるオンとオフの信号以上の何かをそこから引き出すためには、はるかに多くの情報を提供する必要があります。

そのために、いくつかの異なる方法で翻訳していきます。最終的にコンピュータが何が起こっているのかを理解できるようにするためです。

自然言語処理の応用分野

自然言語処理は、インターネット上、コンピュータ上、テキストと相互作用するあらゆる場所でほぼどこでも使われています。テキスト分類、チャットボット、例えばChatGPTのようなもの、文書からの情報抽出、ある言語から別の言語への翻訳、要約、つまり大量のテキストから情報を抽出すること、質問応答、感情分析などです。

感情分析というのは、テキストを見てそれが肯定的か否定的か、人種差別的かそうでないか、といったことを判定するものです。これが自然言語処理であり、チャットボットで使われていると言いましたが、それは文字通りAIに関するあらゆるものを意味します。ChatGPT、すべての大規模言語モデル、AI関連のあらゆる話題のものすべてに、自然言語処理がある程度含まれています。

コンピュータに単語を理解させることは一つのことですが、コンピュータの知識を応用することはまったく別のことであり、同時に最も興味深い部分でもあります。

講義で扱う3つの主要テーマ

この講義では主に3つのことを取り上げます。まず最初は翻訳です。つまり、コンピュータが理解できるように単語を表現することです。

2つ目は、これらの単語をニューラルネットワークで使用することで、何かを得られるようにすることです。単に「りんご」という単語をコンピュータが理解できる形に変換するだけでなく、それで何ができるのかということです。

そして最後は、複雑に聞こえるかもしれませんが、自然言語処理が大規模言語モデルにどのように結びついているかの概要を示します。入力を受け取って、思考したり推論したりするといった一連の情報処理の全体像を、やりすぎない程度にすべてのステップを説明していきます。

この講義が終わる頃には、私たちがどのようにコンピュータに単語や言語を伝えることができるのかを理解できるようになっているはずです。

初期の言語処理システム

ニューロンを必要とせず、大量のトレーニングを必要としない、コンピュータと対話する方法もあります。これらは非常に古いものです。

1966年のElizaというものがあります。これはチャットボットで、すべての応答がハードコーディングされています。大量のif-else文で構成されており、セラピストのような役割をするものです。ただ、私たちがやろうとしているのはこれではありません。

もう一つ、Georgetown IBMと呼ばれる翻訳システムがあります。ロシア語から英語に翻訳するものです。これは単にルールとif-else文を使っているだけです。私たちが目指しているのはそういうものではありません。明らかに、このようなものは20分で作れますし、コンピュータと対話はしていますが、これは単なるルールに過ぎません。私たちはこれを超えようとしているのです。

準備段階:トークン化と正規化

コンピュータ向けに単語を翻訳する作業について、これは主流ではないかもしれませんが、私は2つの異なる部分に分けて考えています。準備段階と定義段階があります。

準備段階は2つのことから成り立っています。トークン化と正規化です。トークン化とは文字通り、物事をどのように構造化するかということです。文をどのように構造化するか。そして正規化は、物事を整理することです。これらの項目については次のスライドですべて説明します。

2番目の段階は定義段階で、ここで実際にこれらの表現、これらのトークンや小さなデータの塊に意味を込めていきます。これらの数字に実際にどのように意味を提供するのか。その方法は大きく2つあります。一つはテキスト全体を見て、数字がどのように現れるか、単語がどのように現れるかを見る方法。もう一つは、出現頻度や他の方法に基づいて単語に実際に値を割り当てる方法です。基本的にベクトルを使う方法がいくつかあり、これからすべて説明していきます。

トークン化の詳細

トークン化とは何でしょうか。退屈かもしれませんが、文字通り文を塊、つまりトークンに分解することです。それは何でも構いません。

例えば「1時間で3リットルのスプライトを飲むと致命的になる可能性がある」という文があるとします。これを単語トークンに分解できます。つまり、私たちが文について考えるような方法です。各単語がそれぞれ独立した部分になります。それだけです。

サブワードトークン化もできます。これはより現代的なモデルが使用するものです。これは物事を音節や構成要素に分解するもので、将来的にこれらを組み合わせて未知の単語に対処できるようにします。これがサブワードトークン化です。

変わった方法として、すべての個別の文字をトークンにすることもできますし、文全体を1つのトークンにすることもできます。これらはすべて、モデルがデータの塊として何を見て、そのデータの塊に意味を込めるかということです。それが今のトークン化のすべてです。

ストップワードの削除もあります。これは正規化、つまり物事を整理することの一つです。単語トークン化から余分なものを取り除くのです。「3リットルのスプライトは致命的になる可能性がある」という文で、ofを削除し、andを削除し、canを削除します。つまり、物事をより簡潔にするのです。

他にも方法はありますが、基本的にはこのように物事を整理していきます。大量のデータを扱えないモデルや、単により小さく保ちたいモデルのために整理するのです。実際、モデルはかなり大きくなりますから。

n-gramとマルコフ連鎖

興味深いことに、トークン化の後、そこから単語を生成することができます。これらはn-gramとマルコフ連鎖と呼ばれ、統計的、つまり連続的で確率的なモデルです。

基本的に、これが意味するのは、この特定の単語の周りに何があるか、あるいはテキスト内に単語が何回出現するか、その隣に何があるかに基づいて、それだけが保存されるということです。それがすべての単語がそこから生成される方法です。

マルコフ連鎖について理論的に言えば、未来は現在によってのみ決定されます。嵐が来ている場合、昨日の天気を見るのではなく、今の天気を見て、そこから予測します。それがマルコフ連鎖がやっていることです。

この場合、「猫は歩く」「猫は跳ねる」「猫は鳴く」という3つの文があるとします。「猫」という単語があって、次の単語は何になるかと考える場合、データ内で猫の直後に来るものを見ると、歩く、跳ねる、鳴くがあります。マルコフ連鎖では、これらのいずれかの単語、歩く、跳ねる、または鳴くを生成する確率が3分の1ずつになります。それがマルコフ連鎖のすべてです。

n-gramはより多くの文脈を与えます。基本的には、単に「猫」を見るのではなく、より遡ることができます。「その猫」や「太った猫」などを見ることができます。そして、そこから「その猫」がテキストに現れるか、通常その後に何が来るかを参照できます。「太った猫」がテキストに現れるか、通常その後に何が来るかを参照できます。

より多くの文脈に基づいていますが、これにはいくつかの問題が生じる可能性があります。単なる統計と数字に基づいているため、私たちが実際にモデルに期待するような性能にはなりません。私たちが望むほど良くはないのです。

文脈について言えば、マルコフ連鎖には基本的に文脈がありません。「その男は食べた」という文がある場合、マルコフ連鎖は「その」だけを見ています。生成しているすべてのものは「その」という単語だけに基づいています。「食べた」は考慮されません。「男」も考慮されません。つまり、そこには文脈がないのです。

n-gramの場合、テキストを遡って見て、「食べたその」が何回出現するか、「男は食べたその」が何回出現するかを調べることができますが、それがテキストに十分出現しない場合、十分な文脈が得られません。

より多様な出力や入力、異なる単語が増えるにつれて、これら2つのモデルは崩壊する可能性があります。なぜなら、私たちが望むものを現実的に生成するための十分な情報がないからです。

これは、実際にニューロンに入る前の中間ステップのようなものです。これは単純な数字に基づいています。計算はなく、以前に見たものに基づいて次の単語の確率は何かというだけです。

ベクトル表現:Bag of WordsとTF-IDF

前後に何が来るかを見るのではなく、ベクトルを使ってみましょう。私が言いたいのは、テキスト、アイデア、または単語を表現するための長い数字のリストということです。実際にベクトルを使ってテキスト全体を表現できます。

これは理解するのがかなり簡単です。自然言語処理の考え方におけるベクトルの最も簡単な表現と使用方法の一つです。Bag of Wordsと呼ばれるものがあり、文を取ります。単語の出現回数を使ってテキスト全体を表現したらどうなるでしょうか。そうすると、この場合1、1、1、2というベクトルが得られます。なぜなら「その」という単語がこの中に2回出現するからです。

Bag of Wordsは、単語が何か、何回出現するかに基づいてテキストを表現します。明らかに、単語が何回出現するかでテキスト全体を表現することには欠点があります。

次に、TF-IDFというものがあります。Term Frequency Inverse Document Frequencyの略です。これらが何を意味するかは気にしなくて構いません。基本的には、単語が珍しいほど、それに割り当てられる重要度が高くなるということです。

「その」やanという単語は本の中に大量に出現しますが、「殺人者」という単語は一度しか出現しないかもしれません。おそらく「殺人者」という単語は、「その」やandやaといった単語よりもはるかに高く重み付けされるでしょう。これがテキストを表現する簡単なベクトルの方法です。

これは本当にテキストが何であるかの要約を提供するものではありません。実際には多くを提供するものではありません。単なる指紋、テキストが何であるかの簡単な要約であり、テキストのアイデアをある程度つかめる方法です。

ここを見ると、このテキストには医者、患者、病院、看護師、メスなど、医療関係のものがたくさんあります。また、取り組む、伝染性の、治療不可能な、パニックといった単語もあります。

Bag of Wordsを使った場合、Bag of Wordsはそのリストを見て「患者がたくさん出てくる。医者がたくさん出てくる」と言います。つまり、医者やメスなどの医療関係の単語が何回出現するかに基づいて、これはおそらく医療テキストだということになります。

TF-IDFを使った場合、より独特な単語を見るかもしれません。パニック、取り組む、といった単語です。おそらく単なる医療文書以上の情報がこのテキストにはあるかもしれません。これがBag of WordsとTF-IDFの違いです。

これらはテキストの非常に基本的な表現であり、そこから得られる情報には限りがあります。しかし、これは奇妙な掛け算や行列のようなことをすることなくできるものです。この浅い表現から、実際に単語に本当の意味を込めることへと進んでいきます。

単語のベクトル表現の概念

ベクトルとしての単語というのは、必ずしも直感的に理解しやすい考え方ではありません。ですので、物理的というか比喩的な例を提供します。これはおもちゃの例です。実際にベクトルが単語に意味をエンコードする方法ではありません。

しかし、3つの特性があると仮定しましょう。赤という特性があります。赤いか赤くないか。果物です。果物かそうでないか。球形かそうでないか。これらはオンかオフのどちらかになります。オンの場合は赤い。オフの場合は赤くない。

赤くて、果物で、球形であるものがある場合、すべてに1が入ります。それはりんごです。それはりんごだと仮定できます。つまり、この場合のりんごのベクトル表現は1、1、1となります。

しかし、赤をオフにすると、オレンジが得られます。つまり0、1、1です。そして、果物と球形をオフにして、赤をオンにしておくと、消火栓のようなものが得られます。

基本的に、これらは数字を使った単語やアイデアの表現です。数字の列を使って「コンピュータ」という単語をどのように表現するのか、あまり意味がわからないかもしれませんが、これはそれについて考える一つの方法です。特性がオンかオフか、どれだけオンか、どれだけオフか。つまり、特性とは何か、特性の強さはどれくらいか、それが数字が表現するものだと考えることができます。

もちろん、それほど単純ではありません。単語は3つの特性だけでできているわけではありません。ありがたいことに、大規模言語モデルは実際にベクトルを使用しています。3つの値を使うのではなく、3,000や、モデルによっては13,000もの値を使用できます。

しかし、待ってください。単語を説明するベクトルに13,000の数字があるのに、形容詞や説明など、はるかに多くの単語が存在する場合、モデルはどのようにしてすべてのアイデアをそこに結びつけることができるのでしょうか。

深層学習のこの特定のトピックについては、ある程度の抽象化のレベルを理解する必要があります。すべてが具体的にオンとオフというわけではありません。1つの値が赤いか赤くないかを必ずしも表すわけではありません。

これらの計算方法は、掛け算に掛け算を重ねたものです。何百万回も何百万回も値が変化しています。値が互いに変化し合っています。最終的に、モデルは各値が何を意味するかを理解します。私たちは理解できないかもしれません。

1つのベクトルの値を切り替えて、0.2から0.8に上げると、モデルがその単語について考えることが建物からレンガのようなものに変わるかもしれません。その特定の1つのベクトルが何を意味するのか私には分かりません。しかし、モデルが理解していて、適切に単語を生成できる限り、それが私たちが気にするすべてです。

この講義では、私が物事を抽象化して具体的なものを示すときに注意してください。ああ、そうだ、これがベクトルの仕組みだと思うかもしれません。しかし、実際にコードを見た場合、それは見えないものです。

Word2Vec:文脈に基づく単語の意味

2013年からのWord2Vecという技術、この発見について説明します。これが機能する方法は、隣にあるものに基づいて単語に意味を与えるというものです。

この場合、いくつかの異なる文があります。「猫は野原を走り抜ける」「虎は走りながら尻尾を振る」「ライオンは走る」など。すべての単語について、猫と走るが一緒に現れることがわかります。虎と走るが一緒に現れます。ライオンと走る。これらすべてが共有されています。

つまり、文脈に基づいて、猫、虎、ライオンは似たようなものかもしれませんが、ライオンは尻尾のベクトルを持っていないので、より異なっているかもしれません。互いに隣り合うことで関係を作ることができます。それがWord2Vecがやっていることです。

技術的な話になります。少し複雑に見えるかもしれませんが、それほど悪くありません。「猫」という単語の文脈的埋め込みを作成したいとしましょう。

文から始めます。「猫は尻尾を振る」という文です。尻尾と振るという考えを「猫」という単語に刻み込みます。ランダムなベクトルから始めることができます。これもおもちゃの例です。明らかにこれら5つの異なる単語を表す3つの値ではありませんが、そのようなものだと考えることができます。

ここでの目標は何でしょうか。「猫」という単語を提供します。この猫ベクトルを取って、この文で可能な他のすべての単語に対してチェックします。猫ベクトルを取って、a、振る、その、尻尾に対してチェックします。それらに対してチェックして、その後に来る可能性が最も高い単語は何かを確認します。それが私たちが行っているプロセスです。

猫を入力して尻尾を出力します。これら2つのベクトルをより密接に関連させたいのです。誰か質問はありますか。質問のために立ち止まる前にかなり進んでしまいました。

質問者:それは文中で単語が何を意味するかに依存するのでしょうか。例えば、細胞内のミトコンドリアは、刑務所は房の中にある。房という単語には2つの異なる意味があります。これはそれに対応できないのでしょうか。

はい。実際にそれが失敗する理由と、どのようにそれを改善できるかについて説明します。しかし、これは物事が始まる場所です。これは最大とは言いませんが、単語を数字に入れるこのような考え方の大きな方法です。これは、これらの言語モデルが爆発的に普及した理由の基盤のようなものです。

単語の入力ベクトルと出力ベクトル

少し混乱するかもしれません。すべての単語が2つの異なる部分を持っていると考えることができます。

最初の部分は「私はあなたとどう関係していますか」と言います。ベクトル空間では、それが予測するものに囲まれています。つまり、何を生成するか、応答として何を生成するかです。「猫」という単語がある場合、猫と尻尾、猫と足、猫と鳴く、というように、これらすべての単語空間がすべて互いに隣接しています。

単語を表すもう一つのベクトルは、基本的に他の単語が質問するときにその質問に答えます。何がそれを予測するか。基本的に、単語が持つ最初のベクトルは、私が何を指しているかを示し、2番目のベクトルは何が私を指しているかを示します。なぜなら、猫は尻尾を持っていますが、すべての尻尾が猫のものではないからです。

これらの関連には2つの方向があります。だから2つの異なる表現があるのです。それらは異なるということをここで明確にしたいと思います。

何が猫に関連しているか見ることができます。猫は尻尾、ひげ、毛、足を持っています。そして何が猫を指しているか。猫の前に来る単語です。かわいい猫、疲れた猫、ふわふわした猫。つまり、入力と出力があります。それが単語を構成する2つの異なるベクトルです。

これら2つのベクトルが入ってくるものと出ていくものを区別できることは、別の単語が与えられたときに単語に実際に意味を提供できるようにするために重要です。

数学的に言えば、「猫」という単語を取り、入力行列の猫を通して実行し、次に出力行列を通して実行すると、単語分布が得られます。猫という単語をすべての他の出力に対してチェックし、尻尾を生成する確率が26%という応答を得ました。

ここで実際に起こっていることを理解しやすい方法で説明すると、猫ベクトルを取り、尻尾ベクトルで掛けました。その出力は、猫の後に尻尾が続く可能性がどれくらいかということです。これらすべての行列全体で起こっているのはそれだけです。

猫の後に尻尾が来る可能性はどれくらいかということです。興味深いことに、猫に尻尾をもう少し覚えさせたい、つまり関連をより近づけたい場合、やるべきことは単にそれらを一緒に押しやることだけです。猫と尻尾をより似たものにしましょう。次に猫が置かれたとき、尻尾が生成される確率がより高くなります。

猫に0.02を掛けるか、尻尾のすべての値に0.12を加えるか引くか、それらが2つのベクトルを一緒に押しやる限り。これで尻尾が実際に生成される可能性が高くなります。

これが基本的にすべての基礎です。値を一緒に押しやること。想像してみてください。巨大なテキストがあります。猫という単語が尻尾と100回一緒に現れます。鳴く、毛、足も同様です。これらの単語のペアを取るたびに、猫を尻尾に少し近づけます。猫を足に少し近づけます。

時間が経つにつれて、足、尻尾、ひげに10万回押しやられた猫のベクトルを得ることができます。その時点で、それは基本的にそれがこれらすべての特徴にどう関係しているかということです。これは抽象化の飛躍です。

しかし、これについて考えることができます。「犬」という単語があり、犬が尻尾に200回押しやられたとします。猫もそうでした。つまり、尻尾に関して、猫と犬の間には何らかの類似性、何らかの関係があるはずです。

犬と猫が尻尾、足、目、毛についてまったく同じ回数現れた場合、これらの特定のベクトルにどう関係しているかという点で、かなり似たものになります。両方とも左の象限のようなところにあるかもしれませんが、猫は鳴き、犬は吠えます。

そこに違いがあります。つまり、物理的特徴の点では似ているかもしれませんが、吠えることと鳴くことでは少し異なります。これらの互いの関係です。犬は尻尾とどう関係しているか。猫は尻尾とどう関係しているか。それが私たちが意味を構築している方法です。

これらの数字は最初は無意味だったかもしれませんが、すべてのテキストを使い、尻尾を犬に、尻尾を猫に、尻尾をaのような単語に関連付けることで、これらの単語が互いにどれくらい密接に関連しているか、これらの単語の関係が別の単語の関係とどれくらい似ているかを把握し、はるかに多くの意味を作り出すことができます。

Word2Vecの視覚化と単語間の関係

これはWord2Vecのすべての単語の表現です。大量の値があります。基本的に、特定の単語を表すベクトルを作成できること以外に、Word2Vecから得られる最もクールなことは、単語間の方向を取ることができるということです。

理解しやすい例として、少年と少女があります。それらの間の差、つまり異なるベクトルを取ると、女性から男性、または男性から女性のような性別を表すベクトルが得られると仮定できます。

吠えると鳴くの例では、犬と猫の間の違いは、彼らが何を言うか、何を出力するかを表していると言えます。この方向、この女性から男性への方向を取って、実際に他の単語に適用できます。

この女性から男性への方向があります。それを女王という単語に適用すると、この特定のケースで同等のものが得られます。つまり、女王から王へです。これらの違いを取って、一般的に適用することができます。

これらの方向は、物事を互いに関連付ける特徴です。少女は性別のような強さ、性別ベクトルの1.2のようなもので少年に関連しています。その1.2の男性女性ベクトルが少年を表すベクトルの最初の値になる可能性があり、少女ではそれがゼロになる可能性があります。

これが、これらの単語やこれらの関係の各値がどのように機能するかです。単語の中により多くの値があれば、より多くの関係とより多くの意味を得ることができます。

Word2Vecの限界と今後の課題

一貫性と意味の外観を持ち始める単語を作成する方法についてはここまでです。小さな問題があります。

Word2Vecで「bank」という単語を見ると、1つしかなく、川岸の意味をエンコードします。水が流れることやお金の意味もありますが、明確にどちらか一方に傾いているわけではありません。真ん中にあるかもしれませんし、それらの近くにさえないかもしれません。それは、これらのベクトルに割り当てられた文脈がないためです。

その解決策は少し複雑すぎます。今は取り上げません。たくさんの数学と行列の掛け算、キーとクエリがあり、今はそれを扱いません。しかし、Word2Vecには単語ごとに1つの定義しかないという欠陥があることを覚えておいてください。何らかの方法でそこにより多くの意味を込める必要があります。

しかし、それは後の問題です。今、私たちは意味的な意味を持つ単語を持っています。それは大きなことです。次の部分に進みます。

多層パーセプトロンへの展開

単語を定義しました。次は何でしょうか。単語、言語、ChatGPTに進めるでしょうか。いいえ、そこまでは行きません。それもとても複雑だからです。

今持っているのは、かなりしっかりした語彙です。複数の定義の点では弱いですが。大規模言語モデルに到達する道を進むと言いましたが、小さく始める必要があります。そして最も小さいのは、ニューラルネットワーク、多層パーセプトロンです。

基本的に、単語を入力できて、ハードコーディングなしで単語を出力するものを作成します。それが多層パーセプトロンです。超基本的です。超古いです。文字通りすべての基礎です。ニューロンを使っているからです。ニューラルネットワークです。

多層パーセプトロンとは何かから始めて、より言語に焦点を当てた側面に移ります。視覚に進むこともできます。それは畳み込みニューラルネットワークです。それは他のさまざまなアーキテクチャですが、私たちは単語に向かって進みます。

リカレントニューラルネットワークは記憶です。前に覚えているように、「その」という単語しかない場合、その前の文脈を無視します。「その男は食べた」や「その少女は飛び越えた」のような文です。

私たちが見逃している多くの文脈があります。リカレントニューラルネットワークは決して完璧ではありませんが、記憶を追加する最初のステップです。そこから、LSTMに進みます。これは長短期記憶の略です。記憶を選択でき、より詳細な保存が可能になります。そしてアテンションに進み、次にTransformerに進みます。

それらが互いにどのように結びついているかを説明します。1つの場所に収めるには言葉が多すぎたので、入れませんでした。質問はありますか。誰か何か混乱していることはありますか。素晴らしい。

多層パーセプトロンの仕組み

多層パーセプトロンとは何でしょうか。すでにこれについて話しました。超基礎的なものです。しかし、私たちが望むのはニューロンを使えることです。これがその見た目です。

これが多層パーセプトロンです。「鳥」という単語を取り、入力行列を通して実行し、ReLUと呼ばれるものを通して実行し、出力行列を通して実行すると、単語分布が得られます。たくさんありますが、すべてが見た目ほど悪くはありません。

数学はしないと言いましたが、技術的な部分をいくつか示します。皆さんが思っているほど悪くないはずです。「鳥」という単語のベクトル表現から始めます。それがオレンジ色のようなものです。単語のベクトル表現について理解していることを願っています。それをレイヤーを通して実行します。

このレイヤーはニューロンで構成されています。これが1つのニューロンで、たくさんの値で構成されています。これらの値が何か、これらのニューロンが何をしているか、これは3つの値のようなものに似ています。これは正確に起こっていることではありません。これは正確に検索されているものではありません。しかし、レイヤー1について考える良い方法です。各ニューロンは特徴をチェックしています。

特徴ニューロン検出器1があります。その単語は名詞ですか。それが行うことは、要件を持っているということです。値を持っています。そしてそれらの値が鳥が表すものと一致すれば、より強く出力します。鳥がニューロン1が望むすべてと一致すれば、これは名詞であるとかなり強く出力します。70%または7です。

次の特徴を見ると、この単語は動物ですか。これらすべてのニューロンは異なる特徴をチェックしています。動物ですか。飛べますか。形容詞ですか。動詞ですか。それらはテンプレートのようなものを持っています。鳥を取り、テンプレートに対してチェックします。どれくらい似ていますか。そして類似度を出力します。それがここで起こっていることです。

最終的に、鳥をすべてのニューロンに対してチェックした後、鳥が何を意味するかの出力のようなものが得られます。鳥がどう表現されるか。70%名詞、90%動物、100%飛べる、10%毛があるかもしれません。

基本的に、これは、この要約ベクトル、特徴ベクトルをこの五角形で表現します。MLPの最初のレイヤーが行っていることです。鳥という単語から詳細を抽出し、実際に意味のあるものを得ています。

ReLU関数による正規化

2番目のレイヤーを通して実行する前に、このボトルを持って、このボトルについて説明しようとしているとします。これはテーブルではない、コンピュータではない、というような愚かなことを言ったら、まったく役に立ちません。何でないかを言うことは、実際には情報を送りません。個人的には単に迷惑です。

負の値を持つこともできます。これはトカゲのようなものかとチェックして、トカゲではないのでマイナス1を出力します。それが何でないかを知るのは良いですが、何でないかを知る必要はなく、何であるかを知る必要があるだけです。

そこで、ReLUと呼ばれることを行います。これは正規化線形ユニットを意味します。実際には何を意味するのか分かりません。しかし、技術レベルで起こることは、負の値をゼロにすることです。それが物事を整理しているのです。物事を分かりにくくしないようにしているだけです。

他にも方法はありますが、これが今使っているものです。そして、これは通常、低レベルのMLPで最も普通に使われるものです。

出力レイヤーと単語の選択

今、ベクトル表現があります。少し整理して、出力を探します。以前に行ったことと非常に似ていて、その特徴ベクトルを取り、すべての単語がテンプレートを持っていると想像します。

「落とす」は特定のタイプの単語を探しています。「走る」は特定の単語を探しています。この特定のケースでは、特徴をチェックします。「走る」は、足があれば、速く動けば、哺乳類であれば、強く出力すると言うかもしれません。

基本的に、鳥をこれらすべての単語出力の1つ1つ、これらすべての単語テンプレートに対してチェックすると、分布が得られます。実際には分布は得られません。ソフトマックスと呼ばれることをしなければなりませんが、それは含めませんでした。しかし、それは単なるランダムな数式です。

最終的に得られるのは、各単語が生成される確率です。各単語、各ニューロンが、ええ、鳥という単語は私と最もうまく機能すると思う、だから1を出力する、これは私に完璧に合う、と言います。

それがMLPが単語に対して行うことです。単語を取り、特徴の明確化を通して実行します。それが説明のようなものです。ノイズを取り除き、単語を選択し、分布が得られます。

すべてがこれから構築されています。入力を取り、他のものに対してチェックし、それを何度も繰り返して、これらすべてのチェックを通過するまで、これらすべてのチェックから何らかの方法で、望む出力があるということです。それが文字通りこれらすべてのニューラルネットワークアーキテクチャの動作方法です。

単に100以上のレイヤーを追加するだけです。実際にそれらをお見せします。

リカレントニューラルネットワークによる記憶の導入

MLPがあり、適切に予測できます。リカレントニューラルネットワークと呼ばれるものに移ります。その理由は、MLPは単一の入力しか見ることができないからです。

「太った翼のない鳥」をMLPに通して実行すると、その前に何が来ても「飛ぶ」が得られます。それは問題です。うまく機能しません。

RNNが行うことは、記憶を保存する方法を提供することです。記憶を保存します。実際に何を保存しているかを詳しく説明しますが、この特定のケースでは、「V鳥」があります。そしてそれを記憶に保存します。鳥という単語があるので、次に動詞を出力するべきです。

それがRNNが行っていることの思考プロセスのようなものです。より技術的な側面では、すでに持っているMLP、特徴を抽出する最初のチェックを取り、それに記憶を追加するだけです。

記憶はそれほど複雑ではありません。基本的に起こることは、単語チェック行列を記憶分析レイヤーに対して実行することです。そこで起こることは、「その」という単語に基づいて、この記憶分析が、これは冠詞だ、冠詞形容詞だ、冠詞形容詞があることをマークする、次は名詞であるべきだ、と言います。それがすべて本当にエンコードしているものです。

そしてそれを記憶に保存される鳥ベクトルに追加します。そして通常のことを続けます。その結果、「その鳥」が得られます。

何かを記憶に保存することは、食べるという単語があるということです。つまり、次の単語は食べ物に関連するものであるべきです。だから「種」になる可能性があります。それが記憶が許すことです。それがなければ、椅子やテーブル、象や何か、まったく無関係なものになる可能性があります。

この記憶が行っているのは、非常に小さな文脈のビットを提供することです。これは食べ物だ、これは形容詞だ、これは通常動詞が続く名詞だ。それがこの記憶が低レベルで本当に保存しているすべてです。

リカレントニューラルネットワークの限界

これは文法的に非常に弱いため、いくつかの問題を引き起こす可能性があります。複数の名詞と複数の動詞を持つ10語または20語の文がある場合、例えば「鳥は庭を横切って飛び、食べた」のようになります。

しまった、忘れました。鳥であるべきだとは分かりません。どこを飛んでいるのかも分かりません。単に「食べたその」を知っているだけです。だから食べ物を出します。りんごのようなものになる可能性があります。文脈的に関連していれば、虫のようなものになります。

しかし、RNNが「庭を横切って飛んだ」を保存している場合、庭が主題だと言います。さて、鳥を忘れました。だから、それを修正する必要があります。

長短期記憶(LSTM)による改善

その修正方法がLSTM、長短期記憶です。それほど悪くありません。基本的に、RNNの記憶で作業するとき、鳥が飛びました。鳥に焦点を当てています、速く。

おっと、特定の単語「鳥」を忘れ始めています。今は物体が飛んでいることを知っているだけです。そして壁という単語だけを見て、そこから劣化します。それが物事が圧倒される可能性がある方法です。

LSTMでは、すべてが根拠を保ち、それは非常に重要です。主語は鳥です。鳥は特定の距離、庭のような距離を飛んでいます。そして鳥は飛んでいます。

だから別の部屋などを行うことができます。LSTMが可能にするのは、1つの主語に焦点を当て、主語にとどまることです。一方、RNNはそれに焦点を当てません。

ゲートと呼ばれるものを使用し、何を忘れ、何を覚えるかを選択できます。これは少し複雑なので、あまり深く入りませんが、基本的に古いRNNから始めます。

記憶を常に変更してから送り返し、引き出してから送り戻すのではなく、1つの記憶をそこに浮かせておくだけです。ほとんど変更されません。わずかに変更され、わずかに調整されます。忘却ゲート、入力ゲートを使用します。

忘れることは、記憶に基づいて何を削除すべきかということです。記憶に基づいて何を入れるべきかということです。「庭を横切って飛び、着陸した」のような場合、庭を横切って飛んだことを忘れることができます。飛んだという単語を忘れることができます。それが忘却ゲートの目的です。

入力ゲートは、着陸したと言えます。さて、地上にいるという文脈を追加します。まだ庭にいます。庭にいることを忘れていません。それが行うことです。役に立たないものを削除します。これだけを追加します。

出力ゲートは、毎回全体の記憶をモデルの思考プロセスに適用する必要はないと言います。関連するものだけを提供します。

これが鳥だったということです。それがすべて重要であれば、それが送るべきすべてです。それが出力ゲートが行うことです。それを追加しました。だから、これらすべてのコンポーネントが情報を保存する安全な領域を保ち、それがLSTMがより有用である理由です。

その背後にある数学は少し複雑になるので、今は入りません。

アテンション機構への発展

この浮遊記憶がありますが、繰り返しますが、この種の記憶システムができることには限りがあります。単語は特定の定義に固定されています。文脈は大きくなることしかできません。

セル状態が本全体を保存しなければならないと言っているのですか。そうは思いません。物事が互いにどう関係しているかを言えるでしょうか。ある文脈の時点で物事は失敗し始めます。

それが根本的に、MLPからRNN、LSTMへと移行している理由です。より大きくなり、より多くの詳細、より多くの文脈が必要になるにつれて、物事は失敗し始めます。

安い要約を強制するのではなく、これらの特定の単語に何が起こったかを最小の形または最も効率的な形で、これらの特定の単語に何が起こったかの一種です。

その浮遊した要約された凝縮された記憶を取り除いて、すべてを見られるようにしたらどうでしょうか。これがアテンションです。大量のクエリ、キー、値です。現代のLLMで使用されています。

基本的に、通常のLSTMを通して実行します。記憶を出力します。見てのとおり、M1、M2、新しいM3という複数の他の記憶があります。

次のLSTMを生成するとき、「その」という単語を受け取ったばかりだが、以前のすべての記憶から取るべき最も関連性の高い情報は何かと尋ねることができます。M1、M2、M3をチェックし、すべてが凝縮されて何度も何度も吐き出されるのではなく、自分のペースで物事を把握します。

今は自分の詳細量でそれを探して、欲しいものを把握できます。食べ物に関連している、スティーブという名前の人だ、と言えます。さて、文脈的にりんごのような特定の答えを生成できます。

これはアテンションの奇妙な表現ですが、起こっていることは、単語を許可していること、以前に何が起こったかに注意を払うことをモデルに許可していることです。

物事を何度も何度も保存すると、より長い保存された文脈が得られます。明らかにこれは全長にわたる凝縮された記憶を持つほど小さくはありませんが、悪くはありません。これは大量の情報を使用しておらず、イベントのシーケンスの本物の理解を可能にしています。

セルフアテンションによる文脈の拡張

そこから、単語が一度に1つのことしか意味できないという問題があります。記憶を見る代わりに、単語自体を見るだけでよいセルフアテンションと呼ばれる技術を使用できます。以前に何が起こったかを見る必要はなく、今持っているものを見ることができます。

この場合、これはマルチヘッドセルフアテンションと呼ばれるものです。1つのアテンションヘッドがあるとしましょう。これは主語ヘッドです。「太った鳥が赤い虫を食べる」という文があります。

この場合のセルフアテンションの動作方法は、すべての単語が互いに関連していることです。互いにどう関連しているかを見て確認できます。この場合、aは鳥という単語を参照します。そして虫は鳥に影響を受けます。それが名詞が互いにどう関連しているかの一種ですが、これはマルチヘッドセルフアテンションと呼ばれます。

別のヘッドを持つことができます。これは説明のものです。太った鳥や赤い虫の形容詞である可能性があります。これらが行っていることは、単に互いを指して「私はあなたに関連している」と言っているだけではありません。

赤色の隣にいるという事実、赤色によって説明されているという事実をエンコードしています。そのすべての情報が単語、鳥という単語に追加されます。

最終的に、その文のすべての単語ベクトルがあります。「太った鳥が赤い虫を食べる」。それらすべてが、自分がどこにいるか、互いにどう関連しているかを理解しています。鳥は自分が太っていて、虫を食べていることを理解しています。虫は自分が赤くて、食べられることを理解しています。

それが文脈の問題を解決します。川岸対銀行がある場合、セルフアテンションを使用して、私の前に川があると言えます。だから銀行の意味が変わります。それで範囲が狭まります。

ここにセルフアテンションを持つ点は、他のすべての単語が持っているものに基づいて、より多くの意味を刻み込むことを可能にすることです。複数のヘッドは名詞と形容詞で止まる必要はありません。

どの時制か、どの言語か、文の中でどこまで進んでいるか、どの句読点の近くにいるか。そしてすべてが結びついています。これを提示するより技術的な方法がありますが、これで機能します。

これは、単語が他の単語によってどのように影響を受けることができるか、どのように自分の文脈を強化できるかを説明するために機能します。

自然言語処理の到達点

今、私たちはどこにいるでしょうか。多くの進歩を遂げましたが、多くの内容を急いで説明してしまったことをお詫びします。

基本的に、テキスト全体、『白鯨』のようなものの単語の分布を使用するだけでした。ランダムではなく、単に単語が他の単語の後に来るのを見ることから始めました。

それを使用して単語を予測することから、ニューロン、行列の掛け算、キーとクエリ、単語が互いに結びつくことを使用することに移りました。

それが単語生成を統計ゲームから、実際に私たちの考え方、話し方、コミュニケーションの仕方に似たものに変えます。私たちは言語をコンピュータに翻訳することができ、そこからコンピュータは私たちが理解できる言語を吐き出すこともできます。

これらすべての異なるレイヤーが結びついています。残念ながら、LLMが実際に何であるかには近づいていません。それはもっと多くのレイヤーです。しかし、それはすべて根本的に私たちがすでに探索したものの上に構築されています。

多層パーセプトロン、セルフアテンション、マルチヘッドセルフアテンション、大規模な文脈でより多くの詳細を得て互いに関連する単語の概念。

私たちの小さなセルフアテンションモジュールを使って本全体をそこに入れたら、すべての意味を実際に得ることはできません。だから、より堅牢な、より適切なシステムとアーキテクチャを使用しなければなりません。

ここから完璧にそこに到達しているわけではありませんが、近づいています。しかし、ここからLLMに到達するには多くの作業がありますが、それは何もしていないという意味ではありません。

まとめ

テキストを準備しました。それがトークン化でした。要約が終わる直前です。コンピュータが処理するための実際のテキストを準備しました。それがトークン化です。文を単語に分解することです。

ベクトルを介して単語に意味を追加しました。浅いですが。浅い意味は、物事が互いにどのくらいの頻度で発生するかをチェックするだけの非常に基本的なものです。

次に、ニューラルネットワークを使用して単語を生成できるようになりました。確率です。このベクトルを取り、実行します。記憶を追加しました、ある弱い形の記憶です。物事をより一貫して保つことができる、より正確なゲート付き記憶を追加しました。

そして、LMの側面を分解しました。アテンション、セルフアテンションです。根本的に、私たちの言語を理解でき、関連情報を生成できるプログラムがあります。

それが自然言語処理です。もっとありますが、私たちが言うこと、書くこと、おそらく私たちの行動やそのようなすべてのものをコンピュータが理解できるものに翻訳したことを理解できる限り。そして、それが言うことを理解できます。それが本当にすべてです。

しかし、ご覧のとおり、大規模言語モデル、アテンション、そのようなすべてのものを作成するために、それを大規模に拡大できます。

質問はありますか。次のセッションについて。一般的に。Transformerはこの直後に来ます。それは多くのセルフアテンションを互いに積み重ねたものと50の他のものです。しかし、それが次です。

他に何かありますか。スライドはアップロードされますか。はい、アップロードされます。

さて、これで本当に終わりです。皆さん、来てくれてありがとうございました。感謝します。マルコフ連鎖やそれが実際にどこから来たか、より堅牢な応用、それらをどのように成長させるか、その多くの異なる側面について探索できる多くの情報があります。

しかし、自然言語処理のほとんどをカバーしたと思います。ある程度理解できる方法であったことを願っています。

次のセッションは大規模言語モデルに入ります。これらの小さな自然言語処理のものから、ChatGPTがどのように機能するかへの飛躍を実際に行います。すべての異なるステップがどのように機能するかをカバーする予定です。理解できる方法で。それが来週です。注目しておいてください。

GPTツール、GPTアーキテクチャをやりたいです。それをやるべきです。それを発表してください。これを教えるのは大変です。来てくれてありがとう。ピザと食べ物があります。待って、アレルギーがありましたね。美味しかったです。遅刻しました。大丈夫です。何時に着きましたか。7分くらいだと思います。彼女は20分早く来ていました。何を見逃しましたか。トークン化だけです。他には何もありません。実際にいつ来たか覚えていません。

トークン化は文字通り単語を分解するだけです。実際に何か理解しましたか。それで十分です。ベクトル。十分です。ええ、それがすべてです。

お腹がすいて、疲れています。行くべきです。ありがとうございました。次はいつですか。おそらく来週です。正直に言うと、録画を停止しなければならないので、これを公開しないようにします。

コメント

タイトルとURLをコピーしました