Mallet CRF SimpleTagger 性能调优

对于使用过Java库Mallet的SimpleTagger类进行条件随机场(CRF)的人有一个问题。假设我已经使用了多线程选项以最大限度地利用我可用的CPU数量(这是我的情况):我应该从哪里开始,如果我需要它运行得更快,我应该尝试哪些方法?

一个相关的问题是,是否有类似于随机梯度下降的方法,可以加速训练过程?

我想进行的训练类型很简单:

输入:特征1 ... 特征N 序列标签...测试数据:特征1 ... 特征N...输出:特征1 ... 特征N 序列标签...

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

除了Mallet之外,我在使用其他CRF分类器时遇到了问题,但我可能需要重新考虑并重新审视其他实现,或者尝试一个新的。


回答:

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

否则,我认为CRF++是使用最广泛的CRF软件。它基于L-BFGS,所以可能对你来说不够快。

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

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注