logo

機械学習における埋め込み 📂機械学習

機械学習における埋め込み

定義

機械学習における埋め込みembeddingとは、データ集合$X$からベクトル空間$\mathbb{R}^{n}$への写像、あるいはこの写像を行う行為そのものを意味する。

$$ \operatorname{Embedding}: X \to \mathbb{R}^{n} $$

説明

埋め込みはもともと数学の用語で、分野ごとに定義は少しずつ異なるが、共通して「ある対象を別の対象の中に構造を保存しながら入れ込む単射写像」を指す。

機械学習の埋め込みはこの観念を受け継いでいるが、はるかに緩やかである。データを数からなるベクトルへ写像してしまえば、それがもともとどんなデータであったとしても、計算のできる対象となる。そのベクトルの大きさを測ったり、二つのベクトル間の距離を測ったりできるという意味である。そのためには埋め込み関数がデータをうまく埋め込まなければならないが、深層学習では埋め込み関数も学習の対象となる。たとえば「似たデータは近いベクトルへ、異なるデータは遠いベクトルへ送れ」という要求を損失関数に込めて学習させることができる。

どの埋め込みを用いるかは重要な問題であり、これは自然言語処理におけるワンホットエンコーディングの限界によく表れる。カテゴリカルデータをベクトルに変える最も単純な方法は、各項目に標準基底ベクトル$\mathbf{e}_{i}$を一つずつ割り当てるワンホットエンコーディングである。ところが語彙集合$V$の大きさが数万から数十万に達する自然言語処理において、これはすなわち成分一つだけが$1$で残りはすべて$0$である$\left| V \right|$次元の疎ベクトルを意味する。より深刻な問題は、異なるワンホットベクトルが常に直交するということ、すなわち$i \ne j$ならば$\mathbf{e}_{i} \cdot \mathbf{e}_{j} = 0$であるということだ。「子犬」と「犬」が「子犬」と「行列式」と同じくらい互いに無関係であって、表現そのものに類似度の情報がまったくない。そこで、これをはるかに低い次元$n \ll \left| V \right|$の密ベクトルdense vectorへ変える埋め込みを用いて、ベクトル間の距離と方向に意味を与える方法が主に使われる。

自然言語処理

🔒(26/07/30)自然言語処理において埋め込みはテキストベクトル化text vectorizationとも呼ばれ、さまざまな方法がある。以下では語彙辞書$V = \{$ 子犬、犬、猫 $\}$(大きさ$3$、成分の順序もこの順)を共通の例とする。

  • ワンホットエンコーディング:あらかじめ作っておいた語彙辞書で各単語に索引を付け、標準基底ベクトルに対応させる最も基本的な方法である。整数型で索引を与えることと本質的に同じであり、使う語彙が多ければ、先に見た疎性・直交性の問題のため事実上使いにくい。

    単語ワンホットベクトル整数型
    子犬$(1, 0, 0)$$1$
    $(0, 1, 0)$$2$
    $(0, 0, 1)$$3$
  • 頻度ベクトル化count vectorization:一つの文書を語彙ごとの出現回数で表現する方法であり、代表的な方式がバッグオブワーズbag-of-wordsである。たとえば「犬 猫 犬」という文は、成分を順に子犬、犬、猫の頻度として数えて$(0, 2, 1)$へ埋め込まれる。

  • 単語埋め込みword embedding:単語を低次元の密ベクトルで表現することをいい、Word2Vec、fastText、GloVeなどの方法がある。以下の値は説明のための任意の例にすぎず、実際の学習値ではない。

    単語埋め込み(例)
    子犬$(0.8, 0.1)$
    $(0.7, 0.2)$
    $(-0.6, 0.5)$

    こうすれば、意味の似た「子犬」と「犬」はベクトルが互いに近く「猫」とは遠くなり、ワンホットエンコーディングとは異なりベクトル間の距離に単語の意味が込められる。