对于使用 Java库Mallet的SimpleTagger类进行条件随机场(CRF)的人来说,这是一个问题.假设我已经使用多线程选项来获得我可用的最大CPU数量(这是这种情况):我将从哪里开始,如果我需要它运行
一个相关的问题是,是否有办法做一些类似于随机梯度下降的东西,这会加速训练过程?
我想要做的培训类型很简单:
Input: Feature1 ... FeatureN SequenceLabel ... Test Data: Feature1 ... FeatureN ... Output: Feature1 ... FeatureN SequenceLabel ...
(其中的功能是我在自己的代码中对数据进行处理的输出.)
我在使用除Mallet以外的任何CRF分类器时遇到了大问题,但是我可能不得不再次回溯并重新访问其中一个实现,或尝试新的实现.
是的,随机梯度下降通常比Mallet中使用的L-BFGS优化器更快.我建议你试试 CRFSuite,你可以用SGD或L-BFGS训练.您也可以尝试使用LéonBottou的 SGD-based implementation,但这样设置起来比较困难.否则,我相信CRF++是最常用的CRF软件.它基于L-BFGS,所以它可能不够快.
CRFSuite和CRF都应该很容易上手.
请注意,如果您有大量标签,所有这些都会很慢.至少CRFSuite可以配置为仅考虑在第(n-1)阶模型中观察到的标签-n-gram,这通常会使训练和预测更快.