メインコンテンツ

trainWordEmbedding

単語埋め込みの学習

説明

emb = trainWordEmbedding(filename) は、テキスト ファイル filename に格納されている学習データを使用して単語埋め込みの学習を行います。このファイルは、UTF-8 で保存された文書の集合体であり、1 行に 1 つの文書が記述され、単語は空白で区切られています。

emb = trainWordEmbedding(documents) は、documents を使用して単語埋め込みの学習を行います。その際、writeTextDocument を使用して一時ファイルを作成し、その一時ファイルを使用して埋め込みの学習を行います。

emb = trainWordEmbedding(___,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して、追加のオプションを指定します。たとえば、'Dimension',50 は、単語埋め込みの次元を 50 に指定します。

すべて折りたたむ

サンプル テキスト ファイル sonnetsPreprocessed.txt を使用して、次元 100 の単語埋め込みの学習を行います。このファイルには、シェイクスピアのソネット集の前処理されたバージョンが格納されており、1 行に 1 つのソネットが含まれ、単語がスペースで区切られています。

filename = "sonnetsPreprocessed.txt";
emb = trainWordEmbedding(filename)
Training: 100% Loss: 3.21475  Remaining time: 0 hours 0 minutes.
emb = 
  wordEmbedding with properties:

     Dimension: 100
    Vocabulary: ["thy"    "thou"    "love"    "thee"    "doth"    "mine"    "shall"    "eyes"    "sweet"    "time"    "nor"    "beauty"    "yet"    "art"    "heart"    "o"    "thine"    "hath"    "fair"    "make"    "still"    …    ] (1×401 string)

tsne を使用して、テキスト散布図で単語埋め込みを表示します。

words = emb.Vocabulary;
V = word2vec(emb,words);
XY = tsne(V);
textscatter(XY,words)

Figure contains an axes object. The axes object contains an object of type textscatter.

サンプル データ sonnetsPreprocessed.txt を使用して単語埋め込みの学習を行います。このファイルには、シェイクスピアのソネット集の前処理されたバージョンが格納されています。ファイルには、1 行に 1 つのソネットが含まれ、単語がスペースで区切られています。sonnetsPreprocessed.txt からテキストを抽出し、テキストを改行文字で文書に分割した後、文書をトークン化します。

filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);

trainWordEmbedding を使用して単語埋め込みに学習させます。

emb = trainWordEmbedding(documents)
Training: 100% Loss: 2.69799  Remaining time: 0 hours 0 minutes.
emb = 
  wordEmbedding with properties:

     Dimension: 100
    Vocabulary: ["thy"    "thou"    "love"    "thee"    "doth"    "mine"    "shall"    "eyes"    "sweet"    "time"    "nor"    "beauty"    "yet"    "art"    "heart"    "o"    "thine"    "hath"    "fair"    "make"    "still"    …    ] (1×401 string)

tsne を使用して、テキスト散布図で単語埋め込みを可視化します。

words = emb.Vocabulary;
V = word2vec(emb,words);
XY = tsne(V);
textscatter(XY,words)

Figure contains an axes object. The axes object contains an object of type textscatter.

サンプル データを読み込みます。ファイル sonnetsPreprocessed.txt には、シェイクスピアのソネット集の前処理されたバージョンが格納されています。ファイルには、1 行に 1 つのソネットが含まれ、単語がスペースで区切られています。sonnetsPreprocessed.txt からテキストを抽出し、テキストを改行文字で文書に分割した後、文書をトークン化します。

filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);

単語埋め込みの次元を 50 に指定します。モデルによって破棄される単語の数を減らすために、'MinCount' を 3 に設定します。より長い時間学習させるために、エポック数を 10 に設定します。

emb = trainWordEmbedding(documents, ...
    'Dimension',50, ...
    'MinCount',3, ...
    'NumEpochs',10)
Training: 100% Loss: 3.14595  Remaining time: 0 hours 0 minutes.
emb = 
  wordEmbedding with properties:

     Dimension: 50
    Vocabulary: ["thy"    "thou"    "love"    "thee"    "doth"    "mine"    "shall"    "eyes"    "sweet"    "time"    "nor"    "beauty"    "yet"    "art"    "heart"    "o"    "thine"    "hath"    "fair"    "make"    "still"    …    ] (1×750 string)

tsne を使用して、テキスト散布図で単語埋め込みを表示します。

words = emb.Vocabulary;
V = word2vec(emb, words);
XY = tsne(V);
textscatter(XY,words)

Figure contains an axes object. The axes object contains an object of type textscatter.

入力引数

すべて折りたたむ

ファイルの名前。string スカラー、文字ベクトル、または文字ベクトルを含む 1 行 1 列の cell 配列として指定します。

データ型: string | char | cell

入力文書。tokenizedDocument 配列として指定します。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: 'Dimension',50 は、単語埋め込みの次元を 50 に指定します。

単語埋め込みの次元。'Dimension' と非負の整数で構成されるコンマ区切りのペアとして指定します。

例: 300

コンテキスト ウィンドウのサイズ。'Window' と非負の整数で構成されるコンマ区切りのペアとして指定します。

例: 10

モデル。'Model''skipgram' (スキップ グラム) または 'cbow' (continuous bag-of-words) で構成されるコンマ区切りのペアとして指定します。

例: 'cbow'

単語破棄率を決定するための係数。'DiscardFactor' と正のスカラー値で構成されるコンマ区切りのペアとして指定します。関数は、入力ウィンドウから単語を確率 1-sqrt(t/f) - t/f で破棄します。ここで、f はその単語のユニグラム確率、tDiscardFactor です。通常、DiscardFactor1e-31e-5 の範囲内です。

例: 0.005

損失関数。'LossFunction''ns' (ネガティブ サンプリング)、'hs' (階層型ソフトマックス)、または 'softmax' (ソフトマックス) で構成されるコンマ区切りのペアとして指定します。

例: 'hs'

ネガティブ サンプリング損失関数のネガティブ サンプルの数。'NumNegativeSamples' と正の整数で構成されるコンマ区切りのペアとして指定します。このオプションは、LossFunction'ns' の場合にのみ有効です。

例: 10

学習のエポック数。'NumEpochs' と正の整数で構成されるコンマ区切りのペアとして指定します。

例: 10

埋め込みに含める単語の最小カウント数。'MinCount' と正の整数で構成されるコンマ区切りのペアとして指定します。関数は、学習データにおいて出現回数が MinCount 回未満の単語をボキャブラリから破棄します。

例: 10

サブワード n-gram の包含範囲。'NGramRange' と 2 つの非負整数のベクトル [min max] で構成されるコンマ区切りのペアとして指定します。n-gram を使用したくない場合は、'NGramRange'[0 0] に設定します。

例: [5 10]

初期学習率。'InitialLearnRate' と正のスカラーで構成されるコンマ区切りのペアとして指定します。

例: 0.01

学習率を更新する頻度。'UpdateRate' と正の整数で構成されるコンマ区切りのペアとして指定します。学習率は、単語 N 個ごとに、段階的にゼロへと線形に減少します (ここで、NUpdateRate)。

例: 50

詳細レベル。'Verbose' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 0 – 詳細な出力を表示しない。

  • 1 – 進捗状況を表示する。

例: 'Verbose',0

出力引数

すべて折りたたむ

出力の単語埋め込み。wordEmbedding オブジェクトとして返されます。

詳細

すべて折りたたむ

ヒント

学習アルゴリズムは、関数 maxNumCompThreads で与えられるスレッド数を使用します。MATLAB® で使用されるスレッド数を変更する方法については、maxNumCompThreads を参照してください。

参照

[1] Bojanowsku, P., E. Grave, A. Joulin, T. Mikolov. "Enriching Word Vectors with Subword Information." Transactions of the Association for Computational Linguistics 5 135-146, 2017. https://doi.org/10.1162/tacl_a_00051.

バージョン履歴

R2017b で導入