compcogneuro/sims: テスト
このページは外部資料の日本語訳です。原文の見出し順と本文順を保ち、コード・URL・出典表記はできるだけ原形のまま残しています。
出典とライセンス
原典: https://github.com/compcogneuro/sims/blob/main/ch10/sg/README.md
ライセンス: BSD 3-Clause。このページは日本語翻訳であり、変更点は翻訳とサイト内整形です。
# 導入
このネットワークは、統合された「ゲシュタルト」隠れ層で文の構文と意味論の両方をエンコードすることを学習します。文は単純なエージェント-動詞-患者の構造を持ち、オプションの前置詞または副詞修飾語句が最後にあり、能動形式または受動形式のいずれかになります(80% 能動態、20% 受動態)。コンテキストによって解決する必要があるあいまいな用語があり、構文とセマンティクスの間の重要な相互作用を示しています。
元の文ゲシュタルト モデルは セント ジョン & マクレランド (1990) によって公開されており、このバージョンでは同じ言語コーパスを使用していますが、ネットワーク アーキテクチャとトレーニング パラダイムが多少異なります。
このバージョンのモデルは、新皮質の深層の機能と視床との相互接続性を組み込んだ、より新しい DeepLeabra フレームワーク (オライリー他、2021) を使用します。 我々は、これらの回路が予測誤差駆動学習の強力な形式をサポートしていると仮説を立てています。トップダウンの皮質投影が視床の髄核に対する予測を駆動し、マイナス位相として機能し、その後、位相的バースト入力が実際に起こったことを表す周期的なプラス位相を駆動します。 このバーストは 10 Hz アルファ 周波数 (100 ミリ秒ごと) で発生し、モデルの主要な組織化原則としてこの時間スケールを使用するための基礎を形成します。
現在のモデルは、これらの回路を使用して、どの単語が文中に次に現れるかを予測しようとすることによって学習します。この予測は、EncodeP pulvinar 層で表されます。 予測学習をサポートするために、深層には前のタイムステップからの「コンテキスト」情報を維持する機能もあり、これはモデルが文内の以前の単語からの情報を記憶できるようにするためにも重要です。 このコンテキスト情報は、このシミュレーションの前のバージョンで使用された単純なリカレント ネットワーク (SRN) モデル エルマン、1990年 に似ています。 興味深いことに、モデルが次の単語を正確に予測することは困難ですが、それを学習することで、以下で説明するように、Role-Filler の質問に答える学習全体に利益がもたらされることがわかりました。
元の文のゲシュタルト モデルが誕生してから長い年月が経ち、2000 年にこのモデルが複製されて以来、同じ単語予測学習プロセスに基づいて、ますます大規模な「AI」モデルが開発されてきました。おそらくご存知のとおり、これらの GPT (generative pretrained Transformer) モデルは、人間が長年にわたって書いてきたすべてのもののかなりの部分を網羅する膨大なテキストのコーパスを「読んで」次の単語を予測することにより、人間のあらゆる種類の知識についてかなり驚くべきレベルの理解を発展させてきました。この教科書の将来の版では、この進歩と GPT モデルを駆動する変圧器技術について探求します。
# トレーニング
予測学習に加えて、ネットワークは、ネットワークに提示された現在および以前の情報について質問することによってトレーニングされます。 すべての試行のマイナス段階では、現在の単語は Input 上にあり、現在の文に対する特定の意味論的役割が何かについての質問が Role 入力層に出されます。たとえば、アクティブな文の最初の単語 (常に文の「エージェント」) の場合、Role 入力は Agent になり、ネットワークは Input に存在するものと同じものを Filler 出力層に生成するだけで済みます。ただし、次の試行では、新しい単語 (動詞または Action) が提示されますが、ネットワークは、「レビュー」質問によってクエリされた前の試行の Agent をまだ記憶している必要があります。これは、GestaltCT 皮質視床コンテキスト層が提供するものです。これらすべては、次に実行するテストで確認できます。トレーニング プロセスをさらに詳しく確認したい場合は、[[sim:Init]] および [[sim:Step]] Trial をクリックして、いくつかのトライアルを実行してください。
curq 質問タイプは、現在のフィラーに関する質問を示し、モデルはほぼ常に正解します。一方、revq は、文の前半の何かに関する「レビュー」質問を示します。これらは、モデルの内部の「精神状態」について最も明らかになります。 アクションと患者の入力中に 2 つの体系的なレビュー質問 (以前のエージェントとアクションの入力について尋ねます) があり、次に 2 つのランダムなレビュー質問があり、1 つは構文的な前置詞単語 (例: with、to) の間に、最後の質問は最後にあります。 以前のバージョンと元のモデルはどちらも、単語が入力されるたびにすべてを尋ねていましたが、ここでは物事を合理化し、それでも良好なエンコーディングを得ることができました。これは、一部には深層学習メカニズムの性質によるものです。
- 次に、ツールバーの [[sim:Open Trained Wts]] を押して、事前トレーニングされた重みをロードします (ネットワークのトレーニングには数分から数時間かかります)。次に、最初にネットワークを探索し、[[sim:Wts]] ->
r.Wtビューを使用して接続を調査し、その後 [[sim:Act]] ->Actの表示に戻ります。
テスト
ここで、ここにリストされている特別に選択されたテスト センテンスのセットでパフォーマンスを調べて、トレーニング済みネットワークのパフォーマンスを評価しましょう。
- 役割の割り当て:
- 能動的意味: 女子高生はクールエイドをスプーンでかき混ぜました。
- 能動構文: バスの運転手は先生にバラをあげました。
- 受動的意味: ゼリーはバス運転手によってナイフで広げられました。
- 受動構文: 先生はバス運転手にキスされました。
- アクティブ制御: バスの運転手は教師にキスしました。 *単語の曖昧さ:
- バスの運転手は公園でボールを投げました。
- 先生はリビングルームにボールを投げました。
- コンセプトのインスタンス化:
- 先生は誰か(男性)にキスをしました。
- 役割の詳細
- バスの運転手はステーキを(ナイフで)食べました。
- ピッチャーは(スプーンで)何かを食べました。
- オンラインアップデート
- その子は美味しそうにスープを食べました。
- コントロール: ピッチャーはスープを美味しそうに食べました。
- 紛争
- 大人はキッチン(リビングルーム)でアイスティーを飲みました。
テスト文は、表に示すように、文理解タスクのさまざまな側面を示すように設計されています。まず、一連の役割割り当てタスクが、文内の主な役割を割り当てるための意味論的または純粋に構文的な手がかりを提供します。意味論的手がかりは、生物名詞のみがエージェントになり得るのに対し、無生物名詞は患者のみになり得るという事実に依存します。アニメーションは入力で明示的に提供されていませんが、トレーニング環境ではこの制約が強制されます。したがって、文が「ゼリー…」で始まる場合、ゼリーは無生物であるため、能動的な文の主体ではなく、受動的な文の患者であるに違いないことがわかります。ただし、文が「バス運転手…」で始まる場合、バス運転手がエージェントなのか患者なのかがわからないため、単語 was の構文上の手がかりが次に現れるかどうかを確認するまで待たなければなりません。
- 実行モードを
TrainではなくTestに設定し、[[sim:Init]] を実行してから [[sim:Step]]Trialを実行して、特別なstart標識である最初のテスト センテンスの開始を確認します。Step Trialをもう一度実行して、文の最初の単語を表示します。
能動的意味役割割り当て文 (schoolgirl) の最初の単語が提示され、ネットワークは女子高生が文のエージェントであると正しく答えます。これは、ネットワークの下部にあるテキストの Output に示されています。 TrlErr 出力は、ターゲットに対してエラーが発生したかどうかを示します。
このテスト中にプラスフェーズやトレーニングは行われないため、すべては入力単語の統合に依存することに注意してください。
- この能動意味文 (スプーン) の最後の単語まで [[sim:Step]]
Trialを実行し続けます。 [[[sim:Test Trial Plot]]] タブをクリックすると、進行中の各試験の棒グラフと、ネットワークの [[sim:Output]] 応答が表示されます。おそらく、テスト文のタイプを示す [[sim:SentType]] が表示される [[[sim:Test Trial]]] タブで完全な結果を確認する方が簡単です。
ネットワークは、提示された単語の役割のほとんどを正しく識別でき、間違いがあった場合には、一般に賢明な応答を行うことに注目してください。この文では、単語の役割がその意味論によって制約されているため、この成功は、ネットワークがこれらの意味論的な制約に敏感であり、解析にそれらを使用できることを示しています。
- [[sim:Step]]
Trial次の文まで (アクティブ構文)。
この文には 2 つの生きた名詞 (バス運転手と教師) が含まれているため、ネットワークは構文語順の手がかりを使用してバス運転手がエージェントであると推論する一方、「gave to」構文構造を使用して教師が受信者であることを認識する必要があります。エージェントの複数のクエリを通じて、エージェントは、最近見た教師ではなく、以前に見たバスドライバーであることを正しく記憶していることを観察します (ただし、時々間違いを犯す可能性があります)。
次の文では受動的な構文が使用されていますが、これは jelly がエージェントになり得ないという意味論的な手がかりから明らかです。
- パッシブ セマンティクスによる [[sim:Step]] を実行し、ネットワークがこの文を正しく解析することを観察します。
最後の役割割り当てのケースでは、文は受動的であり、教師がエージェントであるか患者であるかを識別するために使用できる構文上の制約のみがあります。これはネットワークが直面する最も困難な構造の 1 つであり、時々エラーが発生します。
- この受動的な構文文による [[sim:Step]]。
さらなるテストにより、ネットワークはこの文を正しく理解することもありますが、多くの場合エラーが発生することが判明しました。これは、明らかに、受動的な文の頻度が低いことに起因する可能性があります。次の文からわかるように、これは前の文の高頻度の能動的な形式の「制御条件」であり、ネットワークは問題なく動作します(ただし、時々、あちこちでランダムなエラーが発生します)。
- このアクティブ制御文による [[sim:Step]]。
次の 2 つの文は、曖昧な単語 (この場合は throw と ball) を周囲の意味論的コンテキストに基づいて解決するネットワークの能力をテストします。トレーニング中に、ネットワークはバスの運転手が野球ボールを投げるのに対し、教師はパーティーを開くことを学びました。したがって、ネットワークはこれらの曖昧な文の適切な解釈を生成する必要があります。
- [[sim:Step]] を次の 2 つの文 (Ambiguity1 および 2) まで調べて、これが事実であることを確認します。
ここでネットワークが 教師 を同じくパーティーを開催する他のエージェントである 女子高生 に置き換えるという間違いを犯していることを時々観察しました。したがって、ネットワークのコンテキスト記憶は完璧ではありませんが、人間と同じように、意味的に適切なエラーを犯す傾向があります。
次のテスト文は、曖昧な用語 (someone など) をより具体的な概念でインスタンス化するネットワークの能力を調べます。教師は男性 (ピッチャーまたはバス運転手) にのみキスするため、ネットワークはこれら 2 人の男性のいずれかで曖昧な 誰か をインスタンス化できるはずです。
- この文を [[sim:Step]] すると、
someoneがPitcherPersでインスタンス化されることに注目してください。
同様の現象が役割詳細テストの質問にも見られます。ここで、ネットワークは、実際には入力に記載されていないイベントの側面に関する質問に答えることができます。たとえば、ネットワークは、女子高生がクラッカーを指で食べるだろうと推測できます。
- 次の文に進みます (役割の詳細 1)。
入力に指がまったく示されていないにもかかわらず、楽器の役割に関する最後の質問が指で正しく答えられていることがわかります。次の文ではこれをさらに一歩進めて、投手が何を食べるかをネットワークに推測させます。
- 先に進み、[[sim:Step]] を実行してください (役割の詳細 2)。
興味深いことに、次の単語予測子はスープを示唆していますが、フィラーの出力は「finger」です。 痛い。 その後、患者が他ならぬ投手であると正しく推測します。これは、彼が自分の指を食べていた場合にも当てはまります。いずれにしても、モデルは少しランダムである場合があります。
次のテスト文は、後続の情報が最初は曖昧な単語をさらに制約する場合に、情報のオンライン更新を評価することを目的としています。この場合、文は child という単語で始まり、モデルはこれが pitcher であると推測し、前の文のコンテキストから残っている可能性があります。
- オンライン アップデート文による [[sim:Step]]。
ネットワークが副詞 daintiness に達すると、これは schoolgirl を一意に識別するはずですが、モデルは代わりに teacher を入力します。これは、美味しそうに食べる他の人ですが、彼らは子供ではありません。
可憐 が持つ効果を比較するために、ピッチャーが文のエージェントとして明示的に指定されている次の制御条件を実行できます。モデルはある時点でかなり混乱し、教師がエージェントであるという混乱を繰り返します。
- オンライン制御文による [[sim:Step]]。
最後のテスト文は、ネットワークが矛盾する情報をどのように処理するかを示しています。この場合、トレーニング環境では常にアイス ティーをリビング ルームで飲むように指定されていますが、入力文ではキッチンで飲んだことが示されています。
- この矛盾文による [[sim:Step]]。
キッチンの場所は受け入れますが、アクションは drank ではなく spread でなければならないと述べ、キッチンで発生するアクションへの矛盾する入力に基づいてスキーマを更新しました。
これは、古典的な「幽霊戦争」実験 (Bartlett、1932 年) や他の多くの実験で示されているように、事前知識が文章理解にどのようにバイアスを与えるかを示す有用な実証となる可能性があります。
表現の性質
ネットワークが (完全ではないにしても) 合理的に動作することがわかったら、(ゲシュタルト層で) ネットワークの内部表現の性質を調査して、ネットワークがどのように機能するかを理解することができます。
※「[[sim:NounClust]]」タブを選択し、ツールバーの「[[sim:Probe all]]」を押します。
少し遅れて、名詞のクラスター プロットが表示されます。 このクラスター プロットは、「女子高生」と「可憐」、「クラッカー」と「ゼリー」など、いくつかの賢明な単語の組み合わせを示しています。 ただし、単語は文の文脈の外で提示されただけであり、モデルが経験したことはないため、これらの結果は限定的です。
- [[[sim:SentClust]]] タブをクリックすると、センテンス プローブ クラスター プロットが表示されます。
これらの調査文は、エージェント、動詞、および患者を体系的に変更して、ゲシュタルト層がこれらの要素をどのようにエンコードするかを明らかにします。 エージェント: bu = バス運転手、te = 教師、pi = ピッチャー、sc = 女子高生。動詞: dr = 飲んだ、st = かき混ぜた、at = 食べた。患者: ic = アイスティー、ko = クーレイド、so = スープ、st = ステーキ。
このクラスター プロットは、文が最初に動詞に従ってクラスター化され、動詞が同じ (食べる) 場合、患者 (スープとステーキ) がクラスターを分解することを示しています。 各動詞クラスター内では、エージェントのグループ分けも体系的に組織されています。バス運転手と女子高生は最も異なっており、グループ化されることはありませんが、バス運転手、教師とピッチャー、女子高生は最も一般的に関連しています。したがって、ネットワークの動作から予想されるように、ゲシュタルト表現が体系的な方法で情報をエンコードしていることがわかります。
質問 10.12: このクラスター構造は、純粋に構文情報、純粋に意味情報、または両方のタイプの情報の組み合わせを反映していますか?この種の表現が処理言語に役立つ理由を自分の言葉で明確に説明してください。