【问题标题】:Keras: Tokenizer with fit_generator() on text dataKeras:文本数据上带有 fit_generator() 的分词器
【发布时间】:2017-07-22 22:36:28
【问题描述】:

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

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

【问题讨论】:

  • 1) 显示一些您当前正在做的事情的代码。 2)为什么不将预处理任务分开,将映射对象保存在硬盘上,然后在批量生成时进行转换?

标签: python keras


【解决方案1】:

所以基本上你可以定义一个文本生成器并通过以下方式将其提供给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)
    

【讨论】:

  • 谢谢,我没有想到将生成器传递给“fit_on_texts”方法本身。我会试试这个,让你知道它是如何工作的。
  • 我检查过它应该可以工作。请注意,生成器应该在某个时刻停止。
  • @MarcinMożejko 感谢您的解决方案!我想澄清一下,当我们实际调用text_generator?我们这里有两个生成器吗?一张给fit_generator,一张给fit_on_text?
猜你喜欢
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 2019-11-13
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多