【问题标题】:Keras' Tokenizer vs sklearn's CountVectorizerKeras 的 Tokenizer 与 sklearn 的 CountVectorizer
【发布时间】:2021-02-23 16:57:53
【问题描述】:

我有一大堆原始文本文档。

我不确定是使用 keras.text_preprocessing.Tokenizer 还是 sklearn.feature_extraction.text.CountVectorizer。任何想法,建议?哪个更快?他们有什么我可能遗漏的主要区别吗?

谢谢

【问题讨论】:

  • 你可以继续keras.text_preprocessing.Tokenizer。这样你也可以扩展你的结构。

标签: machine-learning nlp


【解决方案1】:

这取决于您的目标和您的机器。

如果您有几个 CPU 和/或 GPU,那么keras 可以利用它们并运行得更快。另一方面,scikit-learn 方法有更多的选择,例如它们可以找到 ngram,而keras.text_preprocessing.Tokenizer 的参数更少。

【讨论】:

    【解决方案2】:

    回答有点晚了,但过去几周我一直在研究这个问题。

    简短的回答是,两种方法都应该产生相同数量的词汇(标记词)。因此,如果 CountVectorizer 生成与其对等项 Keras Tokenizer 不同数量的标记化词(语料库词汇),这也是成功的衡量标准。我写了几行来检查两种方法之间的结果。基本上,我实现了这两种方法并比较了它们的结果。

    根据经验,如果它们产生相同的结果,我建议您自己做同样的事情。请记住将 CounterVectorizer 保留在其默认参数上,并且不要使用 min_dfmax_df 参数过滤掉不频繁或频繁的标记。所以做类似的事情

    def corpus_split(s):
        return s.split(' ')
    c_vectorizer=CountVectorizer(tokenizer=corpus_split, max_df=1.0, min_df=1)
    

    这将帮助您比较结果,因为 Keras Tokenizer 默认情况下会考虑您文本的所有标记。

    现在关于时间效率问题,我没有具体的见解可以告诉你。我的建议是两者都试一下,自己看看。这两种方法的实现都可以在网上找到。

    希望我对你有帮助,也希望其他会注意到这个问题的人。

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 2017-03-10
      • 2018-02-04
      • 2021-07-17
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      相关资源
      最近更新 更多