Mallet CRF SimpleTagger性能调优

时间:2011-03-28 13:23:39

标签: machine-learning nlp mallet crf

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

一个相关的问题是,是否有办法做一些类似于随机梯度下降的事情,这会加速训练过程?

我想要做的培训很简单:

Input:
Feature1 ... FeatureN SequenceLabel
...

Test Data:
Feature1 ... FeatureN
...

Output:

Feature1 ... FeatureN SequenceLabel
...

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

我在使用除Mallet以外的任何CRF分类器时遇到了问题,但是我可能不得不再次回溯并重新访问其他一个实现,或尝试新的实现。

2 个答案:

答案 0 :(得分:4)

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

否则,我相信CRF++是最常用的CRF软件。它基于L-BFGS,所以它可能不够快。

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

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

答案 1 :(得分:2)

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

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