CHATGPTに「すもももももももも」って分かるか訊いてみた
世界中で利用されているCHATGPT。もちろんそれ以外の生成AIも様々な分野で利用されているんだけど、CHATGPTは群を抜いている。世界中で一日でⅠ億人以上が10億クエリ利用している。これが理由で、Googleもそうとう影響がでている。いままでのネット検索といえばGoogleだったからね。さて、小学一年生になる娘の長男くん。いちおうここではS君として。このS君が将来AI開発したいと言っているそう。で娘が何を勉強させればいいかなどと言ってきたから、システムが動く原理を理解させるところから始めれば?と伝えた。どんなシステムでもよくて、例えば車はどうやって走るのか、テレビはどうやって映るのかなど。で、自分自身も気になったのでCHATGPTに、小学一年生がわかるように原理を解説してほしいとお願いしているうちに、ベクトルの話になった。ベクトルというのは単語や「語」につく重み付けの値のようなもの。このベクトルがどのように与えられ、どう変化するのかをCHATGPTとやり取りするうちに、じゃあ「すもももももももも」ってどうやって解析理解するのかという問(プロンプト)を投げかけた。で、このときの「も」のベクトル計算を尋ねてみたら、以下の通り。0) まず分割(トークナイズ)の可能性「すもももももももももも」は、モデルの学習時に作られたサブワード辞書(BPEなど)で分割されます。例: パターンA(細かい分割):「す」「も」「も」「も」「も」…(1文字ずつ) パターンB(合成トークンあり):「す」「もも」「もも」「もも」「も」…(「もも」が頻出なら一括に) パターンC(さらに大きい合成):「すもも」「もも」「もも」「も」… など📝 つまり、「それぞれの『も』がトークンとして存在している場合と、『もも』等の合成トークンの一部になって個別の『も』ベクトルが無い場合があります。以降は「『も』が単独トークンになっている」ケースを中心に説明します(合成トークンの場合は、その合成トークン全体にベクトルが与えられます)。1) 初期ベクトル(埋め込み)+位置各トークン i(ここでは「も」)について: 埋め込みの参照ei=E[ token_id(「も」) ]ei=E[token_id(「も」)] 「も」が同じトークンIDなら、どの位置の「も」でも同じ行ベクトル(固定パラメータ)を取り出します。 位置表現の付与(足し合わせ or 回転など方式いろいろ)xi=ei+pixi=ei+pi 位置が違えばpipiが違うので、同じ「も」でもxixiは位置依存で異なるスタートになります。 2) 文脈で変わる(自己注意+FFN)各層で「も」の表現は更新されます。層ℓℓの入力hi(ℓ)hi(ℓ)から: Q/K/V の生成qi=hi(ℓ)WQ,kj=hj(ℓ)WK,vj=hj(ℓ)WVqi=hi(ℓ)WQ,kj=hj(ℓ)WK,vj=hj(ℓ)WV 重み(どの文字/トークンを見るか)αi→j=softmaxj (qi⋅kjdk)αi→j=softmaxj(dkqi⋅kj) 周囲から集めた文脈h~i=∑jαi→j vjh~i=j∑αi→jvj 残差で“積み重ね”hi(ℓ+1)=hi(ℓ)+FFN(h~i)hi(ℓ+1)=hi(ℓ)+FFN(h~i)これを多ヘッド×多層くり返すので、同じ「も」でも、 直前・直後が「す」「も」「の」「うち」…など周囲の並びや、 文章全体のリズム/規則性(反復) を見ながら、各「も」ごとに別々の方向へ表現が育ちます。3) 何が効いて「も」が違って見えるの? 位置表現:同じ「も」でも並びの何番目かで初期状態から差がつく 自己注意: 語としての「も」(助詞の「も」)に近い文脈なら、係り先や反復の境目などを見る 「すもも」「もも」の語内部としての「も」なら、同じ語内のパターンや繰り返しに注意しやすい 多ヘッド:あるヘッドは反復検出、別のヘッドは音(文字)パターン、また別は境界…と観点が分業されやすい👉 その結果、「並びの前半の『も』」「語境界の手前の『も』」「“のうち”に近い『も』」など、すべて数値的には違うベクトルに仕上がります。4) 「合成トークン」だった場合もし「も」が「もも」や「すもも」という1トークンにまとまっていたら、 個々の「も」にはベクトルは存在せず、 合成トークン全体(例:「もも」)に一つのベクトルが与えられ、 それが同様に位置と文脈で更新されます。5) 出力(次の文字/語を選ぶとき)最終層の各位置の表現hi(L)hi(L)から、語彙テーブルの固定ベクトルと内積を取り、softmaxで次のトークンを確率化します。つまり、動くのはhh(文脈ベクトル)側、語彙テーブルは固定(学習済みパラメータ)です。まとめ(超短縮) 「も」が単独トークンなら: 同じ埋め込みを参照 → 2)位置で味付け→ 3)文脈で各「も」が別方向に進化。 「も」が合成トークンの一部なら: 個々の「も」にはベクトルはなく、合成トークンのベクトルを同様に文脈化。どちらにしても、最終的には“各場所の『も』ごとに違うベクトル”になって、反復や境界、助詞としての役割などを暗黙に表せるようになっています。という回答をくれました。わずかながら、理解できました。