2017-10-04 5 views
0

ユニークワードの総数が10億を超える場合、word2vecアルゴリズムで設定する最適なベクターサイズはどれくらいですか?Word2Vecベクトルサイズとスキャンされた総ワード数の関係は?

私はword2vec用にApache Spark Mllib 1.6.0を使用しています。

サンプルコードは: - あなたが300次元に到達するまで、あなたはベクトルの大きさを増やすよう

public class Main {  
     public static void main(String[] args) throws IOException { 

     SparkConf conf = new SparkConf().setAppName("JavaWord2VecExample"); 
     conf.setMaster("local[*]"); 
     JavaSparkContext jsc = new JavaSparkContext(conf); 
     SQLContext sqlContext = new SQLContext(jsc); 

     // $example on$ 
     // Input data: Each row is a bag of words from a sentence or document. 
     JavaRDD<Row> jrdd = jsc.parallelize(Arrays.asList(
      RowFactory.create(Arrays.asList("Hi I heard about Spark".split(" "))), 
      RowFactory.create(Arrays.asList("Hi I heard about Java".split(" "))), 
      RowFactory.create(Arrays.asList("I wish Java could use case classes".split(" "))), 
      RowFactory.create(Arrays.asList("Logistic regression models are neat".split(" "))) 
     )); 
     StructType schema = new StructType(new StructField[]{ 
      new StructField("text", new ArrayType(DataTypes.StringType, true), false, Metadata.empty()) 
     }); 
     DataFrame documentDF = sqlContext.createDataFrame(jrdd, schema); 

     // Learn a mapping from words to Vectors. 
     Word2Vec word2Vec = new Word2Vec() 
      .setInputCol("text") 
      .setOutputCol("result") 
      .setVectorSize(3) // What is the optimum value to set here 
      .setMinCount(0); 
     Word2VecModel model = word2Vec.fit(documentDF); 
     DataFrame result = model.transform(documentDF); 
     result.show(false); 
     for (Row r : result.select("result").take(3)) { 
     System.out.println(r); 
     } 
     // $example off$ 
     } 
} 

答えて

0

調査によると、ベクトル表現のための品質が向上します。 300次元の後、ベクトルの品質が低下し始めます。さまざまなベクトルと語彙サイズの分析を見つけることができますhere(SGがWord2Vecの背後にあるモデルであるSkip Gramモデルを参照する表2を参照)。

ベクターサイズの選択は、計算能力にもよるが、300がおそらく最も信頼性の高いベクトルであるにもかかわらず、マシンのベクトル計算が遅すぎるとサイズを小さくする必要があるかもしれない。

0

答えはありません。データセットと目標によって異なります。

ワードベクタの次元数サイズの一般的な値は、元の論文のいくつかで好まれる値に基づいて300-400です。

しかし、プロジェクト固有の定量的品質スコアを作成するのが最善の方法です。目的のアプリケーションでうまくいく単語ベクトルですか?他のメタパラメータと同様にsizeを最適化します。

これとは別に、10億語の語彙である10億語のユニークな単語トークンがあれば、典型的なシステム環境でこれらのベクトルを育成することは難しくなります。 (10億ワードのトークンはGoogleの300万ベクトルのデータセットの333倍です)

10億の300次元ワードベクトルには、10億* 300浮動小数点数* 4バイト/浮動小数点数= 1.2が必要ですトレーニング中に生のベクトルを格納するためのアドレス可能なメモリ(本質的にはRAM)のTB。 (ニューラルネットワークは、トレーニング中の出力ウェイトと他の支援構造との間にさらに1.2TBを必要とする。)

関連して、非常に少ない出現数の単語は、それらのわずかな文脈から高品質の単語ベクトルを得ることができない近くの言葉の訓練を妨げます。したがって、最小数が0であることは決して良い考えではありません。そして、より低頻度の単語を投げ捨てることは、トレーニングのスピードを速め、メモリ要件を低くし、残りの単語の品質を向上させる傾向があります。

関連する問題