Implementação de CRF em python


Respostas:



15

O CRF ++ possui mais links de entrada porque é uma biblioteca mais antiga.
O CRFSuite é superior na minha opinião.

  • O autor do CRFSuite afirma que é 20x mais rápido que o CRF ++ no treinamento de um modelo.
  • Requisitos menos rígidos para os dados de entrada.

Se você está procurando ligações do Python, o CRFSuite também é melhor porque você pode treinar um modelo em Python, enquanto que no CRF ++ é possível testar apenas os modelos existentes no Python. (Esse foi o fator decisivo para mim.) O CRFSuite também vem com vários exemplos de código em Python, como NER, Chunking e marcação de POS.


3
Você pode elaborar como usar o NER e o Chunking fornecidos pelo CRFSuite? Parece que espera dados de treinamento de um formato diferente. Onde posso encontrar isso?
Legend

14

Aqui estão alguns outros wrappers / implementações:

  • https://github.com/adsva/python-wapiti - Wrapper Python para http://wapiti.limsi.fr/ . O Wapiti é rápido; Os benchmarks do crfsuite não são justos para o wapiti porque o wapiti pode paralelizar o treinamento L-BFGS com vários núcleos da CPU, e esse recurso não foi usado nos benchmarks. O problema com o Wapiti é que ele não está escrito como uma biblioteca. O invólucro se esforça para superar isso, mas você ainda pode obter um inatingível exit(), e eu vi vazamentos de memória durante o treinamento. Além disso, o wapiti é limitado em um tipo de recurso que pode representar, mas o CRFsuite também é limitado (de uma maneira diferente). O Wapiti é empacotado em um invólucro, não é necessário instalá-lo separadamente.
  • https://github.com/jakevdp/pyCRFsuite - um invólucro para o crfsuite. O wrapper é bastante avançado e permite o uso de matrizes esparsas esparsas como entrada, mas parece que existem alguns problemas não resolvidos; é possível obter um segfault em alguns casos.
  • https://github.com/tpeng/python-crfsuite - outro wrapper do crfsuite. Este é bastante simples; ele inclui o crfsuite para facilitar a instalação e pode ser instalado apenas com 'pip install python-crfsuite'.
  • https://github.com/larsmans/seqlearn fornece o Structured Perceptron, que pode substituir o CRF em muitos casos. A implementação estruturada do Perceptron é muito rápida no seqlearn. Há um PR (não mesclado no momento da redação) que adiciona suporte ao CRF ao seqlearn; parece sólido.
  • https://github.com/timvieira/crf - é bastante básico e não possui alguns recursos essenciais, mas requer apenas dormência.

Eu recomendo usar o seqlearn, se puder, python-crfsuite, se você precisar de algoritmos de treinamento e velocidade de treinamento CRFsuite, pyCRFsuite, se você precisar de uma integração mais avançada do CRFsuite e estiver pronto para enfrentar alguns inconvenientes, python-wapiti, se você precisar de algoritmos ou recursos de treinamento do Wapiti não está disponível no CRFsuite (como condicionar observações individuais em transições) e no crv de timvieira, se não houver como fazer com que um compilador C / C ++ funcione, mas um número pré-construído esteja disponível.


7

Eu acho que o que você está procurando é PyStruct .

O PyStruct visa ser uma biblioteca estruturada de aprendizado e previsão fácil de usar. Atualmente, ele implementa apenas métodos de margem máxima e um perceptron, mas outros algoritmos podem seguir.

O objetivo do PyStruct é fornecer uma ferramenta bem documentada para que pesquisadores e não especialistas utilizem algoritmos de previsão estruturada. O design tenta ficar o mais próximo possível da interface e das convenções do scikit-learn.

PyStructvem com boa documentação e é desenvolvido ativamente no github .

Abaixo está uma tabela comparando PyStructcom CRFsuitee outros pacotes, extraída da previsão do PyStruct - Structured no Python :

Comparação de pacotes de software de previsão estruturada

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.