SlideShare une entreprise Scribd logo
1  sur  92
Télécharger pour lire hors ligne
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
1
Motivação NLP
Como fazer em
Português
2 3
Indo um pouco
mais profundo
4
Analisando

a Internet
5
1
Motivação NLP
Como fazer em
Português
2 3
Indo um pouco
mais profundo
4
Analisando

a Internet
5
Mas o que é Natural Language
Processing?
Línguas Naturais
Línguas Naturais
Aquelas que evoluem naturalmente por humanos
devido ao uso e repetição sem planejamento ou
premeditação.
Línguas Estruturadas
Aquelas construídas ou formais, como as utilizadas
para programar um computador, ou a linguagem
matemática.
Boa parte do conhecimento humano está em documentos difíceis de
serem interpretados por computadores
Boa parte do conhecimento humano está em documentos difíceis de
serem interpretados por computadores
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
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
O QUE?
QUEM?
ONDE?
QUANDO?
FALARAM SOBRE CERVEJA NO
FERIADO DO DIA DO TRABALHADOR?
O QUE?
Ranking/Evolução - Publicações cerveja durante o feriado prolongado Dia do Trabalhador
Cerveja x Tema - Publicações cerveja durante o feriado prolongado Dia do Trabalhador
Sentimento - Publicações cerveja durante o feriado prolongado Dia do Trabalhador
Termos Correlacionados - Publicações cerveja durante o feriado prolongado Dia do Trabalhador
Sunburst Termos - Publicações cerveja durante o feriado prolongado Dia do Trabalhador
#comoEuConsigo
Resolvendo um problema
simples de cada vez
1
Motivação NLP
Como fazer em
Português
2 3
Indo um pouco
mais profundo
4
Analisando

a Internet
5
Desafio: ambiguidade
O sr. Mendonça chegou.
Quem casa quer casa.
Eu preparei o pato dela.
|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 ?||
Pipeline
Language

Detector
Sentence

Detector
Tokenizer POS Tagger Chunker
Lemmatizer
Name Finder
Sentiment
Entity Linker
Index
Pipeline
Language

Detector
Sentence

Detector
Tokenizer POS Tagger Chunker
Lemmatizer
Name Finder
Sentiment
Entity Linker
Index
SegmentaçãoSeleção Anotação Anotação++
Desafios em trabalhar com português
Escassos recursos linguísticos
Dicionários, corpus, ferramentas e
modelos
Desafios em trabalhar com português
Escassos recursos linguísticos
Dicionários, corpus, ferramentas e
modelos
1
Motivação NLP
Como fazer em
Português
2 3
Indo um pouco
mais profundo
4
Analisando

a Internet
5
Desafios em trabalhar com português
Escassos recursos linguísticos
Dicionários, corpus, ferramentas e
modelos
Dicionários
LéxicosOrtográficos Semânticos
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.
Dicionários
LéxicosOrtográficos Semânticos
Dicionários
Léxicos
JSpell.Br (CoGrOO USP/SP)
Podem ajudar em anotadores, como

POS Tagging e Lematização
https://github.com/cogroo/jspell.br
Dicionários
LéxicosOrtográficos Semânticos
Dicionários
Semânticos
Podem ajudar em termos, entidades e conceitos
Entidades na Stilingue
Semânticos
Analise de sentimento
Semânticos
Pipeline
Language

Detector
Sentence

Detector
Tokenizer POS Tagger Chunker
Lemmatizer
Name Finder
Sentiment
Entity Linker
Index
Desafios em trabalhar com português
Escassos Recursos linguísticos
Dicionários, corpus, ferramentas e
modelos
Corpus
DocumentoNão Anotado Tokens
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
Corpus
DocumentoNão Anotado Tokens
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>
…
Corpus
DocumentoNão Anotado Tokens
Corpus
Tokens
Floresta (Linguateca)
Summit (PUC-RS)
0 A o art F=S _ _ _ _
1 equipe _ n F=S 0 _ _ _
2 de de prp _ _ _ _ _
3 Peter_Savolainen _ prop M=S 0 (PER) (5) _
4 , _ , _ _ _ _ _
5 de de prp _ _ _ _ _
6 o o art M=S _ _ _ _
7 Instituto_Real_de_Tecnologia _ prop M=S 0 (ORG) (5) _
8 , _ , _ _ _ _ _
9 de de prp _ _ _ _ _
10 Estocolmo Estocolmo prop M=S 0 (PLC) _ _
11 , _ , _ _ _ _ _
12 Suécia Suécia prop F=S 0 (PLC) _ _
13 , _ , _ _ _ _ _
14 constatou constatar v-fin PS=3S=IND _ _ _ _
15 que que conj-s _ _ _ _ _
16 a o art F=S _ _ _ _
17 diversidade diversidade, diverso n F=S 0 _ _ _
18 genética genético adj F=S _ _ _ _
19 era ser v-fin IMPF=3S=IND _ _ _ _
20 maior maior adj F=S _ _ _ _
21 entre entre prp _ _ _ _ _
22 os o art M=P _ _ _ _
23 cães cão n M=P 0 _ _ _
24 de de prp _ _ _ _ _
25 o o art M=S _ _ _ _
26 leste leste n M=S 0 _ _ _
27 asiático asiático adj M=S _ _ _ _
28 . . . _ _ _ _ _
Summit (PUC-RS)
Pipeline
Language

Detector
Sentence

Detector
Tokenizer POS Tagger Chunker
Lemmatizer
Name Finder
Sentiment
Entity Linker
Index
Desafios em trabalhar com português
Escassos Recursos linguísticos
Dicionários, corpus, ferramentas e
modelos
Ferramentas
Machine
Learning + DL
Deep Learning
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
Ferramentas
Machine
Learning + DL
CoGrOO
https://github.com/cogroo/cogroo4/wiki/API-CoGrOO-4
Ferramentas
Machine
Learning + DL
Deep Learning
Ferramentas
Deep Learning
Tensor Flow
Apache MXNet
Eclipse DL4J
PyTorch
Ferramentas
Deep Learning
Tensor Flow
Apache MXNet
Eclipse DL4J
PyTorch
Desafios em trabalhar com português
Escassos Recursos linguísticos
Dicionários, corpus, ferramentas e
modelos
Modelos
Prateleira Tailor Made
Modelos
• CoGrOO (https://github.com/cogroo/cogroo4/wiki/API-CoGrOO-4)

• Apache OpenNLP (http://opennlp.apache.org/models.html)

• NLTK (http://www.nltk.org/howto/portuguese_en.html)

Prateleira
Sentence Detector | Tokenizer | Named Entity | POS Tagger | Chunking | Parser

Sentiment | Linking | Word Embeddings
Bons como baseline e para componentes secundários.
Modelos
Prateleira Tailor Made
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.
Desafios em trabalhar com português
Escassos Recursos linguísticos
Dicionários, corpus, ferramentas e
modelos
Como criar modelos customizados
para máxima eficácia?
1
Motivação NLP
Como fazer em
Português
2 3
Indo um pouco
mais profundo
4
Analisando

a Internet
5
Como criar modelos customizados
para máxima eficácia?
Ciclo de desenvolvimento
Vamos criar um modelo de
entidades nomeadas em notícias
Ciclo de desenvolvimento
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação

Homologação
Engenharia de
Features
Anotar mais
dados
Criar um novo
modelo
Ciclo de desenvolvimento
• 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
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
$ 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
detailed_report.txt
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação

Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
Evaluated 275769 samples with 328431 entities; found: 317170 entities; correct: 264015.
TOTAL: precision: 83.24%; recall: 80.39%; F1: 81.79%.
time: precision: 93.89%; recall: 91.63%; F1: 92.75%. [target: 18338; tp: 16804; fp: 1093]
numeric: precision: 90.65%; recall: 89.64%; F1: 90.14%. [target: 15173; tp: 13601; fp: 1403]
event: precision: 93.13%; recall: 86.28%; F1: 89.57%. [target: 50094; tp: 43219; fp: 3189]
place: precision: 87.99%; recall: 80.35%; F1: 83.99%. [target: 52123; tp: 41879; fp: 5718]
person: precision: 79.31%; recall: 81.17%; F1: 80.23%. [target: 85314; tp: 69250; fp: 18069]
organization: precision: 78.32%; recall: 78.67%; F1: 78.50%. [target: 69654; tp: 54798; fp: 15167]
thing: precision: 78.86%; recall: 68.91%; F1: 73.55%. [target: 9915; tp: 6832; fp: 1832]
abstract: precision: 73.97%; recall: 66.85%; F1: 70.23%. [target: 11262; tp: 7529; fp: 2650]
artprod: precision: 71.46%; recall: 61.02%; F1: 65.83%. [target: 16558; tp: 10103; fp: 4034]
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação

Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
Confusion Matrix
a b c d e f g h i j k l m n o p q r s | <-- classified as
<4780195> 409 420 7676 1137 505 1787 132 835 3339 2770 3481 4405 1030 1044 261 418 142 523 | a = other
232 <4123> 26 192 5 74 4 4 . 748 23 422 31 94 14 30 1 . 2 | b = abstract-cont
790 26 <7861> 113 125 22 41 4 6 174 988 104 710 29 144 11 108 . 6 | c = abstract-start
3176 282 69 <13548> 37 164 74 8 19 1348 273 1509 177 507 61 107 18 30 127 | d = artprod-cont
1992 38 258 160 <10927> 21 65 6 20 84 939 73 1447 19 362 7 124 3 13 | e = artprod-start
695 47 15 266 7 <7986> 85 8 . 712 64 508 53 172 35 12 2 4 8 | f = event-cont
4364 15 58 137 98 122 <43825> 10 41 68 539 68 536 34 140 3 24 . 12 | g = event-start
296 . 8 26 2 . 1 <8493> 25 5 4 29 12 15 11 4 2 77 3 | h = numeric-cont
1075 . . 39 18 2 9 12 <13809> 9 7 22 15 10 19 2 12 . 113 | i = numeric-start
1387 512 136 1417 11 358 21 9 4 <37838> 364 2935 184 1694 124 205 17 18 18 | j = organization-cont
2738 64 571 509 559 125 206 21 15 963 <57223> 507 3778 218 1739 21 368 2 27 | k = organization-start
2270 375 30 1413 18 256 39 60 4 2741 187 <51957> 643 1080 133 222 20 21 44 | l = person-cont
4645 84 407 695 776 119 101 9 62 643 2820 1682 <71628> 294 942 57 313 3 34 | m = person-start
770 132 27 659 6 125 20 5 10 3145 147 2240 173 <22709> 91 177 12 7 9 | n = place-cont
1829 35 167 355 285 84 69 1 13 416 2816 345 2678 211 <42553> 42 177 2 45 | o = place-start
232 33 7 146 2 9 6 18 1 498 24 408 19 108 10 <2272> 3 1 1 | p = thing-cont
758 7 93 74 109 5 34 16 26 56 714 71 744 24 134 7 <7034> 4 5 | q = thing-start
185 2 . 13 . 21 2 28 . 36 3 45 3 8 3 9 . <5798> 16 | r = time-cont
823 2 26 111 15 18 19 5 114 38 60 64 83 9 38 4 11 7 <16891>| s = time-start
detailed_report.txt
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]
}
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
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação

Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
Default feature generator
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação

Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
<generators>
<cache>
<generators>
<window prevLength = "3" nextLength = "3">
<tokenclass/>
</window>
<window prevLength = "3" nextLength = "3">
<token/>
</window>
<definition/>
<prevmap/>
<bigram/>
<sentence begin="true" end="false"/>
</generators>
</cache>
</generators>
Feature generator: v01
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação

Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
Feature generator: v01 x v2
Evaluated 275769 samples with 328431 entities; found: 317170 entities; correct: 264015.
TOTAL: precision: 83.24%; recall: 80.39%; F1: 81.79%.
time: precision: 93.89%; recall: 91.63%; F1: 92.75%. [target: 18338; tp: 16804; fp: 1093]
numeric: precision: 90.65%; recall: 89.64%; F1: 90.14%. [target: 15173; tp: 13601; fp: 1403]
event: precision: 93.13%; recall: 86.28%; F1: 89.57%. [target: 50094; tp: 43219; fp: 3189]
place: precision: 87.99%; recall: 80.35%; F1: 83.99%. [target: 52123; tp: 41879; fp: 5718]
person: precision: 79.31%; recall: 81.17%; F1: 80.23%. [target: 85314; tp: 69250; fp: 18069]
organization: precision: 78.32%; recall: 78.67%; F1: 78.50%. [target: 69654; tp: 54798; fp: 15167]
thing: precision: 78.86%; recall: 68.91%; F1: 73.55%. [target: 9915; tp: 6832; fp: 1832]
abstract: precision: 73.97%; recall: 66.85%; F1: 70.23%. [target: 11262; tp: 7529; fp: 2650]
artprod: precision: 71.46%; recall: 61.02%; F1: 65.83%. [target: 16558; tp: 10103; fp: 4034]
Evaluated 275769 samples with 328431 entities; found: 318807 entities; correct: 265517.
TOTAL: precision: 83.28%; recall: 80.84%; F1: 82.05%.
time: precision: 93.90%; recall: 92.16%; F1: 93.02%. [target: 18338; tp: 16900; fp: 1098]
numeric: precision: 90.30%; recall: 89.68%; F1: 89.99%. [target: 15173; tp: 13607; fp: 1461]
event: precision: 93.17%; recall: 86.15%; F1: 89.53%. [target: 50094; tp: 43158; fp: 3162]
place: precision: 87.60%; recall: 81.33%; F1: 84.35%. [target: 52123; tp: 42392; fp: 6000]
person: precision: 79.87%; recall: 81.05%; F1: 80.46%. [target: 85314; tp: 69146; fp: 17424]
organization: precision: 77.89%; recall: 79.36%; F1: 78.62%. [target: 69654; tp: 55274; fp: 15689]
thing: precision: 81.48%; recall: 67.49%; F1: 73.83%. [target: 9915; tp: 6692; fp: 1521]
abstract: precision: 75.70%; recall: 65.60%; F1: 70.29%. [target: 11262; tp: 7388; fp: 2371]
artprod: precision: 70.60%; recall: 66.19%; F1: 68.32%. [target: 16558; tp: 10960; fp: 4564]
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação

Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
<generators>
<cache>
<generators>
<window prevLength = "3" nextLength = "3">
<tokenclass/>
</window>
<window prevLength = "3" nextLength = "3">
<token/>
</window>
<window prevLength = "3" nextLength = "3">
<brownclustertokenclass dict = “brownCluster.txt"/>
</window>
<window prevLength = "3" nextLength = "3">
<tokenpos model = "en-pos-perceptron.bin"/>
</window>
<definition/>
<prevmap/>
<bigram/>
<sentence begin="true" end="false"/>
</generators>
</cache>
</generators>
Feature generator: v02
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação

Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
Feature generator: v2 x v3
Evaluated 275769 samples with 328431 entities; found: 318807 entities; correct: 265517.
TOTAL: precision: 83.28%; recall: 80.84%; F1: 82.05%.
time: precision: 93.90%; recall: 92.16%; F1: 93.02%. [target: 18338; tp: 16900; fp: 1098]
numeric: precision: 90.30%; recall: 89.68%; F1: 89.99%. [target: 15173; tp: 13607; fp: 1461]
event: precision: 93.17%; recall: 86.15%; F1: 89.53%. [target: 50094; tp: 43158; fp: 3162]
place: precision: 87.60%; recall: 81.33%; F1: 84.35%. [target: 52123; tp: 42392; fp: 6000]
person: precision: 79.87%; recall: 81.05%; F1: 80.46%. [target: 85314; tp: 69146; fp: 17424]
organization: precision: 77.89%; recall: 79.36%; F1: 78.62%. [target: 69654; tp: 55274; fp: 15689]
thing: precision: 81.48%; recall: 67.49%; F1: 73.83%. [target: 9915; tp: 6692; fp: 1521]
abstract: precision: 75.70%; recall: 65.60%; F1: 70.29%. [target: 11262; tp: 7388; fp: 2371]
artprod: precision: 70.60%; recall: 66.19%; F1: 68.32%. [target: 16558; tp: 10960; fp: 4564]
Evaluated 275769 samples with 328431 entities; found: 319684 entities; correct: 265738.
TOTAL: precision: 83.13%; recall: 80.91%; F1: 82.00%.
time: precision: 93.99%; recall: 92.23%; F1: 93.10%. [target: 18338; tp: 16914; fp: 1082]
numeric: precision: 91.39%; recall: 89.71%; F1: 90.54%. [target: 15173; tp: 13611; fp: 1283]
event: precision: 93.18%; recall: 85.64%; F1: 89.25%. [target: 50094; tp: 42903; fp: 3141]
place: precision: 87.28%; recall: 81.42%; F1: 84.25%. [target: 52123; tp: 42437; fp: 6183]
person: precision: 79.93%; recall: 82.02%; F1: 80.96%. [target: 85314; tp: 69978; fp: 17571]
organization: precision: 77.56%; recall: 79.26%; F1: 78.40%. [target: 69654; tp: 55206; fp: 15973]
thing: precision: 81.63%; recall: 66.17%; F1: 73.09%. [target: 9915; tp: 6561; fp: 1476]
abstract: precision: 73.10%; recall: 65.11%; F1: 68.87%. [target: 11262; tp: 7333; fp: 2699]
artprod: precision: 70.40%; recall: 65.20%; F1: 67.70%. [target: 16558; tp: 10795; fp: 4538]
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação

Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação

Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
$ bin/opennlp TokenNameFinderTrainer.ad -lang pt -encoding ISO-8859-1 /
-data amazonia.ad -model qcon.bin
Treinar um modelo para
homologação
Criar um
modelo
Baseline
Corpus
Baseline
Avaliação

Homologação
Engenharia
de Features
Anotar
mais dados
Criar um
modelo
$ bin/opennlp TokenizerMEEvaluator.ad -lang pt -encoding ISO-8859-1 /
-data homologacao.ad -model qcon.bin -detokenizer portuguese.xml /
-misclassified true
Com o modelo treinado, avaliar em
dados reais anotados (corpus ouro)
#comoJuntaTudo
ou…
como processar a Internet??
1
Motivação NLP
Como fazer em
Português
2 3
Indo um pouco
mais profundo
4
Analisando

a Internet
5
Pipeline
Language

Detector
Sentence

Detector
Tokenizer POS Tagger Chunker
Lemmatizer
Name Finder
Sentiment
Entity Linker
Index
SegmentaçãoSeleção Anotação Anotação++
Sentence

Detector
Tokenizer POS Tagger Name Finder
Index
Language

Detector
Data

source
NLP em Streaming
NLP em Streaming
https://github.com/wcolen/qconsp2018-opennlp-flink-example
final StreamExecutionEnvironment env =
StreamExecutionEnvironment.getExecutionEnvironment();



// Perform language detection
SplitStream<Annotation> articleStream = rawStream
.map(new LanguageDetectorFunction())
.split(new LanguageSelector(nlpLanguages));
// English NLP pipeline
articleStream.select("eng")
.map(new SentenceDetectorFunction(engSentenceModel))
.map(new TokenizerFunction(engTokenizerModel))
.map(new POSTaggerFunction(engPosModel))
.map(new ChunkerFunction(engChunkModel))
.map(new NameFinderFunction(engNerPersonModel))
.addSink(new ElasticsearchSink<>(config, transportAddresses, new ESSinkFunction()));
// Portuguese NLP pipeline
articleStream.select("por")
.map(new SentenceDetectorFunction(porSentenceModel))
.map(new TokenizerFunction(porTokenizerModel))
.map(new POSTaggerFunction(porPosModel))
.map(new ChunkerFunction(porChunkModel))
.map(new NameFinderFunction(porNerPersonModel))
.addSink(new ElasticsearchSink<>(config, transportAddresses, new ESSinkFunction()));
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
Agradecimentos
Equipe de IA da Stilingue

http://www.stilingue.com.br
@Stilingue_API

#contratandoMentesCuriosas
e parcerias!!
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?

Contenu connexe

Similaire à Sistemas de Processamento de Linguagem Natural na Prática

Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01William Colen
 
1, 2, 3 e já estamos com um chatbot funcionando: Rápido assim
1, 2, 3 e já estamos com um chatbot funcionando: Rápido assim1, 2, 3 e já estamos com um chatbot funcionando: Rápido assim
1, 2, 3 e já estamos com um chatbot funcionando: Rápido assimArrayOf.io
 
Minerando informações de textos
Minerando informações de textosMinerando informações de textos
Minerando informações de textosBarbara Barbosa
 
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfPARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfAthena542429
 
Elementos Fundamentais de Linguagens de Programação e a Linguagem Python
Elementos Fundamentais de Linguagens de Programação e a Linguagem PythonElementos Fundamentais de Linguagens de Programação e a Linguagem Python
Elementos Fundamentais de Linguagens de Programação e a Linguagem PythonCaliane Z. Pecenin
 
Paradigms of programming languagens
Paradigms of programming languagensParadigms of programming languagens
Paradigms of programming languagensMarcelo Hama
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Luiz Aldabalde
 
TDC2016SP - Trilha Data Science
TDC2016SP - Trilha Data ScienceTDC2016SP - Trilha Data Science
TDC2016SP - Trilha Data Sciencetdc-globalcode
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador PragmaticoLeonardo Fernandes
 
A Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão LinguísticaA Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão LinguísticaFernanda Ledesma
 
The zen of python 2010
The zen of python 2010The zen of python 2010
The zen of python 2010Luiz Aldabalde
 
Explorando O Potencial Das Linguagens De Programação Open Source
Explorando O Potencial Das Linguagens De Programação Open SourceExplorando O Potencial Das Linguagens De Programação Open Source
Explorando O Potencial Das Linguagens De Programação Open SourceRafael Jaques
 
Uma experiência acadêmica com Python
Uma experiência acadêmica com PythonUma experiência acadêmica com Python
Uma experiência acadêmica com PythonHenrique Bastos
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em ElixirAdolfo Neto
 
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...Rafaela Zanin Ferreira
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Gabriel Rubens
 

Similaire à Sistemas de Processamento de Linguagem Natural na Prática (20)

Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01
 
1, 2, 3 e já estamos com um chatbot funcionando: Rápido assim
1, 2, 3 e já estamos com um chatbot funcionando: Rápido assim1, 2, 3 e já estamos com um chatbot funcionando: Rápido assim
1, 2, 3 e já estamos com um chatbot funcionando: Rápido assim
 
Minerando informações de textos
Minerando informações de textosMinerando informações de textos
Minerando informações de textos
 
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfPARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
 
Elementos Fundamentais de Linguagens de Programação e a Linguagem Python
Elementos Fundamentais de Linguagens de Programação e a Linguagem PythonElementos Fundamentais de Linguagens de Programação e a Linguagem Python
Elementos Fundamentais de Linguagens de Programação e a Linguagem Python
 
Paradigms of programming languagens
Paradigms of programming languagensParadigms of programming languagens
Paradigms of programming languagens
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011
 
TDC2016SP - Trilha Data Science
TDC2016SP - Trilha Data ScienceTDC2016SP - Trilha Data Science
TDC2016SP - Trilha Data Science
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador Pragmatico
 
PORT4NOOJ - Até onde se pode ir? Anabela Barreiro & Cristina Mota
PORT4NOOJ - Até onde se pode ir? Anabela Barreiro & Cristina MotaPORT4NOOJ - Até onde se pode ir? Anabela Barreiro & Cristina Mota
PORT4NOOJ - Até onde se pode ir? Anabela Barreiro & Cristina Mota
 
A Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão LinguísticaA Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão Linguística
 
The zen of python 2010
The zen of python 2010The zen of python 2010
The zen of python 2010
 
Explorando O Potencial Das Linguagens De Programação Open Source
Explorando O Potencial Das Linguagens De Programação Open SourceExplorando O Potencial Das Linguagens De Programação Open Source
Explorando O Potencial Das Linguagens De Programação Open Source
 
Uma experiência acadêmica com Python
Uma experiência acadêmica com PythonUma experiência acadêmica com Python
Uma experiência acadêmica com Python
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em Elixir
 
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...
Resenha do Artigo Ciéntifico: Implementação, Avaliação e Validação de Algorit...
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
 

Plus de William Colen

Falando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuaisFalando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuaisWilliam Colen
 
CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13William Colen
 
Cogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XICogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XIWilliam Colen
 
Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11William Colen
 
Criando extensões para o BrOffice (Serpro 2010)
Criando extensões para o BrOffice (Serpro 2010)Criando extensões para o BrOffice (Serpro 2010)
Criando extensões para o BrOffice (Serpro 2010)William Colen
 
Tutorial: Criando extensões para o OpenOffice
Tutorial: Criando extensões para o OpenOfficeTutorial: Criando extensões para o OpenOffice
Tutorial: Criando extensões para o OpenOfficeWilliam Colen
 
Mini-curso Processamento de linguagens naturais: pondo em prática
Mini-curso Processamento de linguagens naturais: pondo em prática Mini-curso Processamento de linguagens naturais: pondo em prática
Mini-curso Processamento de linguagens naturais: pondo em prática William Colen
 

Plus de William Colen (7)

Falando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuaisFalando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuais
 
CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13
 
Cogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XICogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XI
 
Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11
 
Criando extensões para o BrOffice (Serpro 2010)
Criando extensões para o BrOffice (Serpro 2010)Criando extensões para o BrOffice (Serpro 2010)
Criando extensões para o BrOffice (Serpro 2010)
 
Tutorial: Criando extensões para o OpenOffice
Tutorial: Criando extensões para o OpenOfficeTutorial: Criando extensões para o OpenOffice
Tutorial: Criando extensões para o OpenOffice
 
Mini-curso Processamento de linguagens naturais: pondo em prática
Mini-curso Processamento de linguagens naturais: pondo em prática Mini-curso Processamento de linguagens naturais: pondo em prática
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
  • 2. 1 Motivação NLP Como fazer em Português 2 3 Indo um pouco mais profundo 4 Analisando
 a Internet 5
  • 3. 1 Motivação NLP Como fazer em Português 2 3 Indo um pouco mais profundo 4 Analisando
 a Internet 5
  • 4. Mas o que é Natural Language Processing?
  • 6. Línguas Naturais Aquelas que evoluem naturalmente por humanos devido ao uso e repetição sem planejamento ou premeditação.
  • 7. Línguas Estruturadas Aquelas construídas ou formais, como as utilizadas para programar um computador, ou a linguagem matemática.
  • 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
  • 13. FALARAM SOBRE CERVEJA NO FERIADO DO DIA DO TRABALHADOR? O QUE?
  • 14. Ranking/Evolução - Publicações cerveja durante o feriado prolongado Dia do Trabalhador
  • 15. Cerveja x Tema - Publicações cerveja durante o feriado prolongado Dia do Trabalhador
  • 16. Sentimento - Publicações cerveja durante o feriado prolongado Dia do Trabalhador
  • 17. Termos Correlacionados - Publicações cerveja durante o feriado prolongado Dia do Trabalhador
  • 18. Sunburst Termos - Publicações cerveja durante o feriado prolongado Dia do Trabalhador
  • 21. 1 Motivação NLP Como fazer em Português 2 3 Indo um pouco mais profundo 4 Analisando
 a Internet 5
  • 22. Desafio: ambiguidade O sr. Mendonça chegou. Quem casa quer casa. Eu preparei o pato dela.
  • 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 ?||
  • 24. Pipeline Language
 Detector Sentence
 Detector Tokenizer POS Tagger Chunker Lemmatizer Name Finder Sentiment Entity Linker Index
  • 25. Pipeline Language
 Detector Sentence
 Detector Tokenizer POS Tagger Chunker Lemmatizer Name Finder Sentiment Entity Linker Index SegmentaçãoSeleção Anotação Anotação++
  • 26. Desafios em trabalhar com português Escassos recursos linguísticos Dicionários, corpus, ferramentas e modelos
  • 27. Desafios em trabalhar com português Escassos recursos linguísticos Dicionários, corpus, ferramentas e modelos
  • 28. 1 Motivação NLP Como fazer em Português 2 3 Indo um pouco mais profundo 4 Analisando
 a Internet 5
  • 29. Desafios em trabalhar com português Escassos recursos linguísticos Dicionários, corpus, ferramentas e modelos
  • 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.
  • 33. Dicionários Léxicos JSpell.Br (CoGrOO USP/SP) Podem ajudar em anotadores, como
 POS Tagging e Lematização https://github.com/cogroo/jspell.br
  • 35. Dicionários Semânticos Podem ajudar em termos, entidades e conceitos Entidades na Stilingue
  • 38. Pipeline Language
 Detector Sentence
 Detector Tokenizer POS Tagger Chunker Lemmatizer Name Finder Sentiment Entity Linker Index
  • 39. Desafios em trabalhar com português Escassos Recursos linguísticos Dicionários, corpus, ferramentas e modelos
  • 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> …
  • 44.
  • 46. Corpus Tokens Floresta (Linguateca) Summit (PUC-RS) 0 A o art F=S _ _ _ _ 1 equipe _ n F=S 0 _ _ _ 2 de de prp _ _ _ _ _ 3 Peter_Savolainen _ prop M=S 0 (PER) (5) _ 4 , _ , _ _ _ _ _ 5 de de prp _ _ _ _ _ 6 o o art M=S _ _ _ _ 7 Instituto_Real_de_Tecnologia _ prop M=S 0 (ORG) (5) _ 8 , _ , _ _ _ _ _ 9 de de prp _ _ _ _ _ 10 Estocolmo Estocolmo prop M=S 0 (PLC) _ _ 11 , _ , _ _ _ _ _ 12 Suécia Suécia prop F=S 0 (PLC) _ _ 13 , _ , _ _ _ _ _ 14 constatou constatar v-fin PS=3S=IND _ _ _ _ 15 que que conj-s _ _ _ _ _ 16 a o art F=S _ _ _ _ 17 diversidade diversidade, diverso n F=S 0 _ _ _ 18 genética genético adj F=S _ _ _ _ 19 era ser v-fin IMPF=3S=IND _ _ _ _ 20 maior maior adj F=S _ _ _ _ 21 entre entre prp _ _ _ _ _ 22 os o art M=P _ _ _ _ 23 cães cão n M=P 0 _ _ _ 24 de de prp _ _ _ _ _ 25 o o art M=S _ _ _ _ 26 leste leste n M=S 0 _ _ _ 27 asiático asiático adj M=S _ _ _ _ 28 . . . _ _ _ _ _ Summit (PUC-RS)
  • 47.
  • 48. Pipeline Language
 Detector Sentence
 Detector Tokenizer POS Tagger Chunker Lemmatizer Name Finder Sentiment Entity Linker Index
  • 49. Desafios em trabalhar com português Escassos Recursos linguísticos Dicionários, corpus, ferramentas e modelos
  • 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
  • 54. Ferramentas Deep Learning Tensor Flow Apache MXNet Eclipse DL4J PyTorch
  • 55. Ferramentas Deep Learning Tensor Flow Apache MXNet Eclipse DL4J PyTorch
  • 56. Desafios em trabalhar com português Escassos Recursos linguísticos Dicionários, corpus, ferramentas e modelos
  • 58. Modelos • CoGrOO (https://github.com/cogroo/cogroo4/wiki/API-CoGrOO-4) • Apache OpenNLP (http://opennlp.apache.org/models.html) • NLTK (http://www.nltk.org/howto/portuguese_en.html)
 Prateleira Sentence Detector | Tokenizer | Named Entity | POS Tagger | Chunking | Parser
 Sentiment | Linking | Word Embeddings Bons como baseline e para componentes secundários.
  • 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
  • 62. Como criar modelos customizados para máxima eficácia?
  • 63. 1 Motivação NLP Como fazer em Português 2 3 Indo um pouco mais profundo 4 Analisando
 a Internet 5
  • 64. Como criar modelos customizados para máxima eficácia? Ciclo de desenvolvimento
  • 65. Vamos criar um modelo de entidades nomeadas em notícias Ciclo de desenvolvimento
  • 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
  • 70. detailed_report.txt Criar um modelo Baseline Corpus Baseline Avaliação
 Homologação Engenharia de Features Anotar mais dados Criar um modelo Evaluated 275769 samples with 328431 entities; found: 317170 entities; correct: 264015. TOTAL: precision: 83.24%; recall: 80.39%; F1: 81.79%. time: precision: 93.89%; recall: 91.63%; F1: 92.75%. [target: 18338; tp: 16804; fp: 1093] numeric: precision: 90.65%; recall: 89.64%; F1: 90.14%. [target: 15173; tp: 13601; fp: 1403] event: precision: 93.13%; recall: 86.28%; F1: 89.57%. [target: 50094; tp: 43219; fp: 3189] place: precision: 87.99%; recall: 80.35%; F1: 83.99%. [target: 52123; tp: 41879; fp: 5718] person: precision: 79.31%; recall: 81.17%; F1: 80.23%. [target: 85314; tp: 69250; fp: 18069] organization: precision: 78.32%; recall: 78.67%; F1: 78.50%. [target: 69654; tp: 54798; fp: 15167] thing: precision: 78.86%; recall: 68.91%; F1: 73.55%. [target: 9915; tp: 6832; fp: 1832] abstract: precision: 73.97%; recall: 66.85%; F1: 70.23%. [target: 11262; tp: 7529; fp: 2650] artprod: precision: 71.46%; recall: 61.02%; F1: 65.83%. [target: 16558; tp: 10103; fp: 4034]
  • 71. Criar um modelo Baseline Corpus Baseline Avaliação
 Homologação Engenharia de Features Anotar mais dados Criar um modelo Confusion Matrix a b c d e f g h i j k l m n o p q r s | <-- classified as <4780195> 409 420 7676 1137 505 1787 132 835 3339 2770 3481 4405 1030 1044 261 418 142 523 | a = other 232 <4123> 26 192 5 74 4 4 . 748 23 422 31 94 14 30 1 . 2 | b = abstract-cont 790 26 <7861> 113 125 22 41 4 6 174 988 104 710 29 144 11 108 . 6 | c = abstract-start 3176 282 69 <13548> 37 164 74 8 19 1348 273 1509 177 507 61 107 18 30 127 | d = artprod-cont 1992 38 258 160 <10927> 21 65 6 20 84 939 73 1447 19 362 7 124 3 13 | e = artprod-start 695 47 15 266 7 <7986> 85 8 . 712 64 508 53 172 35 12 2 4 8 | f = event-cont 4364 15 58 137 98 122 <43825> 10 41 68 539 68 536 34 140 3 24 . 12 | g = event-start 296 . 8 26 2 . 1 <8493> 25 5 4 29 12 15 11 4 2 77 3 | h = numeric-cont 1075 . . 39 18 2 9 12 <13809> 9 7 22 15 10 19 2 12 . 113 | i = numeric-start 1387 512 136 1417 11 358 21 9 4 <37838> 364 2935 184 1694 124 205 17 18 18 | j = organization-cont 2738 64 571 509 559 125 206 21 15 963 <57223> 507 3778 218 1739 21 368 2 27 | k = organization-start 2270 375 30 1413 18 256 39 60 4 2741 187 <51957> 643 1080 133 222 20 21 44 | l = person-cont 4645 84 407 695 776 119 101 9 62 643 2820 1682 <71628> 294 942 57 313 3 34 | m = person-start 770 132 27 659 6 125 20 5 10 3145 147 2240 173 <22709> 91 177 12 7 9 | n = place-cont 1829 35 167 355 285 84 69 1 13 416 2816 345 2678 211 <42553> 42 177 2 45 | o = place-start 232 33 7 146 2 9 6 18 1 498 24 408 19 108 10 <2272> 3 1 1 | p = thing-cont 758 7 93 74 109 5 34 16 26 56 714 71 744 24 134 7 <7034> 4 5 | q = thing-start 185 2 . 13 . 21 2 28 . 36 3 45 3 8 3 9 . <5798> 16 | r = time-cont 823 2 26 111 15 18 19 5 114 38 60 64 83 9 38 4 11 7 <16891>| s = time-start detailed_report.txt
  • 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
  • 75. Criar um modelo Baseline Corpus Baseline Avaliação
 Homologação Engenharia de Features Anotar mais dados Criar um modelo <generators> <cache> <generators> <window prevLength = "3" nextLength = "3"> <tokenclass/> </window> <window prevLength = "3" nextLength = "3"> <token/> </window> <definition/> <prevmap/> <bigram/> <sentence begin="true" end="false"/> </generators> </cache> </generators> Feature generator: v01
  • 76. Criar um modelo Baseline Corpus Baseline Avaliação
 Homologação Engenharia de Features Anotar mais dados Criar um modelo Feature generator: v01 x v2 Evaluated 275769 samples with 328431 entities; found: 317170 entities; correct: 264015. TOTAL: precision: 83.24%; recall: 80.39%; F1: 81.79%. time: precision: 93.89%; recall: 91.63%; F1: 92.75%. [target: 18338; tp: 16804; fp: 1093] numeric: precision: 90.65%; recall: 89.64%; F1: 90.14%. [target: 15173; tp: 13601; fp: 1403] event: precision: 93.13%; recall: 86.28%; F1: 89.57%. [target: 50094; tp: 43219; fp: 3189] place: precision: 87.99%; recall: 80.35%; F1: 83.99%. [target: 52123; tp: 41879; fp: 5718] person: precision: 79.31%; recall: 81.17%; F1: 80.23%. [target: 85314; tp: 69250; fp: 18069] organization: precision: 78.32%; recall: 78.67%; F1: 78.50%. [target: 69654; tp: 54798; fp: 15167] thing: precision: 78.86%; recall: 68.91%; F1: 73.55%. [target: 9915; tp: 6832; fp: 1832] abstract: precision: 73.97%; recall: 66.85%; F1: 70.23%. [target: 11262; tp: 7529; fp: 2650] artprod: precision: 71.46%; recall: 61.02%; F1: 65.83%. [target: 16558; tp: 10103; fp: 4034] Evaluated 275769 samples with 328431 entities; found: 318807 entities; correct: 265517. TOTAL: precision: 83.28%; recall: 80.84%; F1: 82.05%. time: precision: 93.90%; recall: 92.16%; F1: 93.02%. [target: 18338; tp: 16900; fp: 1098] numeric: precision: 90.30%; recall: 89.68%; F1: 89.99%. [target: 15173; tp: 13607; fp: 1461] event: precision: 93.17%; recall: 86.15%; F1: 89.53%. [target: 50094; tp: 43158; fp: 3162] place: precision: 87.60%; recall: 81.33%; F1: 84.35%. [target: 52123; tp: 42392; fp: 6000] person: precision: 79.87%; recall: 81.05%; F1: 80.46%. [target: 85314; tp: 69146; fp: 17424] organization: precision: 77.89%; recall: 79.36%; F1: 78.62%. [target: 69654; tp: 55274; fp: 15689] thing: precision: 81.48%; recall: 67.49%; F1: 73.83%. [target: 9915; tp: 6692; fp: 1521] abstract: precision: 75.70%; recall: 65.60%; F1: 70.29%. [target: 11262; tp: 7388; fp: 2371] artprod: precision: 70.60%; recall: 66.19%; F1: 68.32%. [target: 16558; tp: 10960; fp: 4564]
  • 77. Criar um modelo Baseline Corpus Baseline Avaliação
 Homologação Engenharia de Features Anotar mais dados Criar um modelo <generators> <cache> <generators> <window prevLength = "3" nextLength = "3"> <tokenclass/> </window> <window prevLength = "3" nextLength = "3"> <token/> </window> <window prevLength = "3" nextLength = "3"> <brownclustertokenclass dict = “brownCluster.txt"/> </window> <window prevLength = "3" nextLength = "3"> <tokenpos model = "en-pos-perceptron.bin"/> </window> <definition/> <prevmap/> <bigram/> <sentence begin="true" end="false"/> </generators> </cache> </generators> Feature generator: v02
  • 78. Criar um modelo Baseline Corpus Baseline Avaliação
 Homologação Engenharia de Features Anotar mais dados Criar um modelo Feature generator: v2 x v3 Evaluated 275769 samples with 328431 entities; found: 318807 entities; correct: 265517. TOTAL: precision: 83.28%; recall: 80.84%; F1: 82.05%. time: precision: 93.90%; recall: 92.16%; F1: 93.02%. [target: 18338; tp: 16900; fp: 1098] numeric: precision: 90.30%; recall: 89.68%; F1: 89.99%. [target: 15173; tp: 13607; fp: 1461] event: precision: 93.17%; recall: 86.15%; F1: 89.53%. [target: 50094; tp: 43158; fp: 3162] place: precision: 87.60%; recall: 81.33%; F1: 84.35%. [target: 52123; tp: 42392; fp: 6000] person: precision: 79.87%; recall: 81.05%; F1: 80.46%. [target: 85314; tp: 69146; fp: 17424] organization: precision: 77.89%; recall: 79.36%; F1: 78.62%. [target: 69654; tp: 55274; fp: 15689] thing: precision: 81.48%; recall: 67.49%; F1: 73.83%. [target: 9915; tp: 6692; fp: 1521] abstract: precision: 75.70%; recall: 65.60%; F1: 70.29%. [target: 11262; tp: 7388; fp: 2371] artprod: precision: 70.60%; recall: 66.19%; F1: 68.32%. [target: 16558; tp: 10960; fp: 4564] Evaluated 275769 samples with 328431 entities; found: 319684 entities; correct: 265738. TOTAL: precision: 83.13%; recall: 80.91%; F1: 82.00%. time: precision: 93.99%; recall: 92.23%; F1: 93.10%. [target: 18338; tp: 16914; fp: 1082] numeric: precision: 91.39%; recall: 89.71%; F1: 90.54%. [target: 15173; tp: 13611; fp: 1283] event: precision: 93.18%; recall: 85.64%; F1: 89.25%. [target: 50094; tp: 42903; fp: 3141] place: precision: 87.28%; recall: 81.42%; F1: 84.25%. [target: 52123; tp: 42437; fp: 6183] person: precision: 79.93%; recall: 82.02%; F1: 80.96%. [target: 85314; tp: 69978; fp: 17571] organization: precision: 77.56%; recall: 79.26%; F1: 78.40%. [target: 69654; tp: 55206; fp: 15973] thing: precision: 81.63%; recall: 66.17%; F1: 73.09%. [target: 9915; tp: 6561; fp: 1476] abstract: precision: 73.10%; recall: 65.11%; F1: 68.87%. [target: 11262; tp: 7333; fp: 2699] artprod: precision: 70.40%; recall: 65.20%; F1: 67.70%. [target: 16558; tp: 10795; fp: 4538]
  • 80. Criar um modelo Baseline Corpus Baseline Avaliação
 Homologação Engenharia de Features Anotar mais dados Criar um modelo $ bin/opennlp TokenNameFinderTrainer.ad -lang pt -encoding ISO-8859-1 / -data amazonia.ad -model qcon.bin Treinar um modelo para homologação
  • 81. Criar um modelo Baseline Corpus Baseline Avaliação
 Homologação Engenharia de Features Anotar mais dados Criar um modelo $ bin/opennlp TokenizerMEEvaluator.ad -lang pt -encoding ISO-8859-1 / -data homologacao.ad -model qcon.bin -detokenizer portuguese.xml / -misclassified true Com o modelo treinado, avaliar em dados reais anotados (corpus ouro)
  • 83. 1 Motivação NLP Como fazer em Português 2 3 Indo um pouco mais profundo 4 Analisando
 a Internet 5
  • 84. Pipeline Language
 Detector Sentence
 Detector Tokenizer POS Tagger Chunker Lemmatizer Name Finder Sentiment Entity Linker Index SegmentaçãoSeleção Anotação Anotação++
  • 85. Sentence
 Detector Tokenizer POS Tagger Name Finder Index Language
 Detector Data
 source NLP em Streaming
  • 86. NLP em Streaming https://github.com/wcolen/qconsp2018-opennlp-flink-example final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
 
 // Perform language detection SplitStream<Annotation> articleStream = rawStream .map(new LanguageDetectorFunction()) .split(new LanguageSelector(nlpLanguages)); // English NLP pipeline articleStream.select("eng") .map(new SentenceDetectorFunction(engSentenceModel)) .map(new TokenizerFunction(engTokenizerModel)) .map(new POSTaggerFunction(engPosModel)) .map(new ChunkerFunction(engChunkModel)) .map(new NameFinderFunction(engNerPersonModel)) .addSink(new ElasticsearchSink<>(config, transportAddresses, new ESSinkFunction())); // Portuguese NLP pipeline articleStream.select("por") .map(new SentenceDetectorFunction(porSentenceModel)) .map(new TokenizerFunction(porTokenizerModel)) .map(new POSTaggerFunction(porPosModel)) .map(new ChunkerFunction(porChunkModel)) .map(new NameFinderFunction(porNerPersonModel)) .addSink(new ElasticsearchSink<>(config, transportAddresses, new ESSinkFunction()));
  • 87.
  • 88.
  • 89.
  • 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?