Implementação de CRF em python

32

Existe uma implementação popular de campos aleatórios condicionais em Python ?

Não consigo encontrar nenhum que seja amplamente usado e popular!

garak
fonte
Ter um olhar para a minha Github Repo ( ScikitCRF_NER ) para a implementação python de scikitCRF
Manikandan Thangavelu

Respostas:

13

O CRF ++ é uma escolha popular em geral e possui ligações Python . O CRFSuite também possui ligações documentadas aqui , mas não parece ter sido tão amplamente usado quanto o CRF ++. No momento da redação deste artigo, estruturas de aprendizado de máquina de nível superior, como o scikit-learn, não têm suporte a CRF (consulte esta solicitação de recebimento ).

pflaquerre
fonte
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.

Peter H
fonte
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.

Mikhail Korobov
fonte
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

ostrokach
fonte