1.我使用IntelliJ IDEA构建一个maven项目,代码如下:
System.out.println("Load data....");
SentenceIterator iter = new LineSentenceIterator(new File("/home/zs/programs/deeplearning4j-master/dl4j-test-resources/src/main/resources/raw_sentences.txt"));
iter.setPreProcessor(new SentencePreProcessor() {
@Override
return sentence.toLowerCase();
}
});
System.out.println("Build model....");
int batchSize = 1000;
int iterations = 30;
int layerSize = 300;
com.sari.Word2Vec vec= new com.sari.Word2Vec.Builder()
.batchSize(batchSize) //# words per minibatch.
.sampling(1e-5) // negative sampling. drops words out
.minWordFrequency(5) //
.useAdaGrad(false) //
.layerSize(layerSize) // word feature vector size
.iterations(iterations) // # iterations to train
.learningRate(0.025) //
.minLearningRate(1e-2) // learning rate decays wrt # words. floor learning
.negativeSample(10) // sample size 10 words
.iterate(iter) //
.tokenizerFactory(tokenizer)
.build();
vec.fit();
System.out.println("Evaluate model....");
double cosSim = vec.similarity("day" , "night");
System.out.println("Similarity between day and night: "+cosSim);
此代码引用了deeplearning4j中的word2vec,但结果不稳定。每个实验的结果都有很大不同。例如,使用' day'和&#39之间相似性的余弦值;晚上',有时结果高达0.98,有时低至0.4?
以下是两次实验的结果
Evaluate model....
Similarity between day and night: 0.706292986869812
Evaluate model....
Similarity between day and night: 0.5550910234451294
为什么结果会像这样。因为我刚刚开始学习word2vec,有很多知识不被理解,我希望老年人可以帮助我,谢谢!
答案 0 :(得分:1)
您已设置以下行:
.minLearningRate(1e-2) // learning rate decays wrt # words. floor learning
但这是一个非常高的学习率。高学习率导致模型在任何状态下都不“稳定”,而是一些更新显着改变了学习的表示。在最初的几次更新中,这不是问题,但对收敛不利。
解决方案: 允许学习率下降。 您可以完全保留此行,或者必须使用更合适的值,例如1e-15