言語的規則性
それでは、手袋の埋め込みがどのように機能するかを調べてみましょう。 一般的に知られているように、word2vecの単語ベクトルは多くの言語的規則性をキャプチャします。 正規の例を与えるために、単語”paris”、”france”、および”germany”の単語ベクトルを取得し、次の操作を実行すると、次のようになります:
\
結果のベクトルは”berlin”
のベクトルに近くなります。word2vecのデモとして使用されているのと同じWikipediaデータをダウンロードしてみましょう:
次のステップでは、単語ベクトルを学習したい単語のセットである語彙を作成します。 生のテキストデータを操作するtext2vecのすべての関数は、次のようになります(create_vocabulary
, create_corpus
, create_dtm
, create_tcm
) ストリーミングAPIを持っており、これらの関数の最初の引数としてトークンを反復処理する必要があります。
これらの言葉はあまり珍しいことではありません。 Fot例コーパス全体で一度だけ見た単語の意味のある単語ベクトルを計算することはできません。 ここでは、少なくとも5回表示される単語のみを取り上げます。 text2vecには、語彙をフィルタリングする追加オプションがあります(?prune_vocabulary
参照)。
これで、語彙に71,290の用語があり、用語共出現行列(TCM)を構築する準備が整いました。
今、私たちはTCM行列を持っており、手袋アルゴリズムを介してそれを因数分解することができます。
text2vecは、並列確率的勾配降下アルゴリズムを使用します。 デフォルトでは、マシン上のすべてのコアが使用されますが、必要に応じてコアの数を指定できます。
私たちのモデルに合わせてみましょう。 (それは合うために数分かかることができます!)
## INFO epoch 1, loss 0.1755 ## INFO epoch 2, loss 0.1228 ## INFO epoch 3, loss 0.1085 ## INFO epoch 4, loss 0.1005 ## INFO epoch 5, loss 0.0954 ## INFO epoch 6, loss 0.0918 ## INFO epoch 7, loss 0.0890 ## INFO epoch 8, loss 0.0869 ## INFO epoch 9, loss 0.0851 ## INFO epoch 10, loss 0.0837
## 71290 50
モデルは2組の単語ベクトル-mainとcontextを学習することに注意してください。 モデルは対称であるため、本質的にそれらは同じです。 私たちの経験から、二組の単語ベクトルを学ぶことは、より高品質の埋め込みにつながります。 GloVeモデルは「分解」モデルです(mlapiDecomposition
-入力行列を2つの低ランク行列に分解するモデルの汎用クラスを継承します)。 したがって、他のmlapiDecomposition
モデルと同等の第二の低ランク行列(コンテキストワードベクトル)は、components
フィールドで利用可能です:
## 50 71290
mlapiDecomposition
から継承するすべてのモデルと同様に、変換された行列はnrow = nrow(input)
、ncol = rank
を持ち、2番目のcomponent
行列はnrow = rank
、ncol = ncol(input)
を持つことに注意してください。
両方の単語ベクトル行列を結果として使用できますが、通常はメインベクトルとコンテキストベクトルの合計を平均化または取る方が良い(GloVe paper:
## paris berlin munich germany versailles ## 0.7724678 0.7156243 0.6962157 0.6381500 0.6170311
skip_grams_window
とGloVe
クラスのパラメータ(単語ベクトルのサイズと反復回数を含む)を試すことで、より良い結果を得ることができます。 Wikipediaのデータの詳細と大規模な実験については、私のブログのこの古い記事を参照してください。