sistemas de processamento de linguagem natural na prática · mulheres cantando por homens que...
Post on 01-Dec-2018
220 Views
Preview:
TRANSCRIPT
Sistemas de Processamento de Linguagem Natural na Prática
Lições aprendidas na busca por insights em dados não estruturados
William ColenHead de IA @ Stilingue (www.stilingue.com.br)
Member @ Apache SF (www.apache.org)PMC/Commiter @ Apache OpenNLP (opennlp.apache.org)
colen@apache.org
@wcolenslideshare: wcolen
https://github.com/wcolen/qconsp2018-opennlp-flink-example
1Motivação NLP Como fazer em
Português
2 3Indo um pouco mais profundo
4Analisandoa Internet
5
1Motivação NLP Como fazer em
Português
2 3Indo um pouco mais profundo
4Analisandoa 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 valore 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
1Motivação NLP Como fazer em
Português
2 3Indo um pouco mais profundo
4Analisandoa 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 ?||SentenceDetector
Tokenizer
POS Tagger
Chunker
Shallow Parser
O sr. Paulo chegou . Vamos ?||
PipelineLanguageDetector
SentenceDetector Tokenizer POS Tagger Chunker
Lemmatizer
Name Finder
Sentiment
Entity Linker
Index
PipelineLanguageDetector
SentenceDetector 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êsEscassos recursos linguísticos
Dicionários, corpus, ferramentas e modelos
1Motivação NLP Como fazer em
Português
2 3Indo um pouco mais profundo
4Analisandoa Internet
5
Desafios em trabalhar com portuguêsEscassos 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, comoPOS 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
PipelineLanguageDetector
SentenceDetector Tokenizer POS Tagger Chunker
Lemmatizer
Name Finder
Sentiment
Entity Linker
Index
Desafios em trabalhar com portuguêsEscassos 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
Documentopos 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)
PipelineLanguageDetector
SentenceDetector Tokenizer POS Tagger Chunker
Lemmatizer
Name Finder
Sentiment
Entity Linker
Index
Desafios em trabalhar com portuguêsEscassos 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 FlowApache MXNetEclipse DL4J
PyTorch
Ferramentas
Deep Learning
Tensor FlowApache MXNetEclipse DL4J
PyTorch
Desafios em trabalhar com portuguêsEscassos 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 | ParserSentiment | Linking | Word Embeddings
Bons como baseline e para componentes secundários.
Modelos
Prateleira Tailor Made
Modelos
Tailor MadeTreinar 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êsEscassos Recursos linguísticos
Dicionários, corpus, ferramentas e modelos
Como criar modelos customizados para máxima eficácia?
1Motivação NLP Como fazer em
Português
2 3Indo um pouco mais profundo
4Analisandoa 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çãoHomologaçã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çãoHomologaçã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çãoHomologaçã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çãoHomologação
Engenharia de Features
Anotar mais dados
Criar um modelo
detailed_report.txt
Criar um modelo Baseline
Corpus Baseline
AvaliaçãoHomologaçã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çãoHomologaçã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çãoHomologaçã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çãoHomologaçã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çãoHomologação
Engenharia de Features
Anotar mais dados
Criar um modelo
Default feature generator
Criar um modelo Baseline
Corpus Baseline
AvaliaçãoHomologaçã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çãoHomologação
Engenharia de Features
Anotar mais dados
Criar um modelo
Feature generator: v01 x v2Evaluated 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çãoHomologaçã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çãoHomologação
Engenharia de Features
Anotar mais dados
Criar um modelo
Feature generator: v2 x v3Evaluated 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çãoHomologação
Engenharia de Features
Anotar mais dados
Criar um modelo
Criar um modelo Baseline
Corpus Baseline
AvaliaçãoHomologaçã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çãoHomologaçã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??
1Motivação NLP Como fazer em
Português
2 3Indo um pouco mais profundo
4Analisandoa Internet
5
PipelineLanguageDetector
SentenceDetector Tokenizer POS Tagger Chunker
Lemmatizer
Name Finder
Sentiment
Entity Linker
Index
SegmentaçãoSeleção Anotação Anotação++
SentenceDetector Tokenizer POS Tagger Name Finder
Index
LanguageDetector
Datasource
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 Thygesenin:thygesen
@pthyge
William Colen@wcolen
Rodrigo Agerri@ragerri
Daniel Russin:daniel-russ-9541aa15
Koji Sekiguchi@kojisays
Jeff Zemerickin:jeffzemerick
Bruno Kinoshita @kinow
Agradecimentos
Equipe de IA da Stilinguehttp://www.stilingue.com.br @Stilingue_API#contratandoMentesCuriosas e parcerias!!
Sistemas de Processamento de Linguagem Natural na Prática
William ColenHead 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?
top related