アドバンストビジョン

第5回: 埋め込みと文脈の付加

千葉工業大学 上田 隆一


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

アドバンストビジョン第5回

今日やること

  • なんでビジョンの講義で言葉(自然言語)を扱うのか
  • Word2vec
  • Transformer
  • Transformerの応用例
アドバンストビジョン第5回

なんでビジョンの講義で自然言語を扱うのか

  • 画像言葉のアプリケーションの存在
    • 画像説明文生成
    • プロンプトへの指示画像の生成や指定した物体の認識
      • Stable Diffusion
      • Segment Anything Model
        ↑いずれも今回扱うTransformerを使用
  • 言語処理の手法の画像処理への転用
    • TransformerVision Transformer
    • データの種類が異なるだけで本質的な違いは少ない(?)
  • Transformerの普及: 上記のように様々なところで利用
やらざるをえない
アドバンストビジョン第5回

Word2vec[Mikolov2013]

  • 単語をベクトル表現するためのモデル群や枠組み
  • Word2vecで作られたベクトル表現はTransformerの入力に
アドバンストビジョン第5回

単語のベクトル表現(単語の埋め込み、分散表現)

  • 近い単語は似たベクトルに
    • 例(適当。上記のように次元はもっと必要)
      • おじさん
      • おばさん
      • 不動産
    • 類似度が内積で計算できる
      • おじさんおばさん
      • おじさん不動産
    • 次元を大きくすると、様々な切り口で類似度を計算可能
  • 分散表現(埋め込み表現): 上記のような単語のベクトル表現
  • 埋め込み: 分散表現を作ること
アドバンストビジョン第5回

埋め込みとこれまでの内容の関係

  • 分散表現の空間=潜在空間
    • 入力をエンコーダで別の空間に写像
    • (Word2vecの場合は確率は考えない)
  • 疑問
    • 単語同士の類似度を潜在空間に作り出すには?
      • エンコーダ側の構造は?
      • デコーダ側の構造は?
      • 何を学習させる?
アドバンストビジョン第5回

分布仮説(distributional hypothesis)

  • "You shall know a word by the company it keeps!" [Firth1957]
      • ass言い過ぎ
    • ある単語の意味は周辺の単語が担っているということ
  • つまり、ある単語のベクトルの値は、文の前後の単語から決めるとよい
    (仮説が正しいならば)
    • [Mikolov2013]では、この性質を利用した分散表現の作成方法が
      2つ示されている
順に見ていきましょう
アドバンストビジョン第5回

埋め込みの方法1: skip-gram

  • 右図の構造のANNを準備
    • アフィン層2つとソフトマックス層
  • 受け付ける入力:
    • ある単語について、その単語に対応する要素がになったone-hotベクトル
    • 単語の種類だけ次元がある
  • アフィン層間のベクトル: 数百〜数千次元
    • これが分散表現に
  • 出力: 入力と同じ次元のベクトル
    • 各単語に対応する確率
アドバンストビジョン第5回

skip-gramの学習

  • ある単語のone-hotベクトルに対し、ある範囲内に別の単語がある確率を学習
    • たくさんの文献から訓練データを作成
    • 単語間の関係を反映した埋め込みが可能
  • の各行が分散表現に
      • ある単語のone-hotベクトルを入力すると、が得られる
アドバンストビジョン第5回

