CRF在python中的实现


Answers:



15

CRF ++具有更多的传入链接,因为它是一个较旧的库。我认为
CRFSuite优越。

  • CRFSuite的作者声称在训练模型时它比CRF ++快20倍
  • 对输入数据的刚性要求较低。

如果您正在寻找Python绑定,CRFSuite也更好,因为您可以在Python中训练模型,而在CRF ++中,您只能在Python中测试现有模型。(这对我来说是个大难题。)CRFSuite还附带了Python中的大量示例代码,例如NER,Chunking和POS标记。


3
您能否详细说明如何使用CRFSuite提供的NER和Chunking?看起来它期望训练数据的格式不同。在哪里可以找到这个?
传说

14

这是其他一些包装器/实现:

  • https://github.com/adsva/python-wapiti - Python包装的http://wapiti.limsi.fr/。Wapiti很快;crfsuite基准测试对wapiti不公平,因为wapiti可以将L-BFGS训练并行化到多个CPU内核,并且基准测试中未使用此功能。Wapiti的问题在于它不是作为库编写的。包装程序努力克服该问题,但是您仍然可以得到uncatchable exit(),而且我在培训期间已经看到内存泄漏。同样,wapiti在其可以代表的功能类型方面受到限制,但是CRFsuite也受到限制(以不同的方式)。Wapiti捆绑在包装中,无需单独安装。
  • https://github.com/jakevdp/pyCRFsuite-crfsuite的包装器。包装器非常先进,可以使用稀疏稀疏矩阵作为输入,但是似乎存在一些未解决的问题,在某些情况下有可能出现段错误。
  • https://github.com/tpeng/python-crfsuite-另一个crfsuite包装器。这很简单。它捆绑了crfsuite以便于安装,并且可以与'pip install python-crfsuite'一起安装。
  • https://github.com/larsmans/seqlearn提供了结构化感知器,在许多情况下可以替代CRF。结构化Perceptron的实现在seqlearn中非常快。有一个PR(在撰写本文时未合并)将CRF支持添加到seqlearn。它看起来很坚固。
  • https://github.com/timvieira/crf-它是非常基本的,没有一些基本功能,但只需要numpy。

如果可以,我建议使用seqlearn;如果需要CRFsuite训练算法和训练速度,则建议使用python-crfsuite;如果需要更高级的CRFsuite集成,则建议使用pyCRFsuite;如果需要Wapiti训练算法或功能,则准备使用python-wapiti如果没有办法使C / C ++编译器正常工作,则CRFsuite中将不提供此功能(例如,对过渡进行单独的条件观察)和timvieira的crf,但可以使用预构建的numpy。


7

我认为您正在寻找的是PyStruct

PyStruct旨在成为易于使用的结构化学习和预测库。当前,它仅实现最大利润率方法和一个感知器,但是可能会遵循其他算法。

PyStruct的目标是为研究人员和非专家提供有据可查的工具,以利用结构化预测算法。该设计试图尽可能地接近scikit-learn的界面和约定。

PyStruct带有良好的文档,并且在github上积极开发。

下面是比较表PyStructCRFsuite包等,从中提取PyStruct -在Python结构预测

结构化预测软件包的比较

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.