我在deeplearning4j中使用了word2ve来训练向量,但结果不稳定

时间:2015-09-15 13:30:59

标签: java word2vec

1.我正在使用IntelliJ IDEA构建一个maven项目。代码如下:

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

    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'和'night'之间相似性的余弦值,有时结果高达0.98,有时低至0.5。

以下是两个实验的结果:

Evaluate model....
Similarity between day and night: 0.8252374529838562
Evaluate model....
Similarity between day and night: 0.5550910234451294

为什么结果是这样的?我刚刚开始学习word2vec,有很多东西都没有被理解,我希望老年人可以帮助我。

1 个答案:

答案 0 :(得分:0)

您使用的是0.4示例吗?

如果没有,请查看这个W2V:

github.com/deeplearning4j/dl4j-0.4-examples

您可以运行具有不同随机初始化权重的示例,但不同的随机初始化可能会导致不同的结果。

每次运行时,您可以使用相同的随机初始权重为该模型添加一个附加参数:.seed(x),其中x是42之类的数字。