埋め込みの方法2: Continuous Bag-of-Words(CBoW)

  • 下図のANNに次の学習をさせる
    • 文のなかの単語を隠して、周辺の個の単語から隠した単語を当てる
      • 例: "Tokyo Skytree is the __ tower in Japan."(
        is、the、tower、inからtallestを推測させる
  • ANNの入出力
    • 入力: 前後範囲内の単語のone-hotベクトルを平均したもの
    • 出力: 各単語について、隠された文字である確率を記録したもの
      • skip-gramと同じく次元は単語の種類の数
  • skip-gramと同様、の各行が潜在表現のベクトルに

アドバンストビジョン第5回

Transformer

アドバンストビジョン第5回

埋め込みができればコンピュータが文章を認識する?

・・・ことはできない

  • 最尤な単語をskip-gramで予想して並べていけばそれっぽい文は作れるけど、たぶん無意味な文ができる
  • 単純な埋め込みには限界
    • 語順に関する情報は、完全にはない
    • 文脈依存な情報を持っていない
      • 同音異義語に1つのベクトル区別してない
        • 例: チンチラ(げっ歯類にも猫にもいる)
どうしましょう?
写真上 by Guérin Nicolas(CC BY-SA 3.0) 写真下 by allen watkin(CC BY-SA 2.0)
アドバンストビジョン第5回

どうすればいいか?

  • 埋め込みに語順と文脈の情報を付加してやるとよい
    • 潜在表現のベクトルに位置情報を付加
    • さらに注意機構で文脈を考慮
  • Transformer[Vaswani2017]で考案された
    • これらの仕組みで既存のANNを凌駕
      • Transformerの概略と入力を説明してから順に説明していきます
アドバンストビジョン第5回

Transformer

  • 翻訳のためにGoogleで開発された
  • 正体: 右のような構造のANN
    • エンコーダ(左側)とデコーダ(右側)で構成
  • 画像にも応用されている
    • Vision Transformer(ViT)
  • その他言葉を扱うもので新しいものは、だいたいこれの応用

画像: CC-BY-4.0 by dvgodoy

アドバンストビジョン第5回

Transformerへの入力(エンコーダ)

  • 文章: サブワード単位のトークン(単語をより細かく文を区切って埋め込みをしたもの)の分散表現でのベクトルを並べたもの
    • という行列に
    • 右の例では省略されているが<EOS>(文の終わり)などの特殊なトークンも入力として並べる
アドバンストビジョン第5回

Transformerへの入力(デコーダ)

  • デコーダの場合は途中までの文を入力
    • <SOS> I want to eatなど
      • <SOS>: start of sentence)
  • <SOS>から始めて、翻訳したものを次に入力に回す
    • 最初の入力: <SOS>
    • 次の入力: <SOS> I
    • 次の入力: <SOS> I want
    • ・・・と文ができていく
      (実際はエンコーダと同じく行列を入力)
アドバンストビジョン第5回

位置情報の追加

  • エンコーダに入力するの各トークンに、文章中での位置情報(位置符号)を付加
      • 位置情報:
  • 位置情報のつけかた
    • オリジナルのTransformer: 固定値(次ページ)
    • 学習させる方法も
アドバンストビジョン第5回

オリジナルのTransformerの位置符号

  • 位置情報:

    • 。原著では
  • 内積をとると位置が近いほど値が大きい[山田2023]
アドバンストビジョン第5回

文脈の考慮の必要性

  • 必要な例
    • 例1: 「ガラス窓を割ったのは私です。」を英語に翻訳
      • "It's me who broke the ..."まで翻訳したとき、次に注目すべきは壊れるもの(=ガラス)
    • 例2: 右上の丸を月と認識させたい
  • 既存の時系列情報や画像を扱うANNは苦手
    • 「近い位置にある=関連性が大きい」と捉えるので
      • 日本語と英語で語順が違っているので難しい
      • 丸が他の手がかりと離れていて難しい
アドバンストビジョン第5回

注意機構(attention機構)

  • なにかを出力する際、文脈上、入力のどこに注目するかを
    決める(決めるように訓練される)機構
    • glassを出力したい時にはbrokeやtheに注目
    • 丸が分からないので画像の別の特徴も注意して見る
  • 注意機構の層がやること
    • 埋め込みを文脈に応じて変えて後段の層に伝達
      • ↑どうやって?(次ページ)
アドバンストビジョン第5回

キー・バリュー・クエリを使った注意機構

  • クエリ: 問い合わせのこと
    • 例: 翻訳の例のIt's me who broke the
  • キー・バリュー: データベース用語
    • キーに値をぶら下げるキーバリュー型データベースなどのたとえ
    • 翻訳前の言語の埋め込みから作成(そうでない場合もあるので次回くわしく)
  • クエリにキーが反応して、対応するバリューに引きずられてベクトルの位置が変化
    • 例: クエリ中のbrokeと関連性が深い日本語の単語が反応し、brokeの重みを変更
アドバンストビジョン第5回

具体的な計算

  • クエリ: という行列
    • 以下、は学習で獲得する行列
  • キー: クエリに反応するトークンを選択
    • を用意してを計算
  • バリュー: 重み付けの値
  • 出力: Softmax

そうしろと人間が言ってるわけではないが、こういう構造を用意してあげるとそういうふうに学習

アドバンストビジョン第5回

まとめ

  • 埋め込み
    • 次元の高いベクトルで、単語やトークンの様々な関係性を表現可能
    • skip-gramなどの学習方法で実用性のある埋め込みが作成可能
    • ViTなどでは画像に対しても作られる
  • Transformer
    • 一言でいうと、埋め込みに注意機構で文脈を反映させる仕組み
    • 詳しくは次回
  • 参考文献: [菊田2025]
アドバンストビジョン第5回