Post on 29-Jun-2015
Ambiente de Extração e Avaliação de Opiniões na Web
Danielle Costa RangelEduardo Gomes de SouzaPaulo Rafael Migueis Alem
Projeto final de graduação em Sistemas de InformaçãoOrientação: Valeria Menezes Bastos
Painel apresentado In: XXIX CILAMCE, Iberian Latin American Congress on Computation Methods in Engineering, 2009, Búzios, Brasil
Wisdom of Crowds
O que é Inteligência Coletiva? Pesquisas, mercado financeiro
Tomada de decisão e inferência Como e por que tomamos as decisões que
tomamos Aprendizado de Maquinas Criando agentes racionais
WEB 2.0
Um Objetivo Simples
Inferir uma polaridade baseado numa frase.
Tipos de Avaliação: A nível de documento A nivel de sentença Comparativas
Qual usar? Depende...
Mercado Livre
Anatomia de um Review
Passos
O objetivo pode ser simples, mas a jornada...Resumidamente:
Preparação de dados
Pré-processamento
Classificação
Validação e resultados
Preparação dos dados
Corpora Gutenberg, Brown, Floresta Sintáctica, Reuters, Mac
Morpho...
Precisamos construir um Corpus É só um monte de texto categorizado
Quais as reais necessidades? Tamanho é documento
WebCrawling
Um agente inteligente
Exemplos Googlebot, Yahoo! Slurp, MSNBot...
Bem fácil e divertido de criar, mas pode ficar bem complicado
MultiThreading, select, fork, distribuído, armadilhas...
No problema, nao queremos competir com o Google
Uma imagem vale mais
A mágica do Reactor Pool de deferreds, chamadas assíncronas e callbacks Extração, expressões regulares e parsers
Sobre a Base de Dados
+150 000 páginas
4.7 GB em disco(SQLite)
45635 páginas de produtos
39655 reviews
Mas isso ainda nao é um corpus!
Pré-Processamento
O que acontece aqui? Quase tudo. Gostaria que meus livros tivessem uma função de
busca com CTRL+F...
Scrapping Onde extraímos o que nos interessa
NLP Olhando texto com significado e obtendo relações
Scrapper
Mas que bagunça... A base de dados é só um monte de HTMLs!
E por que não expressões regulares? O sobrinho que sabe fazer páginas e o Frontpage são
seus inimigos
Xpath, CSS Selectors e HTML/XML parsers BeautifulSoup, Lxml, Web::Scraper...
Gerando um Corpus
NLP
Natural Language Processing O que é? É uma área bem abrangente Taggers, parsers, chunkers, lexing, stemming,
classificação, arvores sintaticas, parsers... a lista é grande
NLTK Um framework bem prático. Ótima maneira de
aprender sobre NLP NLTK Book(http://www.nltk.org/book)
Sentenças
Separando Sentenças Punkt Supervisionado
Exemplo: ”Quando eu era jovem, pensava que o dinheiro era a
coisa mais importante do mundo. Hoje, tenho certeza.”
=>['Quando eu era jovem, pensava que o dinheiro era a
coisa mais importante do mundo.', 'Hoje, tenho certeza.']
Palavras
Mesmo conceito, aplicado em sentenças Punkt mais uma vez
Exemplo:”Quando eu era jovem, pensava que o dinheiro era a
coisa mais importante do mundo. Hoje, tenho certeza.”
=>[['Quando', 'eu', 'era', 'jovem', ',', 'pensava', 'que', 'o',
'dinheiro', 'era', 'a', 'coisa', 'mais', 'importante', 'do', 'mundo.'],
['Hoje', ',', 'tenho', 'certeza.']]
POS Tagging
Português Substantivo, adjetivo, pronome, advérbio...
Contexto Posicão e significado
O POS Tagger vai fazer o trabalho sujo:"O aluno sempre presente"=>[('O', 'ART'), ('aluno', 'N'), ('sempre', 'ADV'),
('presente', 'ADJ')]“A criança ganhou um presente”=>[('A', 'ART'), ('criança’, 'NN'), ('ganhou', 'V'), ('um',
'ART'), ('presente', 'N')]
O Tagger Mais Simples do Mundo
O POS Tagger nao é mágico Como ele consegue determinar o tipo de classe
gramatical? É aquilo que o Adriano não gosta de fazer Mac Morpho Características do Mac Morpho
Precisão de 0.20843979451870578
N ART NPROP PREP V PREP|+ , ADJ ADV KC PCP "
236462 151891 114318 104364 98056 78274 68494 53372 30653 28262 23092 21069
Vamos complicar
0.20 de precisão é QUASE inútil, para qualquer proposito prático
Precisamos usar o corpus de maneira eficiente Ngram Taggers “N-Grams são tuplas de palavras que são encontram
juntas repetidas vezes” Unigram Tagger Analiza uma palavra por vez
Bigram Tagger Analiza de duas em duas
Trigram Tagger Analiza Três... E geralmente pára por aqui mesmo
Combinando Taggers
O Problema de analisar muito contexto Dificuldade em classificar
Backoffs! Ou ”Quando você esgotar as possibilidades, pode vir
falar comigo” A Mistura final: Um BigramTagger com backoff para um
UnigramTagger com backoff para TaggerDefault Para Substantivos
Precisão 0.90597348107904574,
Extração de Features
Reforçando: definição de Feature Para que? Não necessariamente saberemos de antemão o que
estamos avaliando Hidden Features
Exemplo:“A bateria tem curta duração.”
Qual o feature nessa sentença?
Label Sequencial Rules
Minerando sequências com a frase anterior era possível obter
[(A,ART),(bateria,N),(tem,V)][(bateria,N),(tem,V),(curta,ADJ)]
Onde o feature em questão é a bateria O que fazer com isso? Guarde [(A,ART),($feature,N),(tem,V)] [($feature,N),(tem,V),(curta,ADJ)]
Com essas LSRs fica fácil descobrir features
Minerando LSRs Com o N95
Seeds =['interface', 'camera', 'gps', 'wifi', 'bluetooth', 'bateria', 'tela', 'memoria']
[($feature,NN)(se,PROPESS)(tiver,V)] [(gps,NN)($feature,NN)(bluetooth,NN)]
[(de,PREP)($feature,NN)(e,KC)] [($feature,NN)(não,NN)(tem,V)]
[($feature,N)(grande,ADJ)(de,PREP|+)] [($feature,NN)(roda,N)(bem,ADV)]
[(excelente,ADJ)($feature,NN)] [($feature,N)(branca,ADJ)(c,N)]
[($feature,N)(mas,KC)(vale,V)] [($feature,N)(que,PRO-KS-REL)(neste,NN)]
[($feature,NN)(não,NN)(estão,NN)] [($feature,N)(apesar,PREP)(de,PREP)]
[($feature,NN)(e,KC)(infravermelho,ADJ)]
[($feature,NN)(muito,ADV)(instável,NN)]
Usando LSRs em Outros Reviews
Usando as LSRs nos reviews de Iphone tivemos resultados satisfatórios
Feature Frequência Feature Frequência Feature Frequência
áudio 252 fácil 84 Ladrões 42
ipod 210 som 84 Ouvidos 42
tela 168 installer 84 Intuitivo 42
apple 126 sensor 84 Rápido 42
touchscreen 126 conexão 84
Classificação
Algoritmos disponíveis SVM, bayes, redes neurais, arvores de decisão...
Os Escolhidos: Naïve Bayes e Arvores de Decisão Por que Naïve Bayes? Por que Árvores de Decisão? E a análise linguística, entra em algum lugar? Classificação → Positivo ou Negativo Neutro complicaria
Treinando os Classificadores
O treinamento é simples É só ter a entrada organizada!
Classificando
”Achei a bateria do iphone muito fraca”=> 'neg' Ambos classificadores obtiveram a mesma
resposta A precisão dos dois é parecida, com leve vantagem
para o Naive Bayes(0,916666667) e Árvore de Decisão(0,8888889)
Agora ja é sumarizar as opiniões!
Obrigado!
Perguntas?
Contato: paulo.alem@gmail.com