Up 入力データの処理 (入力層)──埋め込みベクトル 作成: 2025-05-16
更新: 2025-05-16


    入力されたテクストSは,入力層で以下のように処理される。

  1. トークン
    1.1 S のトークン化
    S を, トークンに分割する。
    トークンの数 (「S の長さ」) を
        L(S)
    で表す。

    1.2 トークン検索
    学習材の入力テクストから取り出される各トークンに対し,トークン表から,これの ID とベクトル表現を引く。

    S から未登録トークン (未知語) が出てきたときは,つぎの「脱構築的トークン化」を処置する:
      サブワードに分割して,既知の小さな単位で表現する。
      (サブワードの例:WordPiece や BPE )

    こうして S は,トークン ID の並び
       ( ID_1, ID_2, ..., ID_L(S))
    に表現され,ID にはトークンベクトルが対応する。


  2. 位置エンコーディング
    長さ L の入力テクスト S に対し,S のトークンベクトルの「位置エンコーディング」として,L × D 行列
         P(L) = ( p_ij )
     を,つぎのように定義する:
       i が偶数のとき:p_ij = sin( i / 10000^(j/D) )
       i が奇数のとき:p_ij = cos( i / 10000^((j-1)/D ) `


  3. 入力層の出力
    3.1 S の埋め込み行列
    トークンベクトル T(ID_1), T(ID_2), ..., T(ID_L(S)) を上から下に並べると,L(S) × D 行列の格好になる。
    この行列を,
        E(S)
    で表し,「Sの埋め込み行列」と呼ぶ。

    3.2 埋め込み行列と位置エンコーディングの合成
    つぎの組を,入力層の出力とする:
      ・E(S) : S の埋め込み行列
      ・P(L(S)) : S のトークンベクトルの位置エンコーディング
    そしてこれを,2つの 行列 ( L(S)×D 行列) の和
       X(S) = E(S) + P(L(S))
    で実現する。

    註 :「加算」のポイント
    この「加算」は,情報を混ぜ合わせるのではなく,並列に情報を持たせる形になっている。──実際,P(L) の<珍妙>な定義の理由は,ここにある。。
    そしてこの方法は,実用的である:
     ・シンプルで計算効率が良い (位置と意味を分けずに処理できる)
     ・実験的にも有効(原論文 "Attention is All You Need")

    3.3 Self-Attention へ
    出力 X(S) は,つぎに Self-Attention (Transformer の最初のブロック)の入力である。

    Self-Attention のステージに入ると,行列 X(S) の形は保たれず,行ベクトルがバラバラになる。
    しかし各ベクトルは,「Sのどこにあるトークンのベクトルか」の情報になっているので,S が保たれる:
      X(S) (= E(S)+P(L(S) ) の i 行は,つぎの2つのベクトルの和である:
      • S の i 番目のトークンのベクトル
      • 「 i 番目のトークンのベクトル」と「ベクトルのj番目の要素」を表現するベクトル
    各ベクトルが「文脈の中の意味」として実現されているわけである。


  4. 「Self-Attention
    (これから勉強)


  5. 「学習」で起こること
    初期状態ではランダムだったトークンベクトルが,膨大なテキスト(学習材)を通じて,「文脈的意味」を反映するベクトルへと変化してく。
    ベクトル空間のスケールでは,「distributional semantics」の形成が見える。