【问题标题】:Mallet CRF SimpleTagger Performance TuningMallet CRF SimpleTagger 性能调优
【发布时间】:2011-07-24 11:53:49
【问题描述】:

任何使用 Java 库 Mallet 的 SimpleTagger 类的条件随机字段 (CRF) 的人的问题。假设我已经在使用多线程选项来获得可用的最大 CPU 数量(就是这种情况):我将从哪里开始,如果我需要它运行得更快,我应该尝试哪些事情?

一个相关的问题是,是否有一种方法可以做类似于随机梯度下降的事情,从而加快训练过程?

我想做的训练类型很简单:

Input:
Feature1 ... FeatureN SequenceLabel
...

Test Data:
Feature1 ... FeatureN
...

Output:

Feature1 ... FeatureN SequenceLabel
...

(特征是我在自己的代码中对数据进行的处理的输出。)

我在让除 Mallet 之外的任何 CRF 分类器大致工作时遇到问题,但我可能不得不再次回溯并重新访问其他实现之一,或尝试新的实现。

【问题讨论】:

    标签: machine-learning nlp mallet crf


    【解决方案1】:

    是的,随机梯度下降通常比 Mallet 中使用的 L-BFGS 优化器快得多。我建议您尝试CRFSuite,您可以通过 SGD 或 L-BFGS 进行训练。您也可以试试 Léon Bottou 的 SGD-based implementation,但设置起来比较困难。

    否则,我相信CRF++ 是周围最常用的CRF 软件。但它基于 L-BFGS,因此对您来说可能不够快。

    CRFSuite 和 CRF++ 都应该很容易上手。

    请注意,如果您有大量标签,所有这些都会很慢。至少 CRFSuite 可以配置为仅考虑观察到的 label-n-grams - 在 (n-1) 阶模型中 - 这通常会使训练和预测更快。

    【讨论】:

      【解决方案2】:

      请看一下这篇论文: http://www.stanford.edu/~acoates/papers/LeNgiCoaLahProNg11.pdf

      似乎随机梯度下降方法难以调整和并行化。

      【讨论】:

      猜你喜欢
      • 2013-03-06
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 2017-12-02
      • 2014-04-26
      • 2015-06-07
      相关资源
      最近更新 更多