O documento descreve os desafios e estratégias para desenvolver modelos de processamento de linguagem natural em português. Apresenta um ciclo de desenvolvimento de modelos customizados com a criação de um corpus, treinamento de um modelo baseline, avaliação e melhoria iterativa.
Mini-curso Processamento de linguagens naturais: pondo em prática
Sistemas de Processamento de Linguagem Natural na Prática
1. Sistemas de Processamento de
Linguagem Natural na Prática
Lições aprendidas na busca por insights em dados não estruturados
William Colen
Head de IA @ Stilingue (www.stilingue.com.br)
Member @ Apache SF (www.apache.org)
PMC/Commiter @ Apache OpenNLP (opennlp.apache.org)
colen@apache.org
@wcolen
slideshare: wcolen
https://github.com/wcolen/qconsp2018-opennlp-flink-example
8. Boa parte do conhecimento humano está em documentos difíceis de
serem interpretados por computadores
9. Boa parte do conhecimento humano está em documentos difíceis de
serem interpretados por computadores
10. Boa parte do conhecimento humano está em documentos difíceis de
serem interpretados por computadores
Informação de alto valor
e mais atualizada
Mas… com muito ruído,
semântica oculta e
busca ineficiente
11. Boa parte do conhecimento humano está em documentos difíceis de
serem interpretados por computadores
Informação de alto valor e mais atualizada
Mas… com muito ruído, semântica oculta e busca ineficiente
Processamento de
Linguagem Natural
23. |O|sr.|Paulo|chegou|.|||Vamos|?||
|O|sr.|Paulo|chegou|.|
ART ABR N VERB PU
|O sr. Paulo |chegou
Sintagma Nominal Sintagma Verbal
O sr. Paulo está chegando .
| Sujeito | Predicado
O sr. Paulo chegou . | Vamos ?||Sentence
Detector
Tokenizer
POS Tagger
Chunker
Shallow Parser
O sr. Paulo chegou . Vamos ?||
31. Dicionários
Ortográficos
Hunspell pt-BR (corretor
ortográfico do LibreOffice)
esse comercial da #brama, em são paulo c/
mulheres cantando por homens q bebe +
conscientemente e ótm :P
Esse comercial da Brahma em São Paulo com
mulheres cantando por homens que bebem mais
conscientemente e ótimo.
41. Corpus
Não Anotado
Wikipedia
• Servem como exemplos de uso da língua
• Criação simples: crawler de notícias, coletar tweets
• Corpus livre e aberto: Wikipedia Dumps https://
dumps.wikimedia.org
43. Corpus
Documento
pos eu curti
pos eu bebo todas e adoroooo
neg ressaca braba com essa cerva de milho
neg mano essa cerva ta quente
Outros exemplos
- Pares <Língua> <Documento>
- Pares <Cancêr Sim|Não> <Laudo médico>
…
51. Ferramentas
Machine
Learning + DL NLTK (Python)
spaCy (Python)
Apache OpenNLP (Java)
Stanford Core NLP (Java)
CoGrOO (Java)
Centradas em Machine Learning.
Podem usar DL para partes específicas.
Ex.: OpenNLP pode usar Word Embeddings como features
60. Modelos
Tailor Made
Treinar um modelo sob medida adequado para o
contexto de aplicação utilizando um corpus
criado sob medida.
Bons quando para contextos específicos e quando precisamos de maior eficácia.
61. Desafios em trabalhar com português
Escassos Recursos linguísticos
Dicionários, corpus, ferramentas e
modelos
67. • Corpus Amazônia: http://www.linguateca.pt/floresta/ficheiros/gz/
amazonia.ad.gz
• Apache OpenNLP: https://www.apache.org/dyn/closer.cgi/opennlp/
opennlp-1.8.4/apache-opennlp-1.8.4-bin.tar.gz
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação
Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
68. A1
STA:cu
=CJT:fcl
==ADVL:adv("depois" <left>) depois
==ACC-PASS:pron-pers("se" <coll> <left> M 3P ACC) se
==P:v-fin("encontrar" <se-passive> <nosubj> <cjt-head> <fmc> <mv> PR 3P IND VFIN) encontram
==PIV:pp
===H:prp("com" <right>) com
===P<:np
====>N:art("o" <artd> DET F S) a
====H:n("dissidência" <np-def> <ac> <am> F S) dissidência
====N<:pp
=====H:prp("de" <sam-> <np-close>) de
=====P<:np
======>N:art("o" <artd> <-sam> DET M S) o
======H:n("grupo" <np-def> <HH> M S) grupo
======,
======APP:np
=======>N:art("o" <artd> DET M P) os
=======H:prop("Bacamarteiros_de_Pinga_Fogo" <org> <np-close> M P) Bacamarteiros_de_Pinga_Fogo
=,
=CO:conj-c("e" <co-fin> <co-fmc>) e
=CJT:x
==SUBJ:np
===>N:art("o" <artd> DET F S)a
===H:n("festa" <np-def> <occ> <left> F S) festa
==P:v-fin("continuar" <cjt-sta> <fmc> <mv> PR 3S IND VFIN) continua
==ADVL:pp
===H:prp("por" <right>) por
===P<:n("muito_tempo" <np-idf> <dur> M S) muito_tempo
.
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação
Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
69. $ bin/opennlp TokenNameFinderCrossValidator.ad -lang pt -encoding ISO-8859-1 /
-data amazonia.ad -reportOutputFile detailed_report.txt /
-misclassified true > misclassified.txt
detailed_report.txt misclassified.txt
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação
Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
72. misclassified.txt
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação
Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
Expected: {
" <START:artprod> Luz Quartiada <END> " é pura <START:abstract> prosa <END> poética que prende o leitor do
começo ao <START:event> fim <END> quando descreve personagens como " <START:person> Clarice <END> " e seus
anseios de mulher de um mundo escondido e ameaçado pelo progresso :}
Predicted: {
" <START:abstract> Luz Quartiada <END> " é pura prosa poética que prende o leitor do começo ao
<START:event> fim <END> quando descreve personagens como " <START:artprod> Clarice <END> " e seus anseios
de mulher de um mundo escondido e ameaçado pelo progresso :}
False positives: {
[Luz Quartiada, Clarice]
} False negatives: {
[Luz Quartiada, prosa, Clarice]
}
73. Criar um
modelo
Baseline
Corpus
Baseline
Avaliação
Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
<generators>
<cache>
<generators>
<window prevLength = "2" nextLength = "2">
<tokenclass/>
</window>
<window prevLength = "2" nextLength = "2">
<token/>
</window>
<definition/>
<prevmap/>
<bigram/>
<sentence begin="true" end="false"/>
</generators>
</cache>
</generators>
Default feature generator
90. Agradecimentos equipe Apache OpenNLP
Suneel Marthi
@suneelmarthi
Jörn Kottmann
@joernkottmann
Tommaso Teofili
@tteofili
Peter Thygesen
in:thygesen
@pthyge
William Colen
@wcolen
Rodrigo Agerri
@ragerri
Daniel Russ
in:daniel-russ-9541aa15
Koji Sekiguchi
@kojisays
Jeff Zemerick
in:jeffzemerick
Bruno Kinoshita
@kinow
91. Agradecimentos
Equipe de IA da Stilingue
http://www.stilingue.com.br
@Stilingue_API
#contratandoMentesCuriosas
e parcerias!!
92. Sistemas de Processamento de
Linguagem Natural na Prática
William Colen
Head de IA @ Stilingue (www.stilingue.com.br)
Member @ Apache SF (www.apache.org)
PMC/Commiter @ Apache OpenNLP (opennlp.apache.org)
colen@apache.org
@wcolen
slideshare: wcolen
https://github.com/wcolen/qconsp2018-opennlp-flink-example
Obrigado!
Perguntas?