分段训练贝叶斯分类器(NLTK)

分段训练贝叶斯分类器(NLTK),nltk,bayesian,text-classification,Nltk,Bayesian,Text Classification,我有很多文本数据,我想进行分类。我通过数据块(例如,500个示例)递增地获取这些数据。 我想用这些块在NLTK中进行训练,但要进行逐段训练 我可以用一个卡盘进行分类训练,然后用它训练下一个块等吗 我在文档中找不到这个问题的答案。我可以想到两个选项: 根据新数据定期重新训练分类器。你会 在语料库中积累新的训练数据(已包含 原始训练数据),然后每当你得到下一块, 重新训练并重新加载分类器。这可能是最简单的 解决方案 外部化内部模型,然后手动更新。这个 NaiveBayesClassifier可以通过

我有很多文本数据,我想进行分类。我通过数据块(例如,500个示例)递增地获取这些数据。 我想用这些块在NLTK中进行训练,但要进行逐段训练

我可以用一个卡盘进行分类训练,然后用它训练下一个块等吗


我在文档中找不到这个问题的答案。

我可以想到两个选项:

  • 根据新数据定期重新训练分类器。你会 在语料库中积累新的训练数据(已包含 原始训练数据),然后每当你得到下一块, 重新训练并重新加载分类器。这可能是最简单的 解决方案

  • 外部化内部模型,然后手动更新。这个
    NaiveBayesClassifier
    可以通过给它一个
    label\u prodist
    功能\u probdist
    。你可以创建这些 分别将它们传递到
    NaiveBayesClassifier
    ,然后更新 每当有新的数据出现时,他们都会发出警告。分类器将使用这个新的 立即收集数据。你得看看火车的具体方法 关于如何更新特定对象的概率分布 案例/需求


  • 如果您使用选项2,您不介意为了水平可伸缩性而牺牲一点速度,您可以通过创建一个使用Redis散列进行存储/查找的
    ProbDistI
    子类,在Redis中持久化模型。然后,您不必对语料库进行任何酸洗,并且分类器始终处于“打开”状态。

    您可能应该使用用于scikit学习的NLTK包装器,并使用scikit学习提供的朴素贝叶斯实现。这一个支持进行部分拟合,这正是您想要的:一次只训练一部分数据


    参考资料:Weka有一个可更新的Naive Bayes实现。

    分段训练是什么意思?例如:首先,我只有500个训练数据样本,但过一段时间后,我会有另一个(新的)500个训练数据样本等。但我不想等待,因为我得到了所有的数据(因为它在时间和内存空间上都很昂贵)。所以,我想用一块数据来训练分类器,经过一段时间用于训练下一块数据等。这看起来很相关:但我希望看到一个真正的python实现,尽管=)这个答案几乎没有细节。你能详细介绍一下吗?