5

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

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

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

Input:
Feature1 ... FeatureN SequenceLabel
...

Test Data:
Feature1 ... FeatureN
...

Output:

Feature1 ... FeatureN SequenceLabel
...

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

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

4

2 回答 2

4

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

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

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

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

于 2011-03-28T18:21:13.333 回答
2

Please have a look at this paper: http://www.stanford.edu/~acoates/papers/LeNgiCoaLahProNg11.pdf

It seems stochastic gradient descent methods are difficult to tune and parallelize.

于 2012-08-12T13:20:08.367 回答