Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

wordEmbeddingLayer

深層学習ニューラル ネットワーク用の単語埋め込み層

説明

単語埋め込み層は、単語インデックスをベクトルにマッピングします。

単語埋め込み層は深層学習の長短期記憶 (LSTM) ネットワークで使用します。LSTM ネットワークは、再帰型ニューラル ネットワーク (RNN) の一種で、シーケンス データのタイム ステップ間の長期的な依存関係を学習できます。単語埋め込み層は、単語インデックスのシーケンスを埋め込みベクトルにマッピングし、層に学習させるときに単語の埋め込みを学習します。

この層は Deep Learning Toolbox™ を必要とします。

作成

説明

layer = wordEmbeddingLayer(dimension,numWords) は埋め込み次元とボキャブラリ サイズを指定して単語埋め込み層を作成します。

layer = wordEmbeddingLayer(dimension,numWords,Name,Value) は、1 つ以上の名前と値のペアを使用してオプションのプロパティを設定します。各プロパティ名は一重引用符で囲みます。

プロパティ

すべて展開する

単語埋め込み

単語埋め込みの次元。正の整数として指定します。

例: 300

モデル内の単語数。正の整数として指定します。学習データ内の一意の単語の数が NumWords より多い場合、層は out-of-vocabulary の単語を同じベクトルにマッピングします。

R2023b 以降

Out-of-vocabulary の単語処理モード。次の値のいずれかとして指定します。

  • "map-to-last" — out-of-vocabulary の単語を Weights の最後の埋め込みベクトルにマッピングする。

  • "error" — 層が out-of-vocabulary の単語を受け取るときにエラーをスローする。このオプションは、その語彙に out-of-vocabulary トークンを既にもっているモデル (BERT など) に使用します。

パラメーターと初期化

重みを初期化する関数。次のいずれかとして指定します。

  • 'narrow-normal' – 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、重みを初期化します。

  • 'glorot' – Glorot 初期化子[1] (Xavier 初期化子とも呼ばれる) を使用して重みを初期化します。Glorot 初期化子は、平均 0、分散 2/(numIn + numOut) の一様分布から個別にサンプリングを行います。ここで、numIn = NumWords + 1 および numOut = Dimension です。

  • 'he' – He 初期化子[2]を使用して重みを初期化します。He 初期化子は、平均 0、分散 2/numIn の正規分布からサンプリングを行います。ここで、numIn = NumWords + 1 です。

  • 'orthogonal' – 直交行列 Q を使用して入力の重みを初期化します。この直交行列は、単位正規分布からサンプリングされた乱数行列 Z に対する Z = QR の QR 分解によって与えられます。[3]

  • 'zeros' – 0 で重みを初期化します。

  • 'ones' – 1 で重みを初期化します。

  • 関数ハンドル – カスタム関数で重みを初期化します。関数ハンドルを指定する場合、関数は weights = func(sz) という形式でなければなりません。ここで、sz は重みのサイズです。

Weights プロパティが空の場合、層は重みのみを初期化します。

データ型: char | string | function_handle

層の重み。DimensionNumWords 列の配列または Dimension 行 (NumWords+1) 列の配列として指定します。

WeightsDimensionNumWords 列の配列の場合、関数 trainNetwork を使用してネットワークに学習させるとき、または dlnetwork オブジェクトを初期化するときに、ボキャブラリ外の入力に対して追加の列が自動的に追加されます。

入力整数 iNumWords 以下の場合、層はベクトル Weights(:,i) を出力します。それ以外の場合、層は出力をベクトル Weights(:,NumWords+1) にマッピングします。

学習率と正則化

重みの学習率係数。非負のスカラーとして指定します。

この係数にグローバル学習率が乗算されて、この層の重みの学習率が決定されます。たとえば、WeightLearnRateFactor2 の場合、この層の重みの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions (Deep Learning Toolbox) を使用して指定した設定に基づいて、グローバル学習率が決定されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

重みの L2 正則化係数。非負のスカラーとして指定します。

この係数にグローバル L2 正則化係数が乗算されて、この層の重みの L2 正則化係数が決定されます。たとえば、WeightL2Factor2 の場合、この層の重みの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions (Deep Learning Toolbox) を使用して指定できます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

層の名前。文字ベクトルまたは string スカラーとして指定します。Layer 配列入力の場合、関数 trainnet (Deep Learning Toolbox)trainNetwork (Deep Learning Toolbox)assembleNetwork (Deep Learning Toolbox)layerGraph (Deep Learning Toolbox) および dlnetwork (Deep Learning Toolbox) は、名前が "" の層に自動的に名前を割り当てます。

WordEmbeddingLayer オブジェクトは、このプロパティを文字ベクトルとして保存します。

データ型: char | string

この プロパティ は読み取り専用です。

層への入力の数。1 として返されます。この層は単一の入力のみを受け入れます。

データ型: double

この プロパティ は読み取り専用です。

入力名。{'in'} として返されます。この層は単一の入力のみを受け入れます。

データ型: cell

この プロパティ は読み取り専用です。

層からの出力の数。1 として返されます。この層には単一の出力のみがあります。

データ型: double

この プロパティ は読み取り専用です。

出力名。{'out'} として返されます。この層には単一の出力のみがあります。

データ型: cell

すべて折りたたむ

埋め込み次元 300、単語数 5000 の単語埋め込み層を作成します。

layer = wordEmbeddingLayer(300,5000)
layer = 
  WordEmbeddingLayer with properties:

         Name: ''
      OOVMode: 'map-to-last'

   Hyperparameters
    Dimension: 300
     NumWords: 5000

   Learnable Parameters
      Weights: []

Use properties method to see a list of all properties.

LSTM ネットワークに単語埋め込み層を含めます。

inputSize = 1;
embeddingDimension = 300;
numWords = 5000;
numHiddenUnits = 200;
numClasses = 10;

layers = [
    sequenceInputLayer(inputSize)
    wordEmbeddingLayer(embeddingDimension,numWords)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  6x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 1 dimensions
     2   ''   Word Embedding Layer    Word embedding layer with 300 dimensions and 5000 unique words
     3   ''   LSTM                    LSTM with 200 hidden units
     4   ''   Fully Connected         10 fully connected layer
     5   ''   Softmax                 softmax
     6   ''   Classification Output   crossentropyex

事前学習済みの単語埋め込みからの重みを使用して深層学習ネットワークの単語埋め込み層を初期化するには、関数 word2vec を使用して層の重みを抽出し、関数 wordEmbeddingLayer の名前と値のペア 'Weights' を設定します。単語埋め込み層が必要とするのは単語ベクトルの列であるため、関数 word2vec の出力は転置しなければなりません。

emb = fastTextWordEmbedding;

words = emb.Vocabulary;
dimension = emb.Dimension;
numWords = numel(words);

layer = wordEmbeddingLayer(dimension,numWords,...
    'Weights',word2vec(emb,words)')
layer = 
  WordEmbeddingLayer with properties:

         Name: ''

   Hyperparameters
    Dimension: 300
     NumWords: 999994

   Learnable Parameters
      Weights: [300×999994 single]

  Show all properties

単語埋め込みから対応する単語符号化を作成するには、単語埋め込みボキャブラリを単語のリストとして関数 wordEncoding に入力します。

enc = wordEncoding(words)
enc = 
  wordEncoding with properties:

      NumWords: 999994
    Vocabulary: [1×999994 string]

参照

[1] Glorot, Xavier, and Yoshua Bengio. "Understanding the Difficulty of Training Deep Feedforward Neural Networks." In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, 249–356. Sardinia, Italy: AISTATS, 2010. https://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf

[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In 2015 IEEE International Conference on Computer Vision (ICCV), 1026–34. Santiago, Chile: IEEE, 2015. https://doi.org/10.1109/ICCV.2015.123

[3] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. "Exact Solutions to the Nonlinear Dynamics of Learning in Deep Linear Neural Networks.” Preprint, submitted February 19, 2014. https://arxiv.org/abs/1312.6120.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2018b で導入

すべて展開する