如何清除DeepLearning4j Word2Vec中的vocab缓存,以便每次都对其进行重新培训

时间:2018-09-24 02:36:18

标签: java neural-network word2vec deeplearning4j

先谢谢了。 我正在DeepLearning4j中使用Word2Vec。

如何清除Word2Vec中的vocab缓存。这是因为每次重新加载Word2Vec时,我都希望它在一组新的单词模式上进行重新训练。就目前而言,尽管更改了输入训练文件,但似乎以前的一组单词模式的词汇仍然存在,并且得到相同的结果。

我尝试重置模型,但是它不起作用。代码:-

Word2Vec vec =新的Word2Vec.Builder()                 .minWordFrequency(1)                 .iterations(1)                 .layerSize(4)                 .seed(1)                 .windowSize(1)                 .iterate(iter)                 .tokenizerFactory(t)              .resetModel(true)              .limitVocabularySize(1)              .build();

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

如果您想重新训练(这称为 training ),我了解您只是想完全忽略先前学习的模型(词汇,单词向量等)。为此,您应该创建另一个Word2Vec对象,并使其适合新数据。您应该为 SentenceIterator Tokenizer 类使用其他实例。您的问题可能是更改输入训练文件的方式。

如果只更改 SentenceIterator ,即:

SentenceIterator iter = new CollectionSentenceIterator(DataFetcher.getFirstDataset());
Word2Vec vec = new Word2Vec.Builder()
            .iterate(iter)
            ....
            .build();

vec.fit();

vec.wordsNearest("clear", 10); // you will see results from first dataset

SentenceIterator iter2 = new CollectionSentenceIterator(DataFetcher.getSecondDataset());
vec =  new Word2Vec.Builder()
    .iterate(iter2)
    ....
    .build();

vec.fit();

vec.wordsNearest("clear", 10); // you will see results from second dataset, without any first dataset implication

如果您运行两次代码,并且在两次执行之间更改了输入数据(比如说A,然后是B),那么您应该不会得到相同的结果。如果是这样,则意味着您的模型使用输入数据A和B学习了相同的东西。

如果要更新训练(这称为推断),我的意思是使用先前学习的模型和新数据来更新此模型,那么您应该使用dl4j示例中的this example