5-3では、動作は16個の数でできた点になった。今回は言葉も点にする。「손을 흔든다」(手を振る)という文と手を振る動作が同じ地図の同じ場所に来るように、言葉じょうごと動作じょうごを一緒に学習する。最初は絡まっていた線が、学習とともに自分のペアを見つけていく過程を見守り、最後には文を入力して棒人間を動かす。「춤춰」(踊って)のひと言も、ここで初めて動作になる。
5-3の生成器Eでは、「投げる動作が集まる場所」を私たちが選んでやる必要があった。今回は人が言葉で選ぶ。そのためには、言葉も地図上の点にならなければならない。
文を入力するか、例を押してみよう。辞書にある単語のかけら40個のうち、文に含まれているものだけが1になる。この40個の数が言葉じょうごの入力である。
左は文、右は動作である(順番はわざと混ぜてある)。線の太さは、その文がその動作を選ぶ確率である。「学習再生」を押すか、バーをドラッグして学習を進めてみよう。
| 学習ステップ | ペア合わせ損失 | テスト文7個 → 近いテスト動作5個のうち正しい種類 | テスト動作140個 → いちばん近い文の種類が正解 |
|---|---|---|---|
| 0 | — | 2.9% | 10.0% |
| 10 | 1.763 | 28.6% | 55.0% |
| 25 | 1.317 | 65.7% | 72.1% |
| 50 | 0.395 | 71.4% | 96.4% |
| 100 | 0.090 | 71.4% | 100.0% |
| 400 | 0.010 | 71.4% | 100.0% |
上の画面の学習は、ブラウザで同じ計算をもう一度回したものなので(乱数が違う)、ステップごとの数値が少し異なる。テスト文は7個中5個が自分の動作を見つけた。見つけられなかった2個はセクション6で見る。
文を入力してEnter。「探す」は地図でいちばん近いシーンをそのまま取り出し、「作る」は近いシーン5個が集まる場所から新しい動作を引き出す。「~다가」(〜していて)、「~고 나서」(〜してから)で2つの文をつなぐと、前後につなぎ合わせる。
| 方式 | 学習文21個(×5回) | テスト文7個(×5回) |
|---|---|---|
| 探す | 100.0% | 71.4% |
| 作る | 100.0% | 71.4% |
作った動作の種類は、5-3の潜在空間で種類ごとの中心に最も近いもので判定した。「춤춰」(踊って)→ 作った動作は「踊る」と判定され、骨の長さの誤差は5.4%だった。つなぎ合わせ:「걸어가다가 손을 흔든다」(歩いていて手を振る)→ 前半 通り過ぎる · 後半 手を振る、「손을 흔들고 나서 춤춰」(手を振ってから踊って)→ 手を振る · 踊る、「캔을 줍고 쓰레기통에 넣는다」(缶を拾ってごみ箱に入れる)→ 拾う · ごみ箱に入れる。
テスト文7個のうち2個が、見当違いの動作を見つけた。どちらも理由ははっきりしている。
| テスト文 | 正解 | 見つけた動作(近い5個) | なぜ間違えたか |
|---|---|---|---|
| 「길에 캔을 던져 버린다」(道に缶を投げ捨てる) | 遠くに投げる | ごみ箱に入れる × 5 | 「던져」(投げ)は学習文になかったかけらで、「버린」(捨て)は「ごみ箱に入れる」の文(「쓰레기통에 쓰레기를 버린다」、ごみ箱にごみを捨てる)で学んだかけらだ。文脈を知らないので、「버린다 = ごみ箱に入れる」に引っ張られた |
| 「손을 펴서 떨어뜨리고 걸어간다」(手を開いて落とし、歩いていく) | 足元に落とす | 通り過ぎる × 5 | 「걸어」(歩い)、「간다」(行く)が「通り過ぎる」の方へ強く引っ張った。どの単語が中心の動作(落とす)なのかを、単語袋は知らない |
| 「걷다가 손 흔들기」(歩きながら手振り)(セクション5) | 通り過ぎる → 手を振る | 前半が見当違い | 「걷」(歩)は辞書にはあるが、学習文には一度も出てこなかった(学習文はすべて「걸어」)。学んだことのないマスは、地図上のどこも指さない |
上の表の「見つけた動作」はコード1の結果である。ブラウザで学習し直すセクション5では、「길에 캔을 던져 버린다」(道に缶を投げ捨てる)が「拾う」の方へ行くこともある。学習の乱数によって引っ張られる先は違っても、「投げる」を見つけられない理由(文脈を知らない単語袋)は同じである。
どちらのコードも、Colabに標準でインストールされているライブラリだけを使う。「ノートブック(.ipynb)をダウンロード」したあと、Colabでファイル → ノートブックをアップロードから開くか、コピーして新しいノートブックのセルに貼り付ける。
ダンスのシーンを加え、文を単語袋に、動作を16個の数に変えたあと、2つのじょうごを対照学習で合わせる。学習ステップごとの損失とテスト文の的中を出力する。自分のデータに替えるには CAPTIONSに自分の動作の説明文を、VOCABに使う単語のかけらを入れる。
学習した2つのじょうごで、文 → 動作を探したり新しく作ったりし、「~다가」(〜していて)でつないだ文を前後につなぎ合わせる。作った動作の種類を潜在空間で判定する。セクション5の表は、この出力からそのまま作られる。
ChatGPT、Qwen、ClaudeのようなAIアシスタントに貼り付けるプロンプトである。「コピー」を押すと、プロンプトの後ろに選んだコードが一緒に付く。〔 〕の中を自分の状況に書き換えて使えばよい。
AIの答えは出発点にすぎない。提案された論文・数値・ライブラリ関数は、必ず原文と公式ドキュメントで確認する。実在の人物が映る映像を使うときは、撮影の同意と個人情報の取り扱い規定をまず確認する。
本文の黄色い点線下線と同じ辞書である。セクション名を押すと、最初に出てきた場所へ移動する。
たとえは理解の第一歩だが、誤解の種にもなる。人の知覚と比べたたとえには強さを示した。直接 実際に同じ働きをするという根拠がある · 部分 一部の性質だけが似ている · なし 対応するものが知られていない
| 概念 | 日常のたとえ | 人の知覚のたとえ | たとえが外れるところ |
|---|---|---|---|
| 単語袋 | 文を単語カードに切り分けて袋に入れ、振る | なし | 袋から取り出したカードには順番がない。「犬が人をかむ」と「人が犬をかむ」が同じになる |
| 対照学習 | ペア合わせのカードゲーム:合うペアはくっつけ、合わないものは離す | 部分 言葉を聞きながらその動作も一緒に見る子どもが、単語の意味を身につけること | 子どもは数回で覚えるが、モデルは同じペアを数百回見なければならず、ペアのない単語は最後まで分からない |
| 同じ地図 | 2つの国の言葉を1冊の辞書に一緒に載せる | なし | 辞書は人が対応を決めるが、この地図はペアのデータだけで対応が生まれる。ペアが少ない言葉は見当違いの場所に置かれる |
| 探す対作る | 図書館で本を借りる 対 似た本を読んで新しい文章を書く | なし | 新しい文章には作家の意図があるが、この回の「作る」は近い5つのシーンの平均付近を引き出すだけだ |
| つなぎ合わせ | 「まず〜して、次に〜して」というダンスの振り付けの指示 | 部分 文の順番どおりに体を動かすこと | 振付師はつなぎ目を自然に変えるが、ここでは10フレームを単純に混ぜる |
E-1 著者紹介 · E-2 学術参考文献 · E-3 図と数字の出典
講師、実務OJT担当者、チューター向けの運営ガイドである。時間は目安なので、実際の授業に合わせて調整する。
| 対象 | 5-3を終えた大学生・社会人。「プロンプトを入れると結果が出てくる」生成AIの中身を知りたい企画担当者・実務者 |
|---|---|
| 前提知識 | 5-3の潜在空間、内積とソフトマックス(3-2・3-8) |
| 学習目標 | ① 文を数に変える最も単純な方法(単語袋)とその限界を説明できる ② 対照学習が「ペアは近く、他は遠く」で2つのじょうごを合わせる過程を説明できる ③ 共有マップでの探す・作る・つなぐの違いを、例を挙げて示せる |
| 目安時間 | 読む 30〜40分 · アニメーション実演 25分 · Colab実習 25分(コード1 12分、コード2 13分) |
導入 5分(セクション1)→ セクション2 単語袋 8分 → セクション3 学習再生 15分 → セクション4 地図 7分 → セクション5 文を入れてみる 10分 → セクション6 間違えた文 5分。
セクション2・3 20分 → セクション6の表で「モデルが知っている言葉と知らない言葉」を討論 15分 → セクション5でチームごとにうまくいく文・いかない文を探す 20分 → コード1に新しい文を入れて再学習 25分 → まとめ 10分。
入門者はセクション2・3・5のみ。中級者には、コード1の G = (P − I + Q − I) / 14 の1行が、なぜ「対角線は上げ、残りは下げる」のかを2 × 2の表で手計算させる。
| セクション | 立ち止まって問いかける質問 | 操作のコツ |
|---|---|---|
| 2 言葉は数 | 「'캔을 던진다'(缶を投げる)と'던진다 캔을'(投げる 缶を)は、なぜ同じ数になるのか?」 | 2つの例を交互に押す |
| 3 ペア合わせ | 「線がペアを見つけるのに何ステップかかったか? テスト文では?」 | 学習再生のあと、「テスト文」に切り替える |
| 4 同じ地図 | 「学習前、ひし形はどこにあったか?」 | ステップのバーを400 → 0へドラッグしてみる |
| 5 言葉 → 動作 | 「探すと作るの結果は、どう違うか?」 | 「춤춰」(踊って)を「作る」で何度も押す |
| 6 限界 | 「'던져 버린다'(投げ捨てる)を正しく探させるには、何を変えればよいか?」 | セクション5でその文を入れて、自分で確かめる |
| 誤解 | 正しい説明 | 見せる場面 |
|---|---|---|
| AIは文の意味を理解して動作を選ぶ | 文を数に変えて、地図で近い場所を探すだけである。この回の数は、単語のかけらがあるかないかだけである | セクション2、セクション6 |
| 対照学習には正解ラベルが必要だ | 「この文とこの動作はペア」という組さえあればよい。種類の名前は使わない | セクション3の解説 |
| 学習損失が0に近ければ、初めて見る文もよく当てる | 損失は学習文を基準にしたものである。テスト文は7個中5個しか当てられなかった | セクション3の表 |
| 文を長く詳しく書けば、いつもうまくいく | 辞書の外の単語や、別の動作の単語が混ざると、かえって見当違いの場所に引っ張られる | セクション6「손을 펴서 떨어뜨리고 걸어간다」(手を開いて落とし、歩いていく) |
| 「作る」は、学習データになかったまったく新しい動作を作る | 地図で近いシーンが集まる場所の付近から引き出す。学習した動作の種類の外へは、ほとんど出られない | セクション5「날아올라」(飛び上がれ) |
[1, 1, 1, 1]。4つのかけらがすべて入っている。この文は「投げる」と「手を振る」の間のどこかへ行くことになる。
e³ / (e³ + e¹) ≈ 0.881、e¹ / (e³ + e¹) ≈ 0.119。対角線(0.881)は1の方へ上げ、ペアでないマス(0.119)は0の方へ下げるように、2つのじょうごを直す。
動作の側はシーンが420個あるので種類ごとに形がしっかりできたが、文の側は種類ごとに学習文が3個しかなく、単語袋は文脈を知らない。初めて見る単語の組み合わせが来ると、言葉じょうごがぐらつく。
「걷」(歩)は辞書にはあるが、学習文には一度も出てこなかった。そのマスの重みは最初の小さなランダム値のままなので、地図上で意味のある場所を指さない。「걸어가다가」(歩いていて)に変えると「通り過ぎる」が出る。
探す。学習シーンをそのまま取り出すので、実在の人の動作データなら、その人の動きがそのまま出てくる(5-2の生成器Cと同じ)。作るは、複数のシーンが集まる場所から新しく引き出す。
コード1のCAPTIONSで、「投げる」の学習文を1つ「길에 캔을 던져 버린다」(道に缶を投げ捨てる)に似た文に替えて再学習する。テスト文の的中がどう変わるかを報告する。
単語袋の代わりに「2文字ずつ重ねて切ったかけら」(例:「던져」→「던」、「져」、「던져」)を使うbag関数を作り、初めて見る単語(「걷다가」、歩いていて)をよりうまく扱えるかを、テスト文の的中で比べる。
| 入門者 | セクション3の学習再生ひとつだけでも、「ペアを合わせながら学ぶ」がつかめる |
|---|---|
| 発展 | CLIP・MotionCLIP論文の図1をこの回のセクション3と並べ、同じ点と違う点を発表させる |
| 次回 | 5-5 「踊って」からダンス映像へ — 棒人間のダンスに助手の姿をまとわせる |
「5-4 単語から動作へ」を最後まで読みました。研究室の仲間たちが、ひと言ずつまとめます。