O Stanford CoreNLP e um conjunto de ferramentas para o processamento de linguas naturais bastante utilizado por pesquisadores e desenvolvedores. Modelos treinados para ingles para todas as funcionalidades do CoreNLP estao disponiveis para download, alem de modelos para outras linguas com algumas funcionalidades. Neste post, vou mostrar como treinar um POS Tagger e um parser de dependencias para o portugues.Quem esta acostumado com o meio academico da computacao sabe que sao raros os casos em que um software desenvolvido por pesquisadores e facil de se usar ou tem uma boa documentacao; e isso quando o mesmo esta disponivel para uso. Muitas vezes, os pesquisadores querem apenas avaliar o desempenho de algoritmos, sem ter em mente sua aplicacao posterior. Felizmente, o CoreNLP e uma excecao: funciona bem e sua documentacao e razoavelmente boa. De qualquer forma, com a popularidade do GitHub, parece que estamos tendo uma melhora nesse tendencia.Breve explicacao de arvores de dependenciaArvores de dependencia sao uma forma de representacao da estrutura sintatica de uma sentenca, seguindo a gramatica de dependencias, e sao uteis no pre-processamento de diversas aplicacoes de PLN. Numa arvore sintatica, cada token esta ligado a um outro, que e dito seu head. Um exemplo da Wikipedia:No exemplo, "convention" e "vary" tem "can" como head, e por isso sao considerados modificadores deste token. O token "can" nao tem um head; portanto e a raiz da arvore. Normalmente, a raiz e um verbo. Alem disso, cada relacao entre dois tokens, chamada de dependencia, pode ter um rotulo, indicando conceitos como adjunto adnominal, sujeito, objeto direto, determinante etc.Treinamento do modeloCorpusPara treinarmos um novo modelo, a primeira coisa que precisamos e de um corpus anotado com arvores sintaticas - e essa tem sido uma grande carencia da lingua portuguesa. Durante anos, tinhamos somente a Floresta Sinta(c)tica, composta por textos brasileiros e portugueses e compilada pela equipe da Linguateca. O tamanho e bem limitado: a parte revisada tem cerca de 215 mil tokens, contra mais de quatro milhoes do Penn Treebank.O problema maior nao e nem o tamanho do corpus, mas a tokenizacao usada. Na Floresta Sinta(c)tica, expressoes como pelo menos, em frente a, por causa de e varias outras sao tratadas como um unico token. Dessa forma, um parser treinado nesse corpus fica "acostumado" a tratar essas expressoes como uma unica palavra, e cometeria erros ao analisar um texto que nao tivesse passado por esse processo (nada simples) de pre-processamento.Ha poucos anos, porem, foi lancado o Universal Dependencies (UD), um projeto que apresenta corpora em diversas linguas anotados segundo o mesmo formalismo. O corpus em portugues do UD nao e muito maior que a porcao anotada da Floresta Sinta(c)tica, mas nao tem o problema dos multitokens.Se voce pretende usar esse corpus, aconselho pegar a versao editada pelo Pedro Balage (colega de laboratorio), onde alguns erros no corpus foram corrigidos. Ela pode ser encontrada nesse repositorio, na pasta pt-br-corrected.POS TaggerA maioria dos parsers sintaticos precisa que os textos de entrada ja estejam anotados com classes gramaticais, ou part-of-speech (POS) tags. O corpus de treinamento ja possui esse tipo de anotacao, mas para usarmos