O documento apresenta um mini-curso sobre processamento de linguagem natural em português. Apresenta os palestrantes e suas áreas de pesquisa, define linguagem natural e processamento de linguagem natural, e fornece exemplos de aplicações como tradução automática, busca semântica e corretor gramatical. Também discute tarefas como segmentação de sentenças e tokenização.
Processamento Automático da Língua Portuguesa - Campus Party Br 6
1. Processamento Automático da
Língua Portuguesa
Wesley Seidel William Colen
@wseidel @wcolen
LTasks.com
O seu aplicativo entendendo o seu texto.
http://www.campus-party.com.br/
2. Agenda
● Quem somos?
● O que é uma Linguagem Natural?
● E Processamento de Linguagem Natural (PLN)?
● Alguns exemplos
● Língua versus Dados
● Por que é difícil? → Ambiguidade
● Tarefas PLN
● Bibliotecas: CoGrOO, OpenNLP e LTask
3. Quem somos?
● Wesley Seidel ● William Colen
– Matemático – Engenheiro Computação
– Mestre em CC – (Quase) mestre em CC
– Pesquisador – Pesquisador
– Programador – Programador
– Software livre – Software livre
– Empreendedor – Empreendedor
5. Língua natural Língua formal
● Humana ● Criada artificialmente
● Comunicação ● Matemática, lógica,
computação
● Falada, escrita ou
gesticulada ● Escrita ou digital
● Rica, viva e natural ● Universal
● Estrutura “escondida” ● Estrutura evidente
● Texto de livro ● Tabela do BD
● Post em um blog ● Arquivo XML
● Tweet ● Código fonte
6. Processamento de Linguagens Naturais (PLN)
Tarefas computacionais que envolvam a
linguagem humana
Extração de informação
Comunicação homem-máquina
Melhorar comunicação homem-homem
...
7. Exemplo: Agente de Conversação
Computador de
“2001: Uma Odisseia no Espaço”,
de Stanley Kubrick, 1968
HAL 9000
Reconhecimento de voz, inter-
● Conversa fluente em inglês pretação de linguagem natural
Planejamento de diálogo e sín-
● Leitura de lábios tese de voz
Arthur C. Clarke estava otimista de quando teríamos
um sistema de diálogo como o HAL 9000. Mas
quanto longe estamos disso?
8. Exemplo: tradução automática
Babel Fish é uma espécie fictícia na série
O Guia do Mochileiro das Galáxias
(1978), de Douglas Adams.
● Traduz instantaneamente de qualquer linguagem
para qualquer linguagem.
● Seria factível um sistema que fizesse o mesmo que
o Babel Fish?
● Imagine poder traduzir para o nosso idioma as
centenas de milhares de páginas Web que estão
originalmente em idiomas que não dominamos,
como o chinês, por exemplo?
9. Exemplo: Sistema de respostas
Buscar usando Fazer uma
palavras chave pergunta completa
Fácil para ● O que significa “procrastinar”?
os buscadores
atuais ● Em que ano foi a primeira Campus Party?
● Quantas palestras sobre desenvolvimento
web foram oferecidas naquele edição?
Requer reso-
lução de infe- ● Quanta seda chinesa foi exportada para a
rências, sínte-
se e resumo de Inglaterra no final do século 18?
informações de
diversas fontes.
● O que os cientistas pensam a respeito da
clonagem humana?
16. Processador de Processador de
dados linguagem
Conhecimento da
língua
● Programa Unix “wc” - conta total de bytes,
palavras e linhas de um arquivo texto.
– Bytes e linhas → processador de dados
– Palavras → processador linguístico
17. Língua Dados
Rafael Winter sugere que print tweet.length
seus seguidores vejam a 128
agenda do Palco
Pitágoras da CP. print tweet.author
rafael_winter
Ele ainda lembra que
nesse palco haverão print tweet.date
diversas palestras sobre 20130124
tecnologia.
18. Ambiguidade: problema fundamental
● “O sr. Mendonça chegou.”
– em “sr.”, o ponto marca fim de sentença?
● “Quem casa quer casa.”
– quando “casa” é verbo ou substantivo?
● “Eu preparei o pato dela.”
– Eu cozinhei o pato dela.
– Eu fiz o pato (de plástico?) dela.
19. Tarefas Processamento de Linguagem
● Segmentador de Sentenças
● Tokenizador
● Reconhecedor de Entidades Nomedas
● Etiquetador Morfológico
● Chunker
● Parser
…
20. Segmentador de sentenças
● Entrada
O sr. Mendonça chegou. Entrego-lhe os documentos.
● Saída
[O sr. Mendonça chegou.]
[Entrego-lhe os documentos.]
22. Detector de Entidades Nomeadas
● Entrada
O Red Hot se apresentará em São Paulo , o Wesley
vai no show .
● Saída
Bandas Pessoas
Red Hot
● ●Wesley
Lugares Eventos
● São Paulo ● show
23. Etiquetador Morfológico
● Entrada
Quem casa quer casa .
● Saída
Token Etiqueta
Quem pronome
casa verbo
quer verbo
casa substantivo
. pontuação
24. Chunker (Sintagmas)
● Entrada
A Maria vai entregar os documentos ao Pedro.
● Saída
A Maria: SN
vai entregar: SV
os documentos: SN
a: SP
o Pedro: SN
25. CoGrOO
● Extensão Corretor Gramatical para o
LibreOffice / Apache OpenOffice
● Aplica processamento de linguagem natural
● Sua API pode ser usada por outros projetos
● Apache 2.0
26. CoGrOO
Sugeito As menina
Corretor ortográfico Corretor gramatical
Sugeito As menina
27. Arquitetura do CoGrOO
Text
Sentence Subject
Tokenizer Chunker
Boundary Verb
(2) (5)
Detector (1) Finder (6)
Grammar
Name PoS
Error
Finder (3) Tagger (4)
Detector (7)
Suggestions
Lexical Language Error
Dictionary Models Patterns
28. API do CogrOO 4.x
● Tarefas disponíveis
– Corretor Gramatical
– Detector de sentenças, Tokenizer ...
● Obtenha o binário
– Download ou Maven (repo próprio)
● Documentação
– http://ccsl.ime.usp.br/redmine/projects/cogroo/wiki/How_to
29. API do CogrOO 4.x
Analisadores (1/2)
// Primeiro criamos o pipe usando as configurações de idioma:
ComponentFactory factory = ComponentFactory.create(new Locale("pt",
"BR"));
AnalyzerI cogroo = factory.createPipe();
// Crie um objeto do tipo Document e inclua o texto que será processado:
Document document = new DocumentImpl();
document.setText("Um longo texto, com diversos parágrafos e sentenças.");
// Execute os anotadores
cogroo.analyze(document);
30. API do CogrOO 4.x
Analisadores (2/2)
// Usando os getters do documento é possível obter as anotações:
for (Sentence sentence : document.getSentences()) { // lista de sentenças
sentence.getStart(); sentence.getEnd(); // caracteres onde a sentença começa e termina
sentence.getText(); // texto da sentença
// Tokens
for (Token token : sentence.getTokens()) { // lista de tokens
token.getStart(); token.getEnd(); // caracteres onde o token começa e termina
token.getLexeme(); // o texto do token
token.getLemmas(); // um array com os possíveis lemas para o par lexeme+postag
token.getPOSTag(); // classe morfológica de acordo com o contexto
token.getFeatures(); // gênero, número, tempo etc
}
// Chunks
for (Chunk chunk : sentence.getChunks()) { // lista de chunks
chunk.getStart(); chunk.getEnd(); // índice do token onde o chunk começa e do token onde ele
termina
chunk.getTag(); // the chunk tag
chunk.getTokens(); // a list with the covered tokens
}
// Structure
for (SyntacticChunk structure : sentence.getSyntacticChunks()) { // lista de SyntacticChunks
structure.getStart(); structure.getEnd(); // índice do token onde o structure começa e do token
onde ele termina
structure.getTag(); // the structure tag
structure.getTokens(); // a list with the covered tokens
}
31. API do CogrOO 4.x
Analisadores
Flat structure for: A moça bonita chegou hoje de carro novo.
A lemma[o] tag[DET_F_S_]
moça lemma[moço] tag[ADJ_F_S_]
bonita lemma[bonito] tag[N_F_S_]
chegou lemma[chegar] tag[V_PS_3S_IND_VFIN_]
hoje lemma[hoje] tag[ADV_]
de lemma[de] tag[PRP_]
carro lemma[carro] tag[N_M_S_]
novo lemma[novo] tag[ADJ_M_S_]
. lemma[.] tag[-PNT_ABS_]
32. Apache OpenNLP
● Framework livre para as tarefas de baixo nível
● Algoritmos de aprendizado de máquina
(entropia, redes neurais)
● Treinamento, avaliação e execução
● Diversos modelos prontos para uso, inclusive
português
● http://incubator.apache.org/opennlp/
33. Apache OpenNLP
Linha de comando
$ bin/opennlp POSTagger pt-pos-maxent.bin
Quem casa quer casa .
Quem_pron casa_v quer_v casa_s ._.
API
// load a model
InputStream modelIn = new FileInputStream("pt-pos-maxent.bin");
POSModel model = new POSModel(modelIn);
// load the pos tagger
POSTaggerME tagger = new POSTaggerME(model);
// load the pos tagger
String sent[] = new String[]{"Quem", "casa", "quer", "casa", "."};
String tags[] = tagger.tag(sent);
34. LTasks.com
● PLN as a Service: http://www.ltasks.com
● Enriquece seu texto com metadados
● Gratuito!
– API calls gratuitas
– Usuários com grandes necessidades podem aumentar a
cota
● Alto desempenho e Alta precisão
● Webservice (quase) pronto para uso
● SDK para diversas linguagens (em desenvolvimento)
● Experimente hoje mesmo!
35.
36.
37. Referências utilizadas
[1] JURAFSKY, D.; MARTIN, J. H. . Speech and Language Processing. 2. ed.: Pearson, 2008.
1024 p.
[2] COLEN, W. Mini-curso Processamento de linguagens naturais: pondo em prática (in
Portuguese), EAIGIME II, August 25-28, 2009
[3] Corretor Gramatical CoGrOO: http://cogroo.sourceforge.net
[4] CoGrOO Comunidade: http://ccsl.ime.usp.br/cogroo/comunidade/
[5] Apache OpenNLP: http://incubator.apache.org/opennlp/
[6] LTasks.com: http://ltasks.com
38. Muito obrigado!
Wesley Seidel William Colen
@wseidel @wcolen
LTasks.com
O seu aplicativo entendendo o seu texto.
http://www.campus-party.com.br/
Notes de l'éditeur
Contraste entre língua natural e língua formal de acordo com a Filosofia da Linguagem: In the philosophy of language, a natural language (or ordinary language) is any language which arises in an unpremeditated fashion as the result of the innate facility for language possessed by the human intellect. A natural language is typically used for communication, and may be spoken, signed, or written. Natural language is distinguished from constructed languages and formal languages such as computer-programming languages or the "languages" used in the study of formal logic, especially mathematical logic.
Contraste entre língua natural e língua formal de acordo com a Filosofia da Linguagem: In the philosophy of language, a natural language (or ordinary language) is any language which arises in an unpremeditated fashion as the result of the innate facility for language possessed by the human intellect. A natural language is typically used for communication, and may be spoken, signed, or written. Natural language is distinguished from constructed languages and formal languages such as computer-programming languages or the "languages" used in the study of formal logic, especially mathematical logic.
MOTIVAÇÃO É um campo multidisciplinar com muitos nomes: processamento de fala e língua, engenharia da linguagem humana, PLN, linguística computacional A META desse campo é que ....... Tarefas como .......
Agente de conversação - Programas como o hal q conversam com humanos em linguagem natural são chamados de agente de conversação
Generalização dos buscadores – ao invés de buscar por palavras chaves, que tal fazer uma pergunta completa e bem definida?
Exemplo do que se consegue extrair de um tweet Língua formal: Permite extrair detalhes como o humor do locutor,