パフォーマンスの観点からの単語埋め込みアルゴリズム


11

6000万のフレーズをベクトル空間に埋め込み、それらの間のコサイン類似度を計算しようとしています。CountVectorizerユニグラムとバイグラムを生成するカスタムビルドのトークナイザー関数でsklearnを使用してきました。意味のある表現を得るには、行数に比例した膨大な数の列を許可する必要があることがわかります。これは、非常にまばらな行列につながり、パフォーマンスを低下させます。約10,000列しかなかったとしてもそれほど悪くはありません。これは、単語の埋め込みにはかなり妥当だと思います。

私はword2vecそれがはるかに低次元でより高密度の埋め込みを生成すると確信しているので、Googleを使用しようと考えています。しかしその前に、最初に見ておくべき他の埋め込みがありますか?重要な要件は、約6,000万のフレーズ(行)をスケーリングできることです。

私は単語埋め込みの分野にかなり慣れていないので、アドバイスがあれば助かります。

また、パフォーマンスを向上させるために、特異値分解をすでに使用していることも付け加えておきます。


Sparkを使用していますか?
エリアサ

1
それが最初にSparkを提案した理由の1つです。すみません、電話中です。事前に埋め込むPCAテクニックに関するリファレンスは一切ありません。
eliasah 2015

1
それだけの量のデータがあふれているのかどうかはわかりません。
eliasah 2015

1
テキストを操作しているので、余分なトークンを削除しても、次元が大幅に減少することはありません。150000語の辞書を考えると、例ごとにストップワードを削除すると、数十のメリットがあります。それは役に立ちません。
eliasah 2015

1
そうでない場合は、潜在的なディリクレ割り当てを使用してモデリングするトピックを検討して、フレーズあたりのテキストのベクトルサイズを小さくすることができます。
eliasah

回答:


3

最近ボルツマンマシンを使用して動的にword2vec(スキップグラム)ディメンションを割り当てる作業がいくつかあります。このペーパーをチェックしてください:

「無限次元の単語埋め込み」-Nalsnick、Ravi

基本的な考え方は、トレーニングセットにword2vecモデルの次元を指示させることです。これは、次元サイズに関連する正則化項によってペナルティが課されます。

上記の論文はこれを単語に対して行っていますが、これがフレーズでどれだけうまく機能するかを知りたいと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.