CRF在python中的实现

机器算法验证 机器学习 分类 Python 条件随机场
2022-02-09 00:16:50

Python是否有流行的条件随机字段实现?

我似乎找不到任何被广泛使用和流行的!

4个回答

CRF++ 有更多的传入链接,因为它是一个较旧的库。在我看来,
CRFSuite更胜一筹。

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

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

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

如果可以的话,我建议使用 seqlearn,如果你需要 CRFsuite 训练算法和训练速度,我建议使用 python-crfsuite,如果你需要更高级的 CRFsuite 集成并准备好面对一些不便,我建议使用 pyCRFsuite,如果你需要 Wapiti 训练算法或功能,我建议使用 python-wapiti如果无法使 C/C++ 编译器正常工作,则在 CRFsuite(例如调节对转换的个别观察)和 timvieira 的 crf 中不可用,但可以使用预构建的 numpy。

CRF++通常是一种流行的选择,并且具有Python 绑定CRFSuite也有记录在这里的绑定,但似乎没有像 CRF++ 那样广泛使用。在撰写本文时,scikit-learn 等更高级别的机器学习框架缺乏 CRF 支持(请参阅此拉取请求)。

我认为您正在寻找的是PyStruct

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

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

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

下表是从PyStruct - Python 中的结构化预测中PyStruct提取的与CRFsuite其他包的比较表

结构化预测软件包的比较