1. 埋め込み層 (Embedding Layer)とは [概要]
埋め込み層(Embedding Layer)とは,入力の単語・トークンのone-hotベクトル表現(K次元=数万語の辞書)を,自然言語処理ネットワークが扱いやすい,低次元の単語・トークン表現ベクトルへと埋め込む全結合層のことを言う.
TransformerやBERTなどのモダンな言語モデルでは,埋め込み層をトークン入力部分に配置し,トークンIDをもとに低次元トークン表現を獲得するために使用する(※ Transformerの場合,埋め込んだトークン表現ベクトルは,デフォルトで$d_{\text{model}}=512$次元ベクトルである).
テスト時に,毎回元のone-hotベクトルから全結合層をForwardしていると計算効率化が悪い.ところが,自然言語処理では,語彙内のK個のトークン(のone-hotベクトル)のみを入力対象として限定できる.以上から,埋め込み層は,トークンIDをベクトルK個を保管して,IDですぐそれらを取り出せるようにした「ルックアップテーブル」として実装するのが標準的である(図1 ).
こうして,埋め込み層では,トークンID (= one-hotベクトル表現でもある)を入力として,対応するIDの埋め込み済み$d$次元ベクトルを出力する.例えばPyTorchでは,nn.Embeddingクラスとして提供されている.
※ 実態が「埋め込み担当の全結合層+ルックアップテーブル」という構成になっているので,「埋め込み(Embedding)層」という呼び名よりは,「トークン埋め込みベクトルを保管した,ルックアップテーブル」を,簡潔に示した呼び名が欲しかったところではある.
ただしViTやDETRなど,自然言語のようには「入力語彙」を形成できない,連続信号モーダルをTransformerのトークンとして入力としたい場合,あらかじめトークン辞書化・ルックアップテーブル化ができないので,毎回,Forwardしてベクトル変換するしかない(2.3.2で詳しく)
1.1 埋め込み層の現代での使用:Transformerでの埋め込み層
埋込み層の代表例には,Transformerのトークン埋め込み層があげられる.Transformerで言語間変換モデルを学習する際に,各入力トークンのone-hotベクトル表現(語彙の辞書)を,低次元のベクトル表現へと埋め込むのを担当する.
埋め込み層は,word2vec・Gloveなどの,浅いネットワークによる単語埋め込みEncoderから発展したものであるのもあり,Transformer時代でも,シンプルに全結合層1つのみで学習する(※ あまりやらないが,埋め込み層をもっと多層のリッチなEncoderに代えるのもアリである).
このあと2節では,従来手法からの変遷をまとめておき,なぜTransformer世代の埋め込み層(2.3節)がこの形におちついたのかを見ておくことで,トークン埋め込み層への理解をもう少し深めてもらいたい.
2.過去の「単語・トークン埋め込み層」の変遷
Transformerが登場する1節の使用方法に到る以前の,自然言語処理における「単語埋め込み」技術の変遷について,簡単にだけまとめておきたい.
元々,単語埋め込みベクトル = (単語)分散表現は,Yoshua Bengio のニューラル確率言語モデルや,その派生によるディープ表現学習研究あたりから登場してきた,単語の低次元ベクトル空間におけるモデリング技術である.
最初は分散表現を計算するネットワークは独立して使用したいが,その後,word2vec・GloVe(2.1時代)が登場して以降,途中から「RNNLMやseq2seq内の入力層に単語埋め込み層も統合しておき,全体をファイン・チューニングする」という流れになった.
2.1 Word2vec・GloVe時代
3層MLPのWord2Vec (単語分散表現の代表モデル)が提案され,単語ベクトル表現の強さが認知されはじめた.word2vecは,前後N個の単語間の予測関係を,教師なし学習した3層MLPに学習した結果得られる,中間層の埋め込み表現ベクトルである.また,Word2Vecの直後に提案されたSocher・Manning氏らによるGloVeも,良い改善案として広く普及した.これらのニューラルネット型の単語分散モデル(word2vec, GloVe, fastTextなど)が,様々なNLPタスクで使用され定着していった.
Word2VecやGloVeは,RNN言語モデルとは別に学習しておき,独立したモデルとして使用していた.つまりword2vecやGloVeは,学習後にタスクごとに精密調整することはなく,パラメータは固定して,様々なタスクで使用していた.また,言語モデルと結合してEnd-to-End学習したりもしなかったのである.
2.2 「単語埋込みも含めたEnd-to-End精密調整」へと変化
2.2.1 言語モデルの状況:seq2seqとアテンション登場した頃
2013~2014年頃,各種NLPタスク(例:質問回答や機械翻訳)を学習する言語ニューラルネットワークに,LSTM・GRUやRNNLMやseq2seqなどの,系列ネットワークを用いるようになってきた.そして,それらの系列ネットワークへの,各フレームの入力トークン表現を,埋め込み層として,初期値のword2vecやGloveの重みから,ファイン・チューニングすることが定番化してきた.つまりは,単語分散表現が,言語モデルの中の部品として,入力部の「埋め込み層」として取り込まれはじめたわけである.2.1節の時代のような「単語埋め込みモデルと,個別タスク向け言語モデルを,分離して個別に学習する」という従来的アプローチは,ここで過去のものとなった.
この時期,系列対系列変換問題では,seq2seq with attentionが定番化していったが,その際Google NMTの例のように「トークナイザ」の提案・登場に伴い,機械翻訳界隈を皮切りに「単語単位の入力」から「(サブ)トークン単位の入力」へと自然言語処理の入力単位が変化していった.
2.2.2 クロスモーダル問題でも,言語モデル側に埋め込み層を使用
また,TTS(Text-to-Speech)や音声認識など,テキスト-音声間のクロスモーダル処理でもseq2seq with attentionがこの時期の標準的モデルとなっていた.
当時,管理人の慶應時代の担当学生も取り組んでいた「入力側に言語モーダルが来る動画問題設定のVision-Language (例: Video Grounding や Video-Text retrieval)」では,言語モデル側は,LSTMと(モーダル間)アテンションで系列モデリングしていた.したがって,各単語トークン入力を,埋め込み層から入力するのが(Vision-Languageでも)標準的となっていた.
2.3 Transformer登場後
2018, 2019年以降の,TransformerやBERTなどのモダンな自然言語処理モデルでは,「トークン埋め込み層と言語モデルの2つを統合して,いっぺんにスクラッチからの学習を行うモデル」となった.
つまり,ランダム初期値からスクラッチからの学習をして,埋め込み層ごと言語モデル全体をEnd-to-End学習でいっしょくたに学習するのが普通となった.2.2節の時点では,埋込み層の初期値までは,GloVeの学習済み重みで初期化していた.
2.3.1 Transformer・BERTでのトークン埋め込み表現
特に,Transformer・BERTでは「コンテキストにより,各トークンの意味が変化する」というモデリングに変更されていることが,従来の埋め込みの概念と大きく異なる.
2.1の単語分散表現時代や,2.2の途中くらいまでは「単語の意味は1ベクトルだけ=1つの意味だけ」というモデリングであった.それに対し,Transformer登場後は「文脈にそって,各トークンの意味(=トークン表現ベクトルの値)が,随時変化する」というトークン表現の非固定化が主流となった(ただし,学習後も,埋め込み層の重みは固定であり,動的に変化はしない点に注意).
2.3.2 画像入力 Transformerでは埋め込み層は用意できない
ちなみに,ViTやDETRなど,画像認識向けのTransformerでは,各入力は言葉のように離散単語ではないので,あらかじめ辞書化したり,その埋め込みベクトル群のルックアップテーブル(図1)は,用意できない.よって,CNNなどで画像領域を毎回テスト時にEncodingし,毎回トークン表現を用意することになる.
逆に言うと,2.3.1のような言語モデルでは,先にトークン辞書から埋め込みベクトルのルックアップテーブルをつくっておけるので,計算効率的には有利である(もちろん,テーブルに語彙内の全埋め込みベクトルを保持しておく分,メモリは多く消費する).
関連書籍
- 生成Deep Learning ― 絵を描き、物語や音楽を作り、ゲームをプレイする オライリージャパン, 2020/10, David Foster (著), 松田 晃一 (翻訳), 小沼 千絵 (翻訳)
- 6.3.4 埋め込み層
- 6.7 質問回答生成器 (※ この記事とこの6.7をセットで読むと,NLP初心者は一気に理解度が高まるはず)
References
- [Bengio et al., 2000] Bengio, Yoshua, Réjean Ducharme, and Pascal Vincent. “A neural probabilistic language model.” Advances in neural information processing systems 13 (2000).