2017-10-04 14 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) 학습 중에 원시 벡터를 저장하기위한 TB의 주소 지정 가능 메모리 (본질적으로 RAM). (신경망은 훈련 중 출력 가중치와 다른 지원 구조에 대해 또 다른 1.2TB를 필요로합니다.)

관련하여 매우 적은 수의 어구는 그 몇 가지 문맥에서 우수한 단어 벡터를 얻을 수 있지만 가까운 단어의 훈련을 방해합니다. 따라서 최소 수는 0이 결코 좋은 생각이 아니며 더 낮은 빈도 단어를 버리면 훈련 속도가 빨라지고 메모리 요구 사항이 낮아지고 나머지 단어의 품질이 향상됩니다.