Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
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)
@wcolen slideshare: wcolen
https://github.com/wcolen/qconsp2018-opennlp-flink-example
http://www.stilingue.com.brhttp://www.apache.orghttp://opennlp.apache.orgmailto:[email protected]
1Motivação NLP Como fazer em Português
2 3Indo um pouco mais profundo
4Analisando a Internet
5
1Motivação NLP Como fazer em Português
2 3Indo um pouco mais profundo
4Analisando 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
1Motivação NLP Como fazer em Português
2 3Indo um pouco mais profundo
4Analisando 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 ?||
PipelineLanguage Detector
Sentence Detector Tokenizer POS Tagger Chunker
Lemmatizer
Name Finder
Sentiment
Entity Linker
Index
PipelineLanguage 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êsEscassos recursos linguísticos
Dicionários, corpus, ferramentas e modelos
1Motivação NLP Como fazer em Português
2 3Indo um pouco mais profundo
4Analisando a 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, 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
PipelineLanguage Detector
Sentence Detector 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
https://dumps.wikimedia.orghttps://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 - Pares …
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)
PipelineLanguage Detector
Sentence Detector 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 | Parser Sentiment | Linking | Word Embeddings
Bons como baseline e para componentes secundários.
https://github.com/cogroo/cogroo4/wiki/API-CoGrOO-4http://www.nltk.org/howto/portuguese_en.html
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
4Analisando 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
http://www.linguateca.pt/floresta/ficheiros/gz/amazonia.ad.gzhttp://www.linguateca.pt/floresta/ficheiros/gz/amazonia.ad.gzhttps://www.apache.org/dyn/closer.cgi/opennlp/opennlp-1.8.4/apache-opennlp-1.8.4-bin.tar.gzhttps://www.apache.org/dyn/closer.cgi/opennlp/opennlp-1.8.4/apache-opennlp-1.8.4-bin.tar.gzhttps://www.apache.org/dyn/closer.cgi/opennlp/opennlp-1.8.4/apache-opennlp-1.8.4-bin.tar.gz
A1 STA:cu =CJT:fcl ==ADVL:adv("depois" ) depois ==ACC-PASS:pron-pers("se" M 3P ACC) se ==P:v-fin("encontrar" PR 3P IND VFIN) encontram ==PIV:pp ===H:prp("com" ) com ===PN:art("o" DET F S) a ====H:n("dissidência" F S) dissidência ====NN:art("o" DET M P) os =======H:prop("Bacamarteiros_de_Pinga_Fogo" M P) Bacamarteiros_de_Pinga_Fogo =, =CO:conj-c("e" ) e =CJT:x ==SUBJ:np ===>N:art("o" DET F S) a ===H:n("festa" F S) festa ==P:v-fin("continuar" PR 3S IND VFIN) continua ==ADVL:pp ===H:prp("por" ) por ===P
$ 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 |
misclassified.txt
Criar um modelo Baseline
Corpus Baseline
Avaliação Homologação
Engenharia de Features
Anotar mais dados
Criar um modelo
Expected: { " Luz Quartiada " é pura prosa poética que prende o leitor do começo ao fim quando descreve personagens como " Clarice " e seus anseios de mulher de um mundo escondido e ameaçado pelo progresso :} Predicted: { " Luz Quartiada " é pura prosa poética que prende o leitor do começo ao fim quando descreve personagens como " Clarice " 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
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
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 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çã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
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çã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??
1Motivação NLP Como fazer em Português
2 3Indo um pouco mais profundo
4Analisando a Internet
5
PipelineLanguage 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 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)
@wcolen
slideshare: wcolen https://github.com/wcolen/qconsp2018-opennlp-flink-example
Obrigado! Perguntas?
http://www.stilingue.com.brhttp://www.apache.orghttp://opennlp.apache.orgmailto:[email protected]