Keras:在文本数据上使用fit_generator()的Tokenizer

时间:2017-03-03 00:10:42

标签: python keras

我正在使用keras在非常大的文本数据集上创建神经网络。为了构建模型并确保一切正常,我将一小部分数据读入内存,并使用内置的keras'Tokenizer'来执行必要的预处理工作,包括将每个单词映射到一个令牌。然后,我使用model.fit()。

现在,我想扩展到完整数据集,并且没有空间将所有数据读入内存。所以,我想创建一个生成器函数来顺序从磁盘读取数据,并使用model.fit_generator()。但是,如果我这样做,那么我会在每批数据上单独调整Tokenizer对象,为每个批次提供不同的单词到令牌映射。有没有办法解决?有什么办法可以用keras连续构建一个令牌字典吗?

1 个答案:

答案 0 :(得分:3)

所以基本上你可以用以下方式定义文本生成器并将其提供给fit_on_text方法:

  1. 假设您有texts_generator部分从磁盘读取数据并返回可迭代的文本集合,您可以定义:

    def text_generator(texts_generator):
        for texts in texts_generator:
            for text in texts:
                yield text
    

    请注意,在从磁盘读取整个数据后,应使此发生器停止 - 有可能使您更改要在model.fit_generator中使用的原始生成器

  2. 从1开始生成生成器后,您可以通过以下方式应用tokenizer.fit_on_text方法:

    tokenizer.fit_on_text(text_generator)