2011-03-28 65 views
5

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

一个相关的问题是,是否有办法做类似于随机梯度下降,这将加快培训过程?

我想要做培训的类型很简单:

Input: 
Feature1 ... FeatureN SequenceLabel 
... 

Test Data: 
Feature1 ... FeatureN 
... 

Output: 

Feature1 ... FeatureN SequenceLabel 
... 

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

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

回答

4

是的,随机梯度下降通常比Mallet中使用的L-BFGS优化器快。我建议你尝试CRFSuite,你可以通过SGD或L-BFGS进行培训。你也可以试试LéonBottou的SGD-based implementation,但是这样做更难。

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

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

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

2

请看看本文: http://www.stanford.edu/~acoates/papers/LeNgiCoaLahProNg11.pdf

似乎随机梯度下降的方法是二FFI邪教调整和并行。

+1

调整仍然是一个问题,但您可以非常容易地将SGD与Hogwild并行化!显示:http://pages.cs.wisc.edu/~brecht/papers/hogwildTR.pdf。 – 2013-02-17 12:04:05