Uploaded by danielmrocha

IGTI-Apostila

advertisement
Análise de Sentimento e Processamento de Texto
Daniel Medeiros Rocha
2018
Análise de Sentimento e Processamento de Texto
Daniel Medeiros Rocha
© Copyright do Instituto de Gestão e Tecnologia da Informação.
Todos os direitos reservados.
ASP-Análise de Sentimento e Processamento de Texto – Página 2 de 101
Sumário
Capítulo 1.
Análise de Sentimento ........................................................................ 5
1.1 Introdução à Análise de Sentimento .......................................................... 5
1.2 Análise de Sentimento em Redes Sociais ................................................. 9
Capítulo 2.
Processamento de Linguagem Natual (PLN) .................................... 14
2.1 Introdução................................................................................................ 14
2.2 Aplicações ............................................................................................... 17
2.3 Estrutura e sintaxe da Linguagem ........................................................... 20
2.4 Desambiguação....................................................................................... 23
2.5 Análise Semântica ................................................................................... 24
Capítulo 3.
Técnicas de Machine Learning.......................................................... 32
3.1 Introdução................................................................................................ 32
3.2 Aprendizagem supervisionada ................................................................ 37
3.3 Aprendizagem Não-supervisionada......................................................... 39
Capítulo 4.
Classificadores .................................................................................. 42
4.1 Introduçção à Python ............................................................................... 42
4.2 Naive Bayes ............................................................................................ 58
4.3 Support Vector Machines ........................................................................ 60
4.4 K-Means .................................................................................................. 66
Capítulo 5.
Frameworks e bibliotecas para Machine Learning e ASP ................. 71
5.1 Weka ....................................................................................................... 71
ASP-Análise de Sentimento e Processamento de Texto – Página 3 de 101
5.2 Pandas e SciKit-Learn ............................................................................. 73
5.3 DialogFlow ............................................................................................... 77
5.4 NTLK ....................................................................................................... 80
Capítulo 6.
Coleta de Dados na web ................................................................... 81
6.1 Bases de dados para Machine Learning ................................................. 81
6.2 Modelando bases de dados com Pandas e SciKit-Learn ........................ 84
6.3 API do Twitter para coleta de Dados ....................................................... 86
6.4 API do Facebook para coleta de Dados .................................................. 88
Capítulo 7.
Processamento e classificação de Texto .......................................... 90
7.1 Introdução................................................................................................ 90
7.2 Técnicas de Pré-Processamento............................................................. 91
7.3 Normalização........................................................................................... 95
7.4 Classificação de Textos (algoritmos) ....................................................... 96
7.5 Similaridade entre textos com Affinity Propagation ................................. 99
Referências
101
ASP-Análise de Sentimento e Processamento de Texto – Página 4 de 101
Capítulo 1. Análise de Sentimento
1.1 Introdução à Análise de Sentimento
No Brasil, as pesquisas sobre Análise de Sentimento ainda estão se
estabelecendo.
Os trabalhos sobre a área de análise de sentimento, mineração de opinião e
outros temas relacionados, começaram a surgir com mais frequência após os anos
2000 e o número de pesquisas sobre o assunto vem crescendo.
O número de trabalhos sobre o tema ainda é bem limitado, principalmente
devido a complexidade em se trabalhar com texto, principalmente advindos de redes
sociais, que são desestruturados e o processo para fazer o tratamento exige um
custo de tempo alto.
É evidente o crescimento da quantidade de informação disponível na Web
nos últimos anos. Além do conteúdo disponibilizado por empresas de notícias, os
usuários passaram a compartilhar na Web seus conhecimentos, críticas e opiniões
em blogs pessoais, sites de relacionamentos, microblogs, dentre outros meios. Com
este aumento da participação dos usuários nos conteúdos da Web, surgiu também
uma nova área de pesquisa relacionada ao Processamento de Linguagem Natural,
chamada de Análise de Sentimentos ou Mineração de Opinião.
Para a Aprendizagem de Máquina, essa montanha crescente de dados
oferece um vislumbre fascinante da consciência coletiva dos usuários de internet.
A Análise de Sentimentos visa identificar o sentimento que os usuários
apresentam a respeito de alguma entidade de interesse (um produto específico,
uma empresa, um lugar, uma pessoa, dentre outros) baseado no conteúdo
disponível na Web. O objetivo principal é permitir que um usuário obtenha um
ASP-Análise de Sentimento e Processamento de Texto – Página 5 de 101
relatório contendo o que as pessoas andam dizendo sobre algum item sem precisar
encontrar e ler todas as opiniões e notícias a respeito.
Cada vez mais pessoas e principalmente empresas, estão interessadas em
observar as opiniões de um grupo de pessoas sobre temas que lhe interessam. Um
caso comum é uma empresa que se interessa em medir a aceitação de um novo
produto, monitorando as opiniões de um grupo em relação a ele. A análise de
sentimento é um tipo de mineração de dados que possibilita tal demanda.
Utiliza-se ontologia para a realização da mineiração, além de graus
numéricos para indicar o quanto uma palavra ou expressão indica o sentimento.
Não é analisado o que o conteúdo dos textos expressa, mas sim a emoção
predominante no mesmo (positivo ou negativo dentre outros).
Figura 1: Google trends – pesquisa abrangendo o termo Sentiment Analysis
Pesquisas atuais nos sugerem como a área tem tido um aumento muito
grande nestes últimos anos e tende a continuar crescendo.
Especificamente para a língua portuguesa, o número de trabalhos neste tema
é ainda mais limitado.
Encontram-se ainda poucos trabalhos bons que fazem a análise de textos
na língua portuguesa, e os trabalhos existentes em sua maioria não apresentem
resultados satisfatórios.
ASP-Análise de Sentimento e Processamento de Texto – Página 6 de 101
Aplicações práticas
A análise de sentimentos pode ser aplicada hoje nos seguintes cenários:
Sentimento sobre um produto: Esta análise pode ser usada por uma empresa
para determinar a aceitação de um certo produto lançado no mercado, contribuindo
para alterações estratégicas nas âreas de marketings. Ainda é possível verificar o
sentimento sobre um produto que foi anunciado mas ainda não foi lançado, podendo
ajudar em algumas alterações durante o desenvolvimento.
Empresas na bolsa de valores: Este cenário é usado para analisar empresas que
contem ações na bolsa de valores. O sentimento sobre determinada empresa pode
ser obtida através da opinião de especialistas e sites de notícias. O analisador ajuda
na tomada de decisão sobre compras e vendas de ações, mas não deve ser um
fator decisivo.
Análise sobre pessoas: O minerador de opinião pode ser usado para se obter o
sentimento sobre determinada pessoas, especialmente daqueles que aparecem
muito na mídia. É possível saber, por exemplo, a aceitação ou rejeição de um
determinado político durante a época de eleições, dando alternativa para que o
político altere sua estratégia de campanha.
Os dados para uma análise podem ser obtidas de diversas fontes na internet,
antigamente restrito a blogs e fóruns, hoje se expande as redes sócias. Algumas
das fontes de minerações:
Mecanismos de busca: É possível usar mecanismos de busca como Google ou
Bing para obtenção de opiniões na internet, principalmente em fóruns e blogs, mas
podendo estender a qualquer site. Este método de obtenção de opinião é variável,
conforme a ferramenta de busca altera seus resultados, e não é muito acurado,
sendo que páginas favorecidas pela mecanismo de busca podem alterar o
ASP-Análise de Sentimento e Processamento de Texto – Página 7 de 101
resultado. O site whatdoestheinternetthink.net possui um algoritmo para saber a
opinião da internet sobre determinado assunto, utilizando a ferramenta Bing.
Twitter: O twitter é um ótimo local para se obter opinião sobre determinado assunto,
já que é uma rede social focada em opiniões de usuários. Ele possui mais de 500
milhões de tweets diários (2015), e os tweets são, em sua maioria, públicos,
fornecendo uma base rica em informação e de facil acesso. O site sentiment140
(http://www.sentiment140.com) obtém informações de tweets recentes sobre
determinado assunto e forma um gráfico analisando as opiniões dos úsuarios.
Facebook: O facebook possui uma grande quantidade de usuários (1 bilhão de
usuários ativos em outubro de 2012). Os usuários podem demonstrar suas opiniões
através de mensagens, compartilhamentos e “likes”. A obtenção destes dados pode
não ser tão trivial em comparação ao twitter, já que não é possível obter estas
informações de forma simples, podendo ser necessário a instalação de aplicativos.
O Facebook possui uma ferramenta em suas fan pages chamada “Facebook
Insight”, ele não funciona exatamente como um minerador de opiniões, mas possui
informações sobre a página, incluindo feedbacks negativos.
Etapas da mineração de opinião
O processo de mineração de opinião consiste basicamente em 3 etapas. Como
segue:

Coleta de conteúdo;

Classificação;

Sumarização dos resultados
ASP-Análise de Sentimento e Processamento de Texto – Página 8 de 101
Figura 2: Estrutura de classificação de análise de sentimento
1.2 Análise de Sentimento em Redes Sociais
A Análise de Sentimento em redes sociais vem sendo explorada em
diferentes tipos de pesquisas, tendo como principal intuito extrair opiniões dos
usuários, possibilitando que informações significativas sejam obtidas.
As redes sociais vem se tornando uma importante fonte para análise de
dados, uma vez que nestas estão dados advindos de diferentes perfis de usuários
sobre os mais diversos assuntos.
Redes sociais online, são serviços Web que permitem que os indivíduos
construam perfis públicos ou semi-públicos dentro de uma comunidade virtual na
Internet, articulem uma lista de outros usuários com os quais compartilham
ASP-Análise de Sentimento e Processamento de Texto – Página 9 de 101
conexões e visualizem e percorram as suas listas de conexões e outras listas feitas
por outros usuários no sistema.
Um exemplo de rede social online é o Twitter - http://www.twitter.com
Especificamente para análise de sentimento, o Twitter é uma base rica, pois
concentra publicações de usuários com tamanho padronizado, e na grande maioria
estão na forma textual.
O Twitter é um serviço de microblog popular onde os usuários postam
mensagens de status.
Figura 3 – Página inicial do Twitter
As mensagens de status postadas pelos usuários são chamadas de tweets.
ASP-Análise de Sentimento e Processamento de Texto – Página 10 de 101
Essas mensagens são textos curtos, podendo ter no máximo 140
caracteres.
Segundo o site do Twitter, essa rede social possui mais de 500 milhões de
usuários, dos quais 284 milhões são usuários ativos na rede. Cerca de 500 milhões
de tweets são publicados diariamente.
Figura 4: Exemplo de postagem no Twitter do General do Brasil Vilas Boas
A quantidade enorme de dados pode ser usada para fornecer insights da
opinião do público sobre vários tópicos diferentes, desde política até filmes e
produtos.
Para poder extrair essas informações dos tweets, as aplicações precisam
realizar a análise de sentimento dessas mensagens, que consiste em categorizar o
sentimento de um texto como positivo ou negativo de acordo com o seu conteúdo.
Como o volume de dados é muito grande, é inviável processar esses tweets
manualmente para deles extrair as informações necessárias.
Por isso, muitas organizações estão aderindo a formas automáticas de
extração das referidas informações.
ASP-Análise de Sentimento e Processamento de Texto – Página 11 de 101
Sem dúvidas, trata-se de um ambiente propício a pesquisas e, como tal, vem
sendo explorado tanto pela indústria quanto pela academia, principalmente nos
últimos anos.
iFeel
iFeel - Uma ferramenta online para análise de sentimentos.
Como uma esforços em buscar e agrupar diversos métodos na literatura, o
departamento de computação (DCC) da UFMG, disponibilizou o serviço “iFeel [Araújo et al., 2014]”. - www.ifeel.dcc.ufmg.br.
O serviço/aplicativo, facilita o acesso a diversos métodos de análise de
sentimentos, sendo uma ferramenta bem útil para aqueles que gostariam de ter
contato com a análise de sentimento mesmo sem conhecimento da área.
O iFeel também pode ajudar pesquisadores que pretendem avaliar novos
métodos em uma única plataforma.
Figura 5: Página inicial do iFeel
ASP-Análise de Sentimento e Processamento de Texto – Página 12 de 101
Figura 6: Exemplo de classificação de polaridade da sentença inserida
ASP-Análise de Sentimento e Processamento de Texto – Página 13 de 101
Capítulo 2. Processamento de Linguagem Natual (PLN)
2.1 Introdução
A classificação de documentos/textos é uma das tarefas importantes e
típicas no aprendizado de máquina supervisionado (ML). Atribuir categorias a
documentos, que podem ser uma página web, livro de biblioteca, artigos de mídia,
galeria, etc. tem muitos aplicativos como filtragem de spam, roteamento de e-mail,
análise de sentimentos, etc. Será demonstrado nos próximos capítulos, como
podemos fazer texto classificação usando python, scikit-learn e o framework NLTK.
Linguagem Natural é definida como uma linguagem que é usada para a
comunicação diária de humanos.
Chama-se Processamento de Linguagem Natural (PLN) um conjunto de
técnicas teórico-computacionais que visam representar dados textuais e processar a
linguagem natural humana para diversas tarefas.
Qualquer tipo de manipulação por computador de uma linguagem natural é
definido como um PLN.
Ao contrário de linguagens artificiais, como linguagens de programação e
notações matemáticas, linguagens naturais evoluíram através das gerações, sendo
difícil muitas vezes explicar as suas regras de construção.
Por um lado, pode ser simples como contar a frequência de palavras para
comparar diferentes estilos de escrita.
Por outro lado, PLN envolve entender a comunicação humana e conseguir
dar respostas úteis para perguntas feitas por humanos.
PLN está voltado, essencialmente, a três aspectos da comunicação em
língua natural:
ASP-Análise de Sentimento e Processamento de Texto – Página 14 de 101

som: fonologia

estrutura: morfologia e sintaxe

significado: semântica e pragmática
A fonologia está relacionada ao reconhecimento dos sons que compõem as
palavras de uma língua.
A morfologia reconhece as palavras em termos das unidades primitivas que
a compõem (Ex. caçou → caç + ou).
A sintaxe define a estrutura de uma frase, com base na forma como as
palavras se relacionam nessa frase. (veja figura)
Figura 7: Exemplo de uma árvore sintática
A semântica associa significado a uma estrutura sintática, em termos dos
significados das palavras que a compõem. Na estrutura da figura [7], podemos
associar o significado “um animal perseguiu/capturou outro animal”.
ASP-Análise de Sentimento e Processamento de Texto – Página 15 de 101
O aspecto pragmático, verifica se o significado associado a uma estrutura
sintática é realmente o significado mais apropriado no contexto considerado (ex. no
contexto predador-presa, “perseguiu/capturou” → “comeu”.
Para a análise de sentimento por PLN, existem diferentes tipos de análise:
1. Nível de documento: o objetivo é saber o sentimento geral do texto
sobre o assunto a que ele se refere. O mesmo texto pode conter frases
positivas e negativas sobre o assunto e é preciso consolidar o
sentimento predominante do texto.
2. Nível de sentença: o objetivo é saber o sentimento de uma sentença do
texto. A mesma sentença pode ter sentimentos conflitantes e, da
mesma forma, a intenção é saber o sentimento predominante da
sentença.
3. Nível de palavra: o objetivo é saber se uma determinada palavra no
texto tem conotação positiva ou negativa.
Em alguns casos, o documento ou sentença não apresenta nenhum
sentimento ou opinião. Por isso, para algumas aplicações, é necessário saber se um
determinado documento é objetivo ou subjetivo.
O nível de análise do sentimento extraída de um texto depende da aplicação.
pode ser mais interessante saber sobre alguns aspectos específicos do produto,
como a bateria ou a resolução da tela por exemplo e isso inclui o contexto do objeto
ou texto a ser analisado.
A análise de sentimentos de tweets é uma tarefa relacionada à análise de
sentimentos tradicional, com algumas peculiaridades.
Por um lado, a análise de tweets pode ser considerada mais fácil do que a
análise de textos tradicionais pelo tamanho curto dessas mensagens, o que faz com
que normalmente elas sejam mais objetivas na opinião que querem expressar.
ASP-Análise de Sentimento e Processamento de Texto – Página 16 de 101
Por outro lado, o uso de gírias, abreviações, sarcasmo, emoticons, hashtags,
menções e links podem dificultar o trabalho de processamento desses textos,
tornando-os mais difíceis do que textos tradicionais.
A análise de sentimentos de tweets normalmente é usada para analisar a
opinião geral dos usuários sobre um determinado tópico, normalmente através de
filtros de hashtags, usuários ou termos. Na maioria dos casos para análise de
sentimentos no Twitter por exemplo, é suficiente extrair se o tweet em questão,
apresenta uma opinião positiva ou negativa.
2.2 Aplicações
PLN é uma área de pesquisa muito vasta, que envolve diversas disciplinas do
conhecimento humano.
Cito aqui as aplicações mais utilizadas hoje em dia:
Sumarização automática: Produz um resumo legível de uma parte do texto. Muitas
vezes usado para fornecer resumos de texto de um tipo conhecido, como artigos na
seção financeira de um jornal.
Resolução de correferência: Dada uma frase ou um pedaço maior de texto,
determina
quais
palavras
("menções")
se
referem
aos
mesmos
objetos
("entidades”).
Análise do Discurso: Uma tarefa é identificar a estrutura discursiva do texto
conectado.
Máquina de tradução: Tarefa de traduzir automaticamente texto de uma linguagem
humana para outra.
Segmentação morfológica: Separa palavras em morfemas individuais e identifica
classes de morfemas. (Um morfema é a menor unidade gramatical de uma língua).
ASP-Análise de Sentimento e Processamento de Texto – Página 17 de 101
Geração de linguagem natural: Converte informações de bancos de dados de
computador ou intenções semânticas em linguagem humana legível.
Compreensão
da
linguagem
natural:
Converte
pedaços
de
texto
em
representações que são mais fáceis de manipular pelos programas de computador.
Figura 8: exemplo de robô (Ed) educativo criado pelo Brasil (Petrobrás)
Reconhecimento óptico de caracteres (OCR): Dada uma imagem que representa
o texto impresso, determina o texto correspondente.
Marcação de classe gramatical: Dada uma sentença, determina a classe
gramatical de cada palavra.
Análise sintática (Parsing): Determina a árvore de análise (análise gramatical) de
uma frase.
ASP-Análise de Sentimento e Processamento de Texto – Página 18 de 101
Respostas a perguntas: Dada uma questão de linguagem humana, determina sua
resposta.
Análise de subjetividade: É o mesmo que análise de sentimento.
Reconhecimento de fala: Dado um clipe de som de uma pessoa ou pessoas
falando, determina a representação textual do discurso. (oposto de síntese).
Síntese da fala: É o processo de produção artificial da fala humana.
Recuperação de informações: Trata-se de armazenar, pesquisar e recuperar
informações voltado para bancos de dados.
Figura 9: outro exemplo de chatboot criado para recuperação de informação
com reconhecimento de linguagem natural (empresa sete.zoom).
Um dos problemas existentes a ser analisado e resolvido com PLN hoje em
dia, é a análise de sentimentos.
ASP-Análise de Sentimento e Processamento de Texto – Página 19 de 101
PLN, tem sido estudado por cientistas da computação há bastante tempo,
porém o interesse pela análise de sentimentos é mais recente das aplicações.
2.3 Estrutura e sintax da Linguagem
A estrutura de uma linguagem, é definida por sua gramática. E a gramática, é
uma especificação formal da estrutura das sentenças permitidas numa linguagem.
O modo mais simples de definir uma gramática, é especificando um conjunto
de símbolos terminais, denotando palavras da linguagem, um conjunto de símbolos
não terminais, denotando os componentes das sentenças e um conjunto de regras
de produção, que expandem símbolos não terminais numa sequência de símbolos
terminais e não-terminais.
Além disso, a gramática deve ter um símbolo não-terminal inicial.
Ex.: O gato caçou o rato
Pode ser definido por:
frase => sujeito + predicado
sujeito => artigo + substantivo
predicado => verbo + artigo + substantivo
artigo => o
substantivo => gato / rato
verbo => caçou
Para essa gramática, o símbolo não-terminal inicial definido é “frase”.
Os símbolos terminais são ‘o’, ‘gato’, ‘caçou’, ‘rato’.
ASP-Análise de Sentimento e Processamento de Texto – Página 20 de 101
Nas gramáticas livres de contexto (que é a linguagem natural), o lado
esquerdo de uma regra de produção será sempre um único símbolo não terminal,
enquanto o lado direito pode conter símbolos terminais e não terminais.
Uma gramática pode ser usada tanto para reconhecimento (para decidir se
essa frase pertence à linguagem definida pela gramática ou para geração, ou seja,
para construir uma frase pertencente à linguagem definida pela gramática.
Existem duas estratégias que podemos aplicar para o reconhecimento de
frases:
1. Top Down (árvore sintática)
2. Botton Up
Abordagem Top Down:
Com essa abordagem, sintetizamos a frase a ser reconhecida aplicando as
regras de produção de forma progressiva, em profundidade, a partir do símbolo
inicial da gramática. Por exemplo, para reconhecer a frase “o gato caçou o rato",
procedemos da seguinte maneira:
Conseguindo a gramática evoluir até seu final (nas folhas que são os
símbolos terminais), dizemos que a sentença foi reconhecida pela gramática.
Considere agora a frase: “o gato rato caçou:
Então temo:
ASP-Análise de Sentimento e Processamento de Texto – Página 21 de 101
Frase
sujeito + predicado
artigo + substantivo + predicado
“o” + substantivo + predicado
“o” + “gato” + predicado
“o gato” + verbo + artigo + substantivo
=>onde está o verbo na frase? A gramática não reconhece.
Abordagem Botton Up:
Com essa abordagem, derivamos o símbolo inicial da gramática a partir da
frase a ser reconhecida, aplicando as regras de produção de forma regressiva.
Por exemplo, para reconhecer a frase “o gato caçou o rato", procedemos da
seguinte maneira:
Obtivemos o símbolo não terminal “frase”, da gramática à partir da frase
sendo reconhecida.
Então a frase pertence à linguagem definida pela gramática!
ASP-Análise de Sentimento e Processamento de Texto – Página 22 de 101
2.4 Desambiguação
Ambiguidade léxica, acontece quando uma palavra tem mais de um possível
significado.
Para exemplificar, pode-se citar a palavra “bala”, que pode ser utilizada no
sentido de um doce ou de uma munição!
O problema da ambiguidade lexical veio da necessidade de escolher por um
dos possíveis significados de uma palavra quando da sua interpretação, relações
semânticas.
O tratamento da ambiguidade léxica é um estudo amplo na área de
processamento de linguagem natural.
Na criação de modelos para a tarefa de desambiguação léxica de sentido, os
seguintes passos são considerados:
1. Determinar o conjunto de palavras a serem desambiguadas;
2. Definir todos os sentidos possíveis de cada palavra
3. Avaliar o mecanismo estabelecido.
Determinar o conjunto das palavras que precisarão passar pelo tratamento da
desambiguação depende da aplicação do mecanismo. Alguns trabalhos realizam a
desambiguação de todas as palavras de conteúdo da língua.
Desambiguação no sentido da palavra, é a tarefa mais crítica na área de
linguística computacional.
É considerado um problema de difícil solução no ramo da IA (Inteligência
Artificial).
ASP-Análise de Sentimento e Processamento de Texto – Página 23 de 101
Na grande maioria das vezes, a ambiguidade pode ser resolvida com termos
próximos.
Figura 10: Modelo de tratamento de ambiguidade
2.5 Análise Semântica
Nos tópicos anteriores, vimos como tratar a parte estrutural de uma palavra
e/ou sentença.
O tratamento da ambiguidade se correlaciona com a análise semântica.
Como uma das técnicas de desambiguação se dá trocando uma palavra por
outra, para isto é necessário se embasar no que chamamos de contexto.
A semântica tem como objeto de estudo o significado das expressões da
linguagem natural.
ASP-Análise de Sentimento e Processamento de Texto – Página 24 de 101
A semântica aborda o significado das expressões de maneira mais
independente de quem as usa ou de como são usadas essas expressões.
O estudo do significado pode ser centralizado no significado das palavras,
através da semântica lexical, ou no valor verdade de uma proposição, através da
semântica lógica.
A semântica lexical considera as propriedades referentes a cada uma das
unidades, ou seja, as palavras de uma língua, no léxico.
Um dos primeiros problemas a serem considerados é o fato de algumas
palavras apresentarem múltiplos sentidos. O verbo “ir” por exemplo, apresenta 37
significados baseado no Dicionário Aurélio da língua Portuguesa.
Usando-se um dicionário da língua desejada, definições são dadas em
termos de outros verbos (por exemplo, ir = partir) e desse modo temos dois verbos
compartilhando o mesmo sentido.
Para lidar com os sentidos, é comum organizá-los em classes de objetos, de
acordo como usualmente classificamos as coisas do mundo.
A ambiguidade léxica, se dá quando uma palavra apresenta mais de um
sentido.
Ex.: banco = instituição financeira e/ou artefato feito para sentar.
Temos também a ambiguidade semântica estrutura, advinda de uma
ambiguidade sintática.
Ex.: “Cachorros e gatos felizes vivem na fazenda”
A frase do exemplo anterior, é ambígua em relação ao alcance do adjetivo
“felizes”.
ASP-Análise de Sentimento e Processamento de Texto – Página 25 de 101
Figura 11: estado contextual dos animais
Quem na fig. 11 acima é feliz? Só o gato? Ou o cão e o gato? Este é um
exemplo de ambiguidade de semântica estrutural.
Mais um exemplo semântico:
“Todos os garotos gostam de um cachorro.”
A frase possui dois contextos:
1. Existe um único cachorro que todos os garotos gostam
2. Cada garoto gosta de um cachorro diferente
Os dois significados apresentariam diferentes traduções em formas lógicas, que
constituem o formalismo comumente utilizado para expressar a semântica das
frases da linguagem natural.
A semântica lógica trata o significado através de uma especificação do domínio
de conhecimento, de acordo com a teoria dos conjuntos.
Para expressar o significado de expressões da linguagem natural em lógica, é
preciso traduzir as expressões para uma linguagem lógica. Porém, para dar conta
do alto poder de expressão da linguagem natural, é preciso recorrer a lógicas não
ASP-Análise de Sentimento e Processamento de Texto – Página 26 de 101
clássicas. Essas lógicas incorporam noções mais complexas, como o tempo, por
exemplo (conjugações verbais).
A área de semântica é uma área de estudo mais nebulosa do que a sintaxe, por
apresentar questões que são difíceis de tratar de maneira exata e completa.
A questão do significado está ligada ao conhecimento de mundo e, além disso,
ligada a questões mais obscuras como estados mentais e consciência.

Frase: “o chapéu usa o menino”
Esta frase, apesar de poder ser reconhecida como uma frase da língua pois está na
forma: frase =>
sujeito + predicado. A estrutura sintática é idêntica à sua
inversão, e isto apresenta dificuldade de interpretação sendo necessário definir o
contexto da frase.
Certas aplicações necessitam lidar com a interpretação das frases bem
formadas, não bastando o conhecimento da estrutura.
Em um tratamento automático, a análise semântica consiste em associar a uma
sequência, marcadores linguísticos, “representação interna”, entendida como a
representação do significado da sentença.
A representação de informação semântica pode estar presente no léxico (o que
a torna útil, inclusive, à análise sintática).
“O banco me forneceu um empréstimo”
Identificação de sentido baseado em entradas léxicas com restrições de seleção:
banco -> [- objeto físico], [+ instituição]
banco -> [+ objeto físico], [+ artefato]
Os traços semânticos informados no léxico podem ser ainda utilizados para
restringir as possibilidades de combinações entre as palavras, identificando
incoerências semânticas.
ASP-Análise de Sentimento e Processamento de Texto – Página 27 de 101
As classes semânticas utilizadas em restrições podem ser organizadas
hierarquicamente em ontologias. Uma ontologia é um modelo “extralinguístico” de
conhecimento. Contém informações extralinguísticas organizadas em uma rede de
conceitos, com definições de objetos, relações e propriedades, e as relações entre
estes.
As ontologias apresentam a modelagem do conhecimento associado a um
certo domínio em particular.
As relações entre palavras no português vêm sendo estudadas de modo a
representarmos ligações que sejam importantes, no momento de indexar a
informação contida em documentos escritos, e no momento de recuperá-la. Neste
caso, entretanto, já estamos lidando com conhecimentos que transcendem os itens
lexicais isolados, o que aponta para uma semântica gramatical, e não apenas
lexical.
Formalismos
Na construção das representações semânticas, dois grupos de formalismos
são mais usados.
1. As estruturas do tipo ‘atributo-valor’ e
2. formalismos lógicos
1. Atributo-valor
Canário
Tipo-de: pássaro
Cor:amarelo
Propriedade:assobiar
2. Lógico
ASP-Análise de Sentimento e Processamento de Texto – Página 28 de 101
Figura. 12: Representação semântica em forma de grafo
Os grafos também constituem a forma de representação semântica
denominadas, primitivas de dependência conceitual. Servem para representar
conhecimentos semânticos.
Podemos representar, através de fórmulas lógicas, os conhecimentos
lexicais, cada conceito ou significado, corresponderá um predicado com um número
fixo de argumentos.
Para demonstrar a construção de uma representação semântica através de
uma linguagem lógica podemos recorrer à DCG (Definete Clause Grammars) do
Prolog.
Por exemplo, dar (X, Y, Z) pode representar a ação do agente X de dar o
objeto Y a Z.
ASP-Análise de Sentimento e Processamento de Texto – Página 29 de 101
Figura 13: Consulta semântica definida em PROLOG
Construção de representações semânticas
Usaremos um subconjunto bastante simplificado do português onde os
únicos sintagmas nominais são os nomes (rex, felix) e a seguinte sintaxe.
f--> sn, sv. (predicado)
sv--> v(1). (sujeito-predicado)
sv-->v(2), sn. (sujeito-predicado),(objeto)
v(1)-->[dorme]
v(2)-->[persegue]
sn--> [rex]
sn-->[felix]
ASP-Análise de Sentimento e Processamento de Texto – Página 30 de 101
f(Predicado)--> sn(Sujeito), sv(Sujeito^Predicado)
sv(Sujeito^Predicado)--> v(Sujeito^Predicado)
sv(Sujeito^Predicado)-->v(Objeto^(Sujeito^Predicado)), sn(Objeto)
sn(rex) --> [rex]
sn(felix) --> [felix]
v(X^dorme(X)) --> [dorme]
v(Y^(X^persegue(X,Y))) --> [persegue]
O analisador irá responder à consulta da seguinte forma:
?-f(Semantica,[rex,persegue,felix],[])
Semantica = persegue(rex,felix)
Figura 14: Árvore representação semântica
ASP-Análise de Sentimento e Processamento de Texto – Página 31 de 101
Capítulo 3. Técnicas de Machine Learning
3.1 Introdução
Vimos nos últimos anos uma grande transformação em nosso dia a dia,
proporcionada pelo surgimento de novas tecnologias de comunicação, dados e de
eletrônica embarcada. Todas incorporadas massivamente a dispositivos de nosso
uso diário.
O exemplo mais típico destes novos dispositivos, qualificados como smart
"feliz :-) ", é o aparelho de telefone celular, com tantas funções a mais que a
comunicação de voz.
Dotados de sensores dos mais diversos tipos, estes dispositivos possuem
uma grande capacidade de coleta e armazenamento de dados, proporcionando
também uma conexão a vários serviços e a outros usuários e dispositivos (IoT INTERNET OF THINGS).
A chamada Internet das coisas, definida pela conexão massiva em rede de
diversos dispositivos com algum grau de autonomia vem determinando novas
tendências e modificando padrões atuais de comportamento.
Exemplos destes novos dispositivos, caracterizados como unidade físicocibernéticas (Cyber-Physical Systems Units), podem ser encontrados nas indústrias,
residências, automóveis ou mesmo na forma de agentes de softwares conectados à
Internet.
ASP-Análise de Sentimento e Processamento de Texto – Página 32 de 101
Fig. 15: Representação esquemática de uma CPSU ou Cyber-Physical System
Unit, sendo a unidade cibernética implementada como uma Máquina de
Aprendizado. Livro Braga
Nos últimos anos, fatores como o baixo custo do hardware embarcado, maior
escala de integração de circuitos integrados, baixo custo de armazenamento e
novos paradigmas, levaram a expectativas quanto à implementação massiva de
unidades cyber-physical autônomas.
A capacidade dotada dessas unidades ou máquinas de serem autônomas e
tomarem decisões é o principal objetivo da Aprendizagem de Máquina.
Técnicas de identificação de sentimentos em textos, expressos em linguagens
naturais, como meio de interface entre homem-máquina, que incorporam a figura de
dados a serem identificados e classificados para serem incorporados a estes
sistemas.
Aprendizado
Existem vários algoritmos de classificação e aprendizado. Cada qual com
suas vantagens e desvantagens.
ASP-Análise de Sentimento e Processamento de Texto – Página 33 de 101
A etapa da aprendizagem, consiste em um processo iterativo de ajustes de
valores de parâmetros. Esses algoritmos diferem basicamente pela maneira pela
qual os ajustes dos pesos (valores), são feitos.
Fig. 16: adaptada do livro do Braga para os problemas resolvíveis por IA
Problemas de Regressão
Os problemas de regressão envolvem a estimativa da relação entre variáveis
por meio de métodos de indução de funções a partir de amostras dessas variáveis.
Estimativa é uma função aproximadora.
Como exemplo, considere um processo de combustão industrial, para o qual
deseja-se estimar um valor esperado de uma variável dependente, como por
exemplo a pressão interna de uma caldeira, a partir de variáveis independentes,
como aquela relacionadas à combustão propriamente dita, como as vazões de
combustível e de ar nos queimadores.
ASP-Análise de Sentimento e Processamento de Texto – Página 34 de 101
O objetivo do regressor, seria estimar a pressão, dados os valores das vazões.
A construção ou indução, do regressor, seria realizada por meio de exemplos de
amostras das vazões e da pressão. Assim, o problema de regressão envolve
estimar uma função ou, em outras palavras, os seus parâmetros, que represente a
relação entre variáveis dependentes e independentes.
Fig. 17: Convergência da regressão
Problemas de Classificação
Problemas de classificação envolvem a associação de uma amostra de
entrada a uma classe conhecida. Da mesma forma que nos problemas de
regressão, um vetor de entrada é associado a um valor da variável dependente, a
resposta da função classificadora também resulta em um valor de saída que, neste
caso indica a classe resultante.
O problema de classificação, também é essencialmente um problema de
regressão, já que envolve a busca por uma função discriminante, usualmente obtida
por meio da partição do espaço de entrada em regiões distinta para cada uma das
classes que definem o problema.
ASP-Análise de Sentimento e Processamento de Texto – Página 35 de 101
Como as amostras de mesma classe devem estar espacialmente próximas,
esta caracterização define regiões para cada uma das classes, portanto, o objetivo
da função discriminante é o de identificar as regiões de separação, delimitá-las e
localizar cada classe em suas respectivas regiões.
Fig. 18: separação das classes em regiões distintas no gráfico
Para nosso estudo, aplicaremos as técnicas de Machine Learn em Análise de
Sentimentos. As classes que queremos classificar com a Análise de Sentimos, são
as polaridade do sentimento que as definimos como classes que são:

classe “positiva”

classe “neutra”

classe “negativa”
ASP-Análise de Sentimento e Processamento de Texto – Página 36 de 101
3.2 Aprendizagem supervisionada
No aprendizado supervisionado, os algoritmos são treinados como pares de
conjuntos de entrada e de saída desejadas. Os dados de entrada são comparados
com um conjunto de valores de saída desejados.
Fig. 19: Aprendizagem supervisionada
No aprendizado supervisionado, quando treinamos o algoritmo, utilizamos
um conjunto de dados que já são mapeados para categorias desejadas. Ao
associarmos ao algoritmo, este deverá ter a capacidade de verificar o resultado
previsto e o resultado esperado e conforme a diferença de resultado, ajustar seus
parâmetros internos até obter o resultado esperado.
Cada exemplo de treinamento é descrito por um conjunto de atributos que
servem como dados de entrada que são associados a um valor de saída (também
chamado de sinal de controle).
A partir desses conjuntos de entrada e saídas, o algoritmo pode produzir
uma função de inferência capaz de gerar uma saída adequada a partir de uma nova
entrada.
ASP-Análise de Sentimento e Processamento de Texto – Página 37 de 101
Muitos algoritmos são utilizados para criar aprendizagem supervisionadas,
dentre eles os mais comuns como as Redes Neurais, Máquinas de Vetor de Suporte
(SVM), e classificador Naive Bayes.
Exemplo de uso:
O objetivo aqui é classificar a palavra “amor” como sendo da classe positiva ou
negativa:
Base de dados de treinamento:
Palavra
Classe
cachorro
Positive
amor
Negative
ruim
Negative
amor
Positive
amor
Positive
cachorro
Positive
casa
Positive
gato
Positive
gato
Negative
gato
Negative
amor
Negative
casa
Positive
amor
Positive
O primeiro passo é criar uma tabela de frequência das palavras e suas classes.
ASP-Análise de Sentimento e Processamento de Texto – Página 38 de 101
Tabela de probabilidades
Palavra
Positive
Negative
cachorro
2
0
2/13 = 0.15
amor
3
2
5/13 = 0.38
ruim
0
1
1/13 =0.076
gato
1
3
4/13 = 0.30
casa
0
2
2/13 = 0.15
Total
7
6
7/13 = 0.53
6/13 = 0.46
Baseado nas informações de probabilidade de incidência os algoritmos
como o Naive Bayes (estatístico), fazem a inferência (cálculos) das palavras, para
atribuir as polaridades a cada palavra.
3.3 Aprendizagem Não-supervisionada
A aprendizagem não supervisionada, por outro lado, nos permite abordar
problemas com pouca ou nenhuma ideia do que nossos resultados deve ser
aparentar. Podemos derivar estrutura de dados onde nós não necessariamente
saberíamos o efeito das variáveis.
No aprendizado não-supervisionado, os algoritmos não recebem as
informações de saídas desejadas. São fornecidos somente os dados de entrada que
ASP-Análise de Sentimento e Processamento de Texto – Página 39 de 101
por meio de processos de competição por exemplo, se chega ao reconhecimento
dos padrões, ou seja, das características em comum entre o conjunto de dados.
Fig. 20: Aprendizado Não supervisionado
No aprendizado não supervisionado, como o próprio nome sugere, não há
um professor ou supervisor para acompanhar o processo de aprendizado.
Apesar da semelhança entre o aprendizado supervisionado e o aprendizado
dos seres humanos, muitos dos sistemas biológicos ocorrem através de
aprendizado não supervisionado. Os estágios iniciais dos sistemas de visão e
audição no mundo animal por exemplo, são exemplos de aprendizagem não
supervisionada.
Para estes algoritmos, somente os padrões de entrada estão disponíveis
para a rede, ao contrário do aprendizado supervisionado com seus pares de entrada
e saída. A partir do momento em que se estabelece uma harmonia com as
regularidades estatísticas da entrada de dados, desenvolve-se uma habilidade de
formar representações internas para codificar características da entrada e criar
novas classes ou grupos automaticamente.
Este tipo de aprendizado só se torna possível quando existe redundância nos
dados de entrada. Sem redundância seria impossível encontrar quaisquer padrões
ou características nos dados de entrada.
ASP-Análise de Sentimento e Processamento de Texto – Página 40 de 101
Existem
também
diferentes
abordagens
para
aprendizagem
não
supervisionada assim como para supervisionada. Incluem-se, K-Means, Redes
Neurais de Kohonen.
Fig. 21: Exemplo de implementação e visualização do K-Means
ASP-Análise de Sentimento e Processamento de Texto – Página 41 de 101
Capítulo 4. Classificadores
4.1 Introduçção à Python
Segundo pesquisa feita a partir de 2015, esta revelou as ferramentas mais
usadas pela comunidade de Data Science utilizadas atualmente. Segundo a
pesquisa, Python foi considerada a linguagem de programação mais usada pela
comunidade de cientistas de dados.
Python tem inúmeras razões para ser escolhida e podemos citar algumas
como simplicidade, clareza e reusabilidade. A linguagem oferece uma sintaxe
ASP-Análise de Sentimento e Processamento de Texto – Página 42 de 101
simples e objetiva permitindo o programador se focar no problema a ser resolvido
sem se preocupar tanto com detalhes de implementações.
Por exigir que todo o código fonte seja corretamente endentado, sua leitura e
compreensão se torna extremamente clara e organizada, contribuindo para o
aumento de produtividade entre programadores.
Além da grande comunidade no mundo inteiro, Python possui um vasto e
variado conjunto de bibliotecas para se trabalhar com diversas áreas, desde
computação científica, redes, segurança e claro análise de dados.
Vamos citar algumas principais ferramentas e bibliotecas indispensáveis para
trabalhar com Data Science.
Jupiter, é uma aplicação cliente-servidor que permite a edição e execução de
notebooks via browser. Notebooks são documentos que contém código e elementos
visuais como imagens, links, equações.
ASP-Análise de Sentimento e Processamento de Texto – Página 43 de 101
A principal vantagem na utilização de notebooks é para a documentação de
análises e seus resultados de forma dinâmica e interativa além de permitir o rápido
compartilhamento através da sua arquitetura web.
Jupyter utiliza o conceito de Kernels, onde é possível utilizar diferentes
linguagens de programação para executar scripts no mesmo Notebook. Para
documentação por padrão é disponibilizado a linguagem Mark Down que é
amplamente utilizada e compatível com os principais produtos como navegadores,
etc.
O projeto Jupyter é muito utilizado pela comunidade de Data Science ao
redor do mundo.
Diante da frustrante tarefa de manter o ambiente de pacotes para trabalhar
com Data Science homogêneo o Anaconda vem para resolver esse problema
fornecendo um ambiente open source e totalmente integrado com centenas de
pacotes para trabalhar com ciência, matemática, engenharia e análise de dados.
Além dos mais populares e confiáveis pacotes já estarem presentes no
pacote do anaconda é fornecido um aplicativo para o gerenciamento de novos
pacotes chamado conda. Através do conda é possível remover pacotes e bibliotecas
indesejáveis e adicionar outras em seu ambiente caso seja necessário.
ASP-Análise de Sentimento e Processamento de Texto – Página 44 de 101
Anaconda trabalha com as linguagens Python e R e tem versões para executar
tanto em ambiente Linux, Windows e OSX.
Bibliotecas Python
O Python como já descrevemos anteriormente é uma linguagem de
programação bem completa e possui inúmeras bibliotecas para trabalhar com
Análise de Dados.
Apresento uma lista das bibliotecas mais utilizadas e suas aplicações uma breve
descrição.
NumPy : Biblioteca Python para computação
científica. Implementa arrays multidimensionais e permite a fácil execução de
operações matemáticas e lógicas como ordenação, seleção, transformações,
operações estatísticas básicas etc.
Matplotlib : Biblioteca Python 2D para a
visualização e plotagem de gráficos. Pode ser utilizada para gerar diversos tipos de
gráficos como histogramas, gráficos de barras, gráficos de pizza tudo de forma fácil
e rápida.
ASP-Análise de Sentimento e Processamento de Texto – Página 45 de 101
Pandas : Esta biblioteca talvez seja a
mais utilizada para análise de dados. Ela fornece ferramentas para manipulação de
estruturas de dados de forma extremamente simples. Operações complexas que
trabalham com matrizes e vetores podem ser facilmente realizadas com uma ótima
performance.
Scikit-Learn : Biblioteca em Python para trabalhar com
Machine Learn (Aprendizado de Máquina). Contém
diversos algoritmos
implementados, métodos de análise e processamento de dados, métricas de
avaliação etc. Essa também é uma biblioteca extremamente útil para o cientista de
dados.
NLTK é uma plataforma líder para a construção
de programas Python para trabalhar com dados de linguagem Humana (PLN). Ele
fornece interfaces fáceis de usar para mais de 50 corpora e recursos lexicais como
o WordNet, juntamente com um conjunto de bibliotecas de processamento de texto
para classificação, tokenização, stemming, tagging, análise e raciocínio semântico.
A instalação do ambiente de programação assim como a linguagem Python
não tem muito segredo e é uma tarefa simples. No site próprio da linguagem você
possui as versões dos sistemas nas quais roda a plataforma de desenvolvimento e
ASP-Análise de Sentimento e Processamento de Texto – Página 46 de 101
pode-se fazer o download das versões e também possui uma documentação
bastante vasta de sintaxe e exemplos.
Fig. 22: https://www.python.org/ - site official da linguagem
Python é uma linguagem excelente para quem trabalha com “dados”.
Dominar essa linguagem é de suma importância para qualquer pessoa que quer
trabalhar com projetos de Data Science.
Neste tópico vamos conhecer um pouco mais sobre essa linguagem, como
manipular seus operadores, como a linguagem funciona e como fazer tarefas
essenciais para depois podermos aplica-la para resolver nossos problemas assim
como utilizá-la em nossos algoritmos classificadores que abordarei nos próximos
tópicos.
Vamos começar nossa trajetória de aprendizado em programação da
linguagem com um comando bem simples!
>>> print(“Alô Mundo!!”)
Este comando irá imprimir na tela a frase:
>>>Alô Mundo!!
ASP-Análise de Sentimento e Processamento de Texto – Página 47 de 101
Operações Matemáticas
No python, fazer operações matemáticas é muito simples, veja alguns exemplos:
Digite em seu terminal:
>>>2 + 2
>>>4
>>>2 - 2
>>>0
>>>2 * 2
>>>4
>>>2 / 2
>>>1
Veja que fizemos as quatro operações básicas, soma, subtração, multiplicação
e divisão. Tudo de forma simples e sem escrever muito.
Também é possível fazer outras duas operações facilmente, que são a potência e o
módulo:
>>>2 ** 2
>>>4
-> operação de potência de 2
>>>8 % 2
>>>0
-> a operação “módulo” retorna o resto da operação de divisão!
Números Float (flutuantes ou fracionários)
Números float são números reais, ou seja, números fracionados. Veja
alguns exemplos de operações com números float no python:
ASP-Análise de Sentimento e Processamento de Texto – Página 48 de 101
>>>3.6 + 6.4
>>>10
Funções
Python contém diversas funções próprias da linguagem, vejamos algumas funções
mais úteis:
Type: A função type() imprime o tipo de uma variável ou de um valor. Veja,
no caso de alguns números, ao usar a função type() esta irá nos retornar que tipo
está esse dado:
A função retorna em seu valor como a variável sendo do
tipo “inteiro”!
A função retorna em seu valor como a variável sendo do
tipo “float”!
Funções de Conversão
É possível converter variáveis ou valores usando as funções de conversão.
Veja um exemplo, de algumas conversões:
Converte um número float para inteiro:
>>>int(7.0)
>>>7
ASP-Análise de Sentimento e Processamento de Texto – Página 49 de 101
Converte um número float para inteiro, porém, é realizado um arredondamento
do valor:
>>>int(7.5)
>>>7
Converte um número inteiro para float:
>>>float(7)
>>>7.0
As funções são bem úteis, só devemos tomar cuidado no caso de
arredondamento de valores, pois, em alguns casos pode haver uma perda da
informação.
Para arredondamento ou truncagem como pode ser chamado, Python tem
uma função chamada round() que faz essa tarefa:
Por padrão a função round() elimina qualquer valor após a vírgula. É
possível passar como parâmetro para a função, a quantidade de números que
devem ser mantidos após a vírgula.
No exemplo abaixo, a função irá arredondar o valor e manter apenas 2
números após a vírgula, veja:
ASP-Análise de Sentimento e Processamento de Texto – Página 50 de 101
E se quisermos manter 3 números? É só passar por parâmetro para a
função:
Variáveis e Strings
As variáveis no python são de tipagem dinâmica, ou seja, o interpretador
define o tipo de dados conforme a variável recebe dados, sem a necessidade de
que o desenvolvedor tenha que definir o tipo anteriormente.
Por exemplo, veja a declaração e execução a seguir das variáveis no
python:
>>>var1 = 1
>>>var2 = 3
>>>var1 + var2
>>>4
No exemplo acima, criei duas variáveis “var1” e “var2” e somamos os valores
atribuídos à cada variável, como feito anteriormente.
A tipagem dinâmica me dar a liberdade de atribuir um outro tipo de dados
a qualquer uma dessas variáveis, veja o exemplo abaixo:
>>>var1 = “Python é fácil!”
ASP-Análise de Sentimento e Processamento de Texto – Página 51 de 101
>>>print(var1)
>>>Python é fácil
Atribuímos com os comandos acima, uma frase à variável “var1”, ou seja,
agora a variável var1 é do tipo string. Vejam vocês com o comando type:
>>>type(var1)
Manipulação de strings
Trabalhar com strings no Python é muito simples.
A linguagem já possui recursos nativos que ajudam em muito o desenvolvedor.
Como concatenar sentenças? é fácil:
O Python irá concatenar as duas sentenças com o operador de sinal “+” como se
fosse uma operação de soma.
Podemos também contar quantas ocorrências de um caracter temos em
uma frase com o método .count() da string:
Podemos também contar quantas ocorrências de um caracter temos em
uma frase com o método .count() da string:
>>>frase.count(‘a)
>>>2
ASP-Análise de Sentimento e Processamento de Texto – Página 52 de 101
A função len(), te retorna também qual o tamanho de uma frase:.
Ainda com strings podemos obter posições específicas em uma variável
(frase) definindo as posições dos caracteres, vejamos a imagem em nosso terminal:
A função lower() coloca todas as palavras da frase em minúsculo:
Queremos agora saber o índice onde se começa a palavra ‘minúsculo’ na
frase anterior:
ASP-Análise de Sentimento e Processamento de Texto – Página 53 de 101
Listas
As listas são tipos de dados bem versáteis, podem conter dados de tipos
diferentes, podem ser aninhadas e são bem fáceis de manipular.
As estruturas do tipo lista, podem conter tudo misturado itens como sendo
tipos String, Inteiro e Float.
Para acessar valores na lista usamos um índice, ou seja, passamos qual
posição da lista queremos acessar, veja:
No exemplo, imprimimos o valor do terceiro elemento da lista. Os índices
sempre iniciam com o valor 0, onde o 0 significa o primeiro ítem da lista.
A função len(), nos retorna quantos elementos temos na lista:
É possível fazer diversas operações nas listas, como atualização de itens,
exclusão, concatenação, multiplicação de itens etc.
ASP-Análise de Sentimento e Processamento de Texto – Página 54 de 101
Veja algumas operações:
Adicionando novos itens a lista:
Para remover um elemento da lista, utilizamos o comando “del”:
Podemos também concatenar 2 listas  :
ASP-Análise de Sentimento e Processamento de Texto – Página 55 de 101
Dicionários
Os dicionários são estruturas de dados bastante útil. Basicamente num
dicionário temos uma chave e um valor para cada chave, onde essas chaves são
únicas, mas os valores podem se repetir.
Os valores das chaves podem ser de qualquer tipo, tais como inteiros,
strings, listas etc.
Vamos ver alguns exemplos de dicionários e algumas operações envolvendo
essa estrutura de dados.
Para criar um dicionário faça:
No exemplo acima, criamos um dicionário com 2 chaves, repare que a
sintaxe é diferente das listas, este usa as chaves {} entre os itens e seus valores.
O nome do nosso dicionário é “dic”, e se quiséssemos acessar o ítem nome
seria:
ASP-Análise de Sentimento e Processamento de Texto – Página 56 de 101
Importante : Para definir o dicionário usamos as chaves “{}”, mas para
acessar as chaves do dicionário usamos os colchetes “[]”.
Para adicionar mais chaves ao dicionário fazemos:
Para remover uma chave, por exemplo a chave ‘Sexo’, use a instrução ‘del’:
ASP-Análise de Sentimento e Processamento de Texto – Página 57 de 101
4.2 Naive Bayes
Ao estudar Probabilidade e Estatística, um dos primeiros e mais importantes
teoremas que os alunos aprendem é o Teorema de Bayes . Este teorema é a base
do raciocínio dedutivo, que se concentra em determinar a probabilidade de um
evento ocorrer com base no conhecimento prévio das condições que podem estar
relacionadas ao evento.
O Classificador Naive Bayes traz o poder deste teorema ao Aprendizado de
Máquina, construindo um classificador muito simples, mas poderoso. Neste artigo,
veremos uma visão geral de como esse classificador funciona, quais aplicativos
adequados ele possui e como usá-lo em apenas algumas linhas do Python e da
biblioteca Scikit-Learn.
Os métodos Naive Bayes são um conjunto de algoritmos de aprendizado
supervisionados baseados na aplicação do teorema de Bayes com a suposição
“ingênua” de independência entre cada par de recursos. Caso venha de algum
curso como, Ciência da Computação, Matemática ou qualquer outro campo
envolvendo estatística, é muito provável que em algum momento você tenha
encontrado a seguinte fórmula:
P(H|E) = (P(E|H) * P(H)) / P(E)
onde:
P(H|E) é a probabilidade de hipótese ‘H’ dada o evento E, uma probabilidade
posterior.
P(E|H) é a probabilidade de evento ‘E’ dado que a hipótese ‘H’ seja verdadeira.
P(H) é a probabilidade das hipóteses ‘H’ serem verdadeiras (independentemente
de qualquer evento relacionado) ou probabilidade anterior de ‘H’.
P(E) é a probabilidade do evento ocorrer (independentemente da hipótese).
ASP-Análise de Sentimento e Processamento de Texto – Página 58 de 101
Este é o Teorema de Bayes. Apesar de suas suposições aparentemente
simplificadas, os classificadores ingênuos de Bayes têm funcionado muito bem em
muitas situações do mundo real, notadamente a classificação de documentos e a
filtragem de spam. Eles exigem uma pequena quantidade de dados de treinamento
para estimar os parâmetros necessários.
Treinamento e classificação com Naive Bayes, podem ser extremamente rápidos
em
comparação
com
métodos
mais
sofisticados. O
desacoplamento
das
distribuições de características condicionais de classe significa que cada distribuição
pode ser estimada independentemente como uma distribuição unidimensional. Isso,
por sua vez, ajuda a aliviar os problemas decorrentes da maldição da
dimensionalidade.
À primeira vista, pode ser difícil fazer sentido, mas é muito intuitivo se o
explorarmos através de um exemplo:
Digamos que estamos interessados em saber se um e-mail que contém a
palavra “learn” (evento) é spam (hipótese). Se voltarmos à descrição do teorema,
este problema pode ser formulado como:
P(class=SPAM|contains="learn") = (P(contains="learn" |class=SPAM) *
P(class=SPAM)) / P(contains="learn")
A probabilidade de um e-mail contendo a palavra learn ser spam é igual
à proporção de e-mails de spam que contém a palavra learn multiplicada pela
proporção de e-mails sendo spam e dividida pela proporção de e-mails mails
contendo a palavra learn.
Vamos verificar o que este trecho de código faz:
P(class=SPAM|contains="learn") é a probabilidade de um e-mail ser SPAM,
dado que este e-mail contém a palavra “learn”. É isso que estamos interessados
em prever.
ASP-Análise de Sentimento e Processamento de Texto – Página 59 de 101
(contains="learn"|class=SPAM) é a probabilidade de um e-mail conter a
palavra “learn”, dado que este e-mail foi reconhecido como SPAM. Estes são
nossos dados de treinamento, que representam a correlação entre um e-mail
sendo considerado SPAM e esse e-mail contendo a palavra “learn”.
P(class=SPAM) é a probabilidade de um e-mail ser SPAM (sem qualquer
conhecimento prévio das palavras que ele contém). Esta é simplesmente a
proporção
de
e-mails
sendo
SPAM
em
todo
o
nosso
conjunto
de
treinamento. Nós multiplicamos por este valor porque estamos interessados em
saber quão significativas são as informações relativas aos e-mails de SPAM. Se
este valor for baixo, o significado de qualquer evento relacionado a e-mails de
SPAM também será baixo.
P(contains="learn")
é
a
probabilidade
de
um
e-mail
conter
a
palavra “learn” . Esta é simplesmente a proporção de e-mails contendo a
palavra “learn” em todo o nosso conjunto de treinamento. Nós dividimos por este
valor, porque quanto mais exclusiva a palavra “learn”, mais importante é o
contexto em que ela aparece. Assim, se esse número for baixo (a palavra
aparece muito raramente), pode ser um ótimo indicador de que, nos casos em
que ele aparece, é um recurso relevante a ser analisado.
4.3 Support Vector Machines
Máquinas de Vetores de Suporte (SVMs, do Inglês Support Vector Machines),
técnica de Aprendizado de Máquina que vem recebendo crescente atenção nos
últimos anos. As SVMs vêm sendo utilizadas em diversas tarefas de
reconhecimento de padrões, obtendo resultados superiores aos alcançados por
outras técnicas de aprendizado em várias aplicações.
As vantagens das máquinas de vetores de suporte são:

Eficaz em espaços dimensionais elevados.
ASP-Análise de Sentimento e Processamento de Texto – Página 60 de 101

Ainda é eficaz nos casos em que o número de dimensões é maior que o
número de amostras.
Usa um subconjunto de pontos de treinamento na função de decisão
(chamados vetores de suporte), portanto, também é eficiente em termos
de memória.
Versátil: diferentes funções do Kernel podem ser especificadas para a
função de decisão. Os kernels comuns são fornecidos, mas também é
possível especificar kernels customizados.


As desvantagens das máquinas de vetores de suporte incluem:

Se o número de recursos for muito maior que o número de amostras,
evitar o ajuste excessivo na escolha de funções do Kernel e o termo de
regularização é crucial.

As SVMs não fornecem estimativas de probabilidade diretamente, elas
são calculadas usando uma valiosa validação cruzada de five-fold
validação cruzada.
As máquinas de vetores de suporte no scikit-learn suportam vetores de
amostra densos
( numpy.ndarraye
convertíveis
para
isso
por numpy.asarray) e esparsos (qualquer scipy.sparse) como entrada. No
entanto, para usar um SVM para fazer previsões de dados esparsos, ele deve estar
adequado
a
esses
dados. Para
um
desempenho
ideal,
use
C-
ordenado numpy.ndarray(denso) ou scipy.sparse.csr_matrix(esparso)
com dtype=float64.
ASP-Análise de Sentimento e Processamento de Texto – Página 61 de 101
Figura 15 – SVC, NUSVC e LinearSVC - modelos de implementação do SVM
(http://scikit-learn.org/stable/auto_examples/svm/plot_iris.html)
SVC, NuSVCE LinearSVC são modelos de implementação do SVM capazes de
realizar a classificação multi-classe em um conjunto de dados.
Vamos à um exemplo prático:
Carregando o conjunto de dados: (isso pode levar alguns minutos, então paciência)!
from sklearn.datasets import fetch_20newsgroups
twenty_train = fetch_20newsgroups(subset='train',
shuffle=True)
ASP-Análise de Sentimento e Processamento de Texto – Página 62 de 101
Nota: com este comando apenas carregamos os dados de treinamento.
Carregaremos os dados de teste separadamente mais tarde em nosso exemplo.
Pode verificar os nomes alvos (categorias) e alguns arquivos de dados seguindo os
comandos.
twenty_train.target_names #imprime todas as categorias
#imprime a primeira linha do arquivo de dados
print("\n".join(twenty_train.data[0].split("\n")[:3]))
Arquivos de texto são na verdade, séries de palavras (ordenadas). Para
executar algoritmos de aprendizado de máquina, precisamos converter os arquivos
de texto em vetores de recursos numéricos. Nós estaremos usando o modelo bag
of words para o nosso exemplo. Resumidamente, nós segmentamos cada arquivo
de texto em palavras (para o inglês dividido pelo espaço) e contamos o número de
vezes que cada palavra ocorre em cada documento e finalmente atribuímos a cada
palavra um ID inteiro. Cada palavra única em nosso dicionário irá corresponder a
uma característica (característica descritiva).
O Scikit-learn possui um componente de alto nível que criará vetores de
características para nós: 'CountVectorizer'.
from sklearn.feature_extraction.text importContactVectorizer
count_vect = CountVectorizer ()
X_train_counts = count_vect.fit_transform(twenty_train.data)
X_train_counts.shape
No trecho de código criado, ' count_vect.fit_transform (twenty_train.data) ',
estamos aprendendo o dicionário de vocabulário e ele retorna uma matriz
denominada Document-Term de formato [n_amostras, n_características].
ASP-Análise de Sentimento e Processamento de Texto – Página 63 de 101
Apenas contar o número de palavras em cada documento tem um problema,
ele dará mais peso a documentos mais longos do que para documentos mais
curtos. Para evitar isso, podemos usar o termo de frequência (TF - Term
Frequencies ), ou seja, #count (word) / #Total words, em cada documento.
Reduziremos o peso de palavras mais comuns como (o, é, etc.) que ocorre
em todos os documentos. Isso é chamado de TF-IDF, isto é, Frequência de termo
vezes a freqüência inversa do documento.
O trecho de código que nos dá o “TF” e o “TF-IDF” é:
from sklearn.feature_extraction.text import TfidfTransformer
tfidf_transformer = TfidfTransformer()
X_train_tfidf = fidf_transformer.fit_transform(X_train_counts)
X_train_tfidf.shape
A última linha do código nos mostra a dimensão da matriz.
Existem vários algoritmos (classificadores) que podem ser usados para
classificação de texto. Um deles é o Naive Bayes falado no capítulo anterior.
Utilizaremos neste nosso exemplo em questão o algoritmos SVM discutido neste
capítulo.
>>> from sklearn.linear_model import SGDClassifier
>>> text_clf_svm = Pipeline([('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),('clfsvm',SGDClassifier(loss='hinge', penalty='l2', alpha=1e-3,
n_iter=5, random_state=42)),])
>>> text_clf_svm.fit(twenty_train.data,twenty_train.target)
>>> predicted_svm = text_clf_svm.predict(twenty_test.data)
>>> np.mean(predicted_svm == twenty_test.target)
0,9127…
E com isto o classificador nos fornece uma acurácia de 91,3%.
ASP-Análise de Sentimento e Processamento de Texto – Página 64 de 101
Atingimos 91,3% de precisão usando o SVM. Para resultados mais
detalhados fazemos:
>>> from sklearn import metrics
>>> print(metrics.classification_report(twenty_test.target, predicted,
...
target_names=twenty_test.target_names))
...
precision
recall
f1-score
support
alt.atheism
0.95
0.81
0.87
319
comp.graphics
0.88
0.97
0.92
389
sci.med
0.94
0.90
0.92
396
soc.religion.christian
0.90
0.95
0.93
398
micro avg
0.91
0.91
0.91
1502
macro avg
0.92
0.91
0.91
1502
weighted avg
0.92
0.91
0.91
1502
>>> metrics.confusion_matrix(twenty_test.target, predicted)
array([[258,
11,
15,
35],
[
4, 379,
3,
3],
[
5,
33, 355,
3],
[
5,
10,
4, 379]])
Como resultado obtivemos com a matriz de confusão mostrando que as
postagens dos grupos de notícias sobre o ateísmo e o cristianismo são mais
freqüentemente confundidas umas com as outras do que com computação gráfica.
ASP-Análise de Sentimento e Processamento de Texto – Página 65 de 101
4.4 K-Means
Diferente do aprendizado supervisionado onde você informa o computador o
que ele deve procurar e aprender, no aprendizado não supervisionado a gente não
sabe exatamente o que estamos tentando ensinar o computador a aprender. Então
precisamos recorrer à agrupadores lógicos de segmentação para encontrar
similaridade entre os dados da amostra. Tenta-se assim definir um padrão e assumir
que este padrão encontrado é o que estamos tentando ensinar ao computador
(algoritmo), algoritmo vai aprender a encontrar esse padrão sempre quando for
solicitado.
Depois de descoberto o padrão, qualquer item novo que tenha uma
similaridade com aquele segmento (cluster) pode ser inferido que ele “faz parte
daquilo”.
Para exemplificar, pense em um dataset com algumas amostras dispostas
nos eixo X e Y, como o gráfico abaixo:
Figura 16 – distribuição amostral
Seu objetivo é agrupar estes dados baseado em sua similaridades. É
possível bater o olho neste gráfico e ver a separação em alguns grupos. Cada um
de nós que olhar o gráfico pode tentar criar um número diferente de cluster, ou até
mesmo quando a quantidade de cluster for igual, pode-se pensar em
agrupamentos de formas diferentes. Por exemplo, alguns podem ver a separação
com apenas 2 clusters, e poderíamos ter os gráficos:
ASP-Análise de Sentimento e Processamento de Texto – Página 66 de 101
Figura 17: distribuições em 2 grupos (clusters)
Isso pode acontecer de acordo com a interpretação de cada um dos
observadores que encontraram apenas 2 grupos nestes dados. Outros podem
encontrar 3 grupos, e não apenas dois, podendo chegar a definições como estas
outras.
Figura 18: distribuições divididas em 3 clusters
ASP-Análise de Sentimento e Processamento de Texto – Página 67 de 101
Para entender o funcionamento vamos separar em 2 clusters e entender os
passos que o algoritmo K-Means faz como os dados para convergir em um
resultado. Vamos tomar k=2 criando então 2 clusters. O K, de K-Means, é a
quantidade de centróides (pontos centrais dos grupos) que serão criados e ajudará
a encontrará a similaridade dos dados. Uma das formas de iniciar o processo é o
algoritmo inserir o K pontos (centróides) aleatórios iniciais, pode ser qualquer lugar
do plano, para em seguida começar as iterações e encontrar os resultados.
Veja dois pontos aleatórios criados no gráfico, e uma linha tracejada que é
calculada aproximadamente na metade da distância dos pontos Vermelho e Azul.
Figura 19: centroides
Com este segmento, os ítens que estão plotados acima da linha tracejada
fazem parte do grupo vermelho e os de baixo da linha fazem parte do grupo azul. A
primeira iteração do algoritmo é calcular a distância média de todos os pontos que
estão atrelados ao centróide, e então mudar a posição do centróide para o novo
ponto que foi calculado, que é a distância média de todos os pontos que se ligaram
à aquele centróide. Essa mudança de posição do centróide pode alterar os itens que
fazem parte daquele grupo.
Figura 20: alteração dos centróides
ASP-Análise de Sentimento e Processamento de Texto – Página 68 de 101
Figura 21: nova disposição dos clusters
Podemos reparar que após a iteração do cálculo da média, alguns pontos
mudaram de centróide, os pontos que estão marcados em verde passaram do
centróide azul para o vermelho, e o que está marcado em azul passou do centróide
vermelho para o azul, essa iteração de cálculo da média da distância dos pontos até
o centróide ocorre em loop até que nenhum ponto mude de centróide, isso acontece
quando os centróides param de se mover porque já estão na posição central da
distância entre os pontos.
Figura 22: determinação dos padrões
Veja que entre a penúltima iteração e esta não ouve mais mudança de
pontos entre o gráfico e o centróide, fazendo com que o algoritmo K-Means pare
sua execução chegando ao resultado esperado e criando dois grupos, quando um
novo item for incluído no gráfico, ele já terá um grupo que atende aquela região e o
computador já saberá do que se trata o dado novo.
Elbow Method
•
O Elbow Method é uma das formas utilizadas para se escolher a quantidade
de K(clusters) no algoritmo. Se parece com o formato de um “braço” e nós
sempre procurarmos o “cotovelo” pra definir que este é o número aceitável de
K (clusters) a serem criados com base nos dados da amostra. Este método
vai crescendo a quantidade de clusters a partir de 1 e analisando o resultado
melhorado a cada incremento. Quando o benefício parar de ser relevante (um
ASP-Análise de Sentimento e Processamento de Texto – Página 69 de 101
salto entre uma quantidade de cluster e a próxima quantidade) ele entra em
um modelo platô, no qual a diferença da distância é quase insignificante. É
neste momento que entende-se que o algoritmo é relevante com aquela
quantidade de K e então ele deve ser usado pra segmentar os dados do
gráfico. Depois de executar o código do algoritmo do Elbow Method e
olhando para os dados que estamos apresentando como exemplo, um bom
número de K para ele é o número 4.
Figura 23: determinação de centróides
Rodando o algoritmo com 4 centróides, é possível ver a segmentação:
Figura 24: número de centroides e segmentação
Neste cenário, quando qualquer item novo for adicionado na base de dados,
o algoritmo saberá classificar a qual grupo este novo item pertence.
ASP-Análise de Sentimento e Processamento de Texto – Página 70 de 101
Capítulo 5. Frameworks e bibliotecas para Machine Learning e ASP
5.1 Weka
Weka é um projeto open source que significa Waikato Environment for
Knowledge Analysis (Ambiente para Análise de Conhecimento Waikato). Foi
criado como um projeto de Machine Learning pela universidade de Waikato na Nova
Zelândia.
O
projeto tem o
objetivo
de
disseminar técnicas de Machine
Learning através da disponibilização do software para utilização de pesquisadores,
alunos e para resolver problemas reais da indústria além de contribuir com a ciência
pela mundo.
O grande diferencial do Weka além de todo o seu arsenal de métodos e
algoritmos é a sua interface gráfica (GUI – Graphical User Interface) que torna as
tarefas de mineração de dados extremamente fáceis e rápidas. Através da interface
é possível consultar dados em sistemas de bancos de dados, executar métodos de
processamento de dados, executar e configurar parâmetros dos algoritmos e
visualizar os resultados através de gráficos. Tudo isso sem precisar escrever
comandos ou programar.
O weka tem funcionalidades para manipulação de bases de dados (preprocessamento), interface para visualização de dados, e ainda disponível diversos
algoritmos de machine learning e Data Mining. Isso facilita muito a vida dos seus
usuários que não tem que dominar diversas ferramentas para fazer seu trabalho.
Para quem gosta de escrever comandos ou programar scripts o Weka fornece
também acesso a sua vasta coleção de técnicas e algoritmos via API.
ASP-Análise de Sentimento e Processamento de Texto – Página 71 de 101
Figura 25: exemplo de classificação com weka
ASP-Análise de Sentimento e Processamento de Texto – Página 72 de 101
5.2 Pandas e SciKit-Learn
Pandas, talvez seja a biblioteca mais utilizada em projetos de Análise de
Dados e Python. O Pandas é um biblioteca open source amplamente utilizada na
comunidade acadêmica. Esta se tornou extremamente útil pelo seu desempenho e
pela sua capacidade de simplificar tarefas complicadas de manipulação de dados.
Com a biblioteca instalada, o primeiro a ser feito é a importação:
O segundo passo é carregar o dataset em memória. O pandas faz isso de
forma muito eficiente, e como esta base está no formato csv basta usar o
método read_csv():
no comando acima, mandamos carregar o conteúdo do arquivo para a
variável dataset passando
o
caminho
do
arquivo
e
dizendo
qual
é
o separador(sep=’,’) utilizado entre as colunas, que nesse caso é a vírgula. A
variável dataset se torna um dataframe.
Dataframe é uma estrutura de dados com duas dimensões onde linhas
podem ter colunas de tipos diferentes. Veja o tipo da variável com o comando:
Os dataframes são objetos extremamentes flexíveis, podemos armazenar
listas, vetores e até outros dataframes.
Para ver se a base de dados foi carregada corretamente, é interessante
imprimir algumas linhas, o método head() nos permite ver as primeiras linhas.
ASP-Análise de Sentimento e Processamento de Texto – Página 73 de 101
Se quisermos imprimir todas colunas do nosso dataset, temos o comando:
Se quisermos saber quantas linhas tem a base de dados? Use o
método count():
Informações como: desvio padrão, média, valor mínimo e máximo de
colunas, entre outras usamos o comando:
É bem comum em projetos de Data Science ter a necessidade de fazer
processamento dos dados, processamento estes tais como, remover colunas de um
dataset, adicionar colunas, fazer cálculos, etc, utilizamos o Pandas para nos ajudar.
SciKit-Learn
Scikit-Learn é uma biblioteca Python para trabalhar com Machine
Learning.
Com esse framework, já estão implementados diversos métodos, algoritmos
e técnicas bem interessantes que simplificam a vida do desenvolvedor. Entre os
algoritmos
temos
algoritmos
para
classificação, regressão e agrupamento,
incluindo máquinas de vetores de suporte, florestas aleatórias, gradient boosting, kmeans. Possui código aberto, comercialmente utilizável.
Exemplo de utilização:
ASP-Análise de Sentimento e Processamento de Texto – Página 74 de 101
Após importar o módulo vamos carregar o dataset iris com o comando
abaixo:
A variável iris é basicamente um objeto do tipo dicionário que contém os
dados do dataset iris e alguns metadados. Como o dataset iris é rotulado, ou seja,
contém os dados de classe para cada instância, podemos visualizar os dados das
instâncias e as classes através dos métodos data e target.
aplicando o comando target:
Observem que conseguimos visualizar os dados ao executar a propriedade data e
as classes ao executar a propriedade target que em nosso exemplo as classes são
0, 1 e 2.
ASP-Análise de Sentimento e Processamento de Texto – Página 75 de 101
Outra propriedade interessante é a shape:
Podemos observar que temos 150 instâncias de dados e 4 atributos e como classes
temos apenas um vetor de 150 posições relativos a classe de cada instância.
Iremos agora dividir o nosso dataset em uma amostra de treino e teste. Para
isso
usamos
o
método train_test_split disponível
através
do
módulo model_selection. O método train_test_split como o nome já diz nos permite
dividir o dataset em um porcentual definido:
estamos dividindo os dados em uma porcentagem de 40% para teste através
do parâmetro test_size, os dados de treino são armazenados nas variáveis X_train
e X_test com os dados das instâncias e classes respectivamente.
Os dados de teste serão armazenados nas variáveis y_train e y_test:
Como dados de treino temos 90 instâncias e como dados de teste temos 60
instâncias.
Por fim vamos executar um algoritmo de Machine Learning através do
algoritmo e módulo SVM:
ASP-Análise de Sentimento e Processamento de Texto – Página 76 de 101
Importamos o método svm que implementa o clássico algoritmo Support
Vector Machine. Treinamos nosso modelo através do método fit conforme o código
abaixo.
Após treinar o nosso modelos medimos o nosso score passando os dados de teste
para o algoritmo:
5.3 DialogFlow
O Dialogflow é uma plataforma para construir interfaces de conversação
para bots, aplicativos e dispositivos. Oferece aos usuários novas maneiras de
interação, criando interfaces conversacionais baseadas em voz e texto, como
aplicativos de voz e chatbots, com tecnologia de IA. Dialogflow incorpora a
experiência e os produtos de aprendizado de máquina do Google, como o Google
Cloud Speech-to-Text.
O Dialogflow é respaldado pelo Google e executado no Google Cloud
Platform. Utiliza processamento de linguagem natural (PLN). O projeto inicial
chamava-se API-AI antes de ser comprado pelo Google.
ASP-Análise de Sentimento e Processamento de Texto – Página 77 de 101
O api.ai disponibiliza SDK’s em várias linguagens de
desenvolvimento.
Figura 26: Plataforma de utilização do DialogFlow
Uma opção que pode ser bastante explorada, é a implementação
de webhook , onde o api.ai permite que sistemas externos recebam notificações de
eventos que ocorrem na intenção do usuário, possibilitando que seu serviço execute
suas lógicas de negócios ou acesse dados de armazenamento.
Diálogos
•
O api.ai recebe uma query ,que é um texto em linguagem natural ou um
nome de evento enviado para plataforma como dados de entrada, sendo
transformado em seguida em actionable data e retorna dados de saída.
•
O processo de transformar a linguagem natural em dados acionáveis como
contextos e propriedades de intenções, é chamado Natural Language
Understanding (NLU).
Agentes
•
Os agentes podem ser descritos como sendo os módulos NLU. Seu objetivo
é transformar o idioma natural do usuário em dados acionáveis.
Entidades
ASP-Análise de Sentimento e Processamento de Texto – Página 78 de 101
•
As entidades representam conceitos e servem como uma poderosa
ferramenta para extrair valores de parâmetros de entradas de linguagem
natural.
Contextos
•
Contextos são cadeias de caracteres que representam o contexto atual do
pedido de um usuário.
Parâmetros
•
As ações podem ter parâmetros para extrair informações das entradas de
usuários.
Intenções
•
Uma intenção representa um mapeamento entre o que o usuário diz e quais
ações devem ser tomadas pelo seu software.
As interfaces de intenção possuem as seguintes seções:
•
Usuário diz
•
Ação
•
Resposta
•
Contextos
ASP-Análise de Sentimento e Processamento de Texto – Página 79 de 101
5.4 NTLK
NLTK (Natural language tool kit) é um kit de ferramentas de linguagem natural
para se trabalhar em Python
A classificação de documentos / textos é uma das tarefas importantes e típicas
no aprendizado de máquina supervisionado. Atribuir categorias a documentos, que
podem ser uma página web, livro de biblioteca, artigos de mídia, galeria, etc. tem
muitos aplicativos como filtragem de spam, roteamento de e-mail, análise de
sentimentos.
Em contraste com as linguagens artificiais, como as linguagens de
programação e as notações matemáticas, as linguagens naturais evoluíram à
medida que passam de geração para geração e são difíceis de definir com regras
explícitas.
Processamento de Linguagem Natural - ou PNL para abreviar - em um
sentido amplo vamos abranger como qualquer tipo de manipulação de linguagem
natural por computador. Em um extremo, pode ser tão simples quanto contar
frequências de palavras para comparar diferentes estilos de escrita, as tecnologias
baseadas na PNL estão se tornando cada vez mais difundidas.
O NLTK inclui software, dados e documentação extensos, todos podem ser
baixados gratuitamente em http://nltk.org. É uma biblioteca de código aberto.
Possui um conjunto de bibliotecas de processamento de texto para
classificação, tokenização, stemming, tagging, análise e raciocínio semântico.
Possui um guia prático que apresenta os fundamentos da programação ao lado de
tópicos em lingüística computacional, além da documentação abrangente da API, o
NLTK
é
adequado
para
lingüistas,
engenheiros,
estudantes,
educadores,
pesquisadores e usuários do setor.
ASP-Análise de Sentimento e Processamento de Texto – Página 80 de 101
Capítulo 6. Coleta de Dados na web
6.1 Bases de dados para Machine Learning
Um conjunto
de
dados ou
"dataset"
é
uma
coleção
de
dados
normalmente tabulados. Por cada elemento (ou indivíduo) se indicam várias
características. Cada coluna representa uma variável particular. Cada linha
corresponde a um determinado membro do conjunto de dados em questão e cada
valor é conhecido como sendo um dado.
O conjunto de dados pode incluir dados para um ou mais membros,
correspondente ao número de linhas.
Conjuntos de dados não tabulares podem assumir a forma de cadeias de
caracteres envolvidas por marcações, como em um arquivo XML.
UCI Machine Learning Repository - https://archive.ics.uci.edu/ml/datasets.html
Um dos sites mais conhecidos que disponibilizam datasets públicos, o
repositório da UC Irvine contém centenas de datasets em áreas variadas. Podem
ser filtrados por:

Área de interesse

Tipo de tarefa mais apropriada (classificação, regressão, clustering)

Formato das variáveis (categóricas, numéricas)

Tipo dos dados (uma ou mais variáveis, séries temporais)

Quantidade de variáveis independentes

Quantidade de exemplos
ASP-Análise de Sentimento e Processamento de Texto – Página 81 de 101
Além disso, ao acessar a página de um dataset em particular, é possível ver
detalhes como a fonte, informações sobre o problema, variáveis, e o mais
interessante, trabalhos acadêmicos que usam este dataset, que podem ser uma
ótima fonte de idéias e aprendizado para tentar reproduzir.
Quandl - https://www.quandl.com/

Especializado em dados financeiros e econômicos.

Possui uma vasta quantidade de dados macroeconômicos, geopolíticos,
demográficos, bem como dados sobre ações, commodities, futuros,
empresas de capital aberto, até mesmo sobre bitcoin.

Mais de 10 milhões de datasets.

Existem os datasets abertos, grátis, porém uma parte premium, que é paga.
Kaggle - https://www.kaggle.com/

Uma das melhores formas de trabalhar em casos próximos da realidade é
através das competições no Kaggle.

Empresas e instituições acadêmicas disponibilizam dados e um objetivo
(como, por exemplo, descobrir automaticamente se um anúncio está de
acordo com as regras do site).

O objetivo aqui não é falar sobre como ganhar uma competição destas, mas
tratar o site como uma fonte de dados, e também como um referencial sobre
suas habilidades, já que é possível comparar suas soluções com outras de
centenas de pessoas.
Amazon AWS Datasets - https://registry.opendata.aws/

Repositório de datasets disponibilizado pela Amazon, para usar com o
serviço de cloud computing (AWS) da empresa.
ASP-Análise de Sentimento e Processamento de Texto – Página 82 de 101

São datasets gigantescos em áreas como processamento de linguagem
natural para entender pesquisas em mecanismos de buscas, pesquisas
genéticas e dados climáticos.

As áreas são variadas, mas o que há em comum é o tamanho dos dados,
que claramente não cabem na memória e devem ser analisados utilizando
ferramentas específicas para Big Data.
http://dados.gov.br/

Temos também o dados.gov, que é “portal brasileiro de dados abertos”.

Você encontra datasets sobre diferentes áreas e setores do Brasil, de
transportes a saúde.
Portal da Transparência - http://www.portaldatransparencia.gov.br/

Ainda no Brasil temos o “Portal da Transparência”.

Outro lugar interessante para encontrar datasets brasileiros.

Esse site oferece dezenas de informações de investimentos, despesas e
receitas a cerca de diversos setores do Brasil.

O Portal da Transparência foi criado em 2004 pela Controladoria-Geral da
União (CGU) com a intenção de assegurar boa aplicação de recursos.
ASP-Análise de Sentimento e Processamento de Texto – Página 83 de 101
6.2 Modelando bases de dados com Pandas e SciKit-Learn
Existem diversas formas de modelar uma base de dados de texto. A mais
conhecida é chamada de Bag of Words. O modelo baseado em Bag of words utiliza
todas as palavras do texto, a frequência de cada palavra e associa isso a classe do
treino. A frequência das palavras é usada para treinar um modelo.
Imagine as seguintes sentenças:
1. O smartphone é bom, porém não gosto de smartphone grandes ,
Negativo
2. Gostei bastante desse smartphone, mesmo sendo caro, Positivo
O modelo nesse caso, usa todas as palavras da base, ou seja, todas as
palavras das duas sentenças.
{o,
smartphone,é,
bom,
porém,
não,
gosto,
de,
grandes,gostei,bastante,desse,mesmo,sendo,caro}
Em seguida é feita a contagem do número de vezes que cada palavra
apareceu na sentença.
A palavra “smartphone” ficaria com a contagem 2 na primeira sentença. As
outras palavras ficaram com a contagem 1 e 0
{o, smartfone, é, bom, porém, não, gosto, de, grandes, gostei, bastante, desse,
mesmo, sendo, caro}
{1,2,1,1,1,1,1,1,1,0,0,0,0,0,0, Negativo}
Para a sentença 2 a frequência seria representada da seguinte forma:
{o, smartfone, é, bom, porém, não, gosto, de, grandes, gostei, bastante, desse,
mesmo, sendo, caro}
{0,1,0,0,0,0,0,0,0,1,1,1,1,1,1, Positivo}
ASP-Análise de Sentimento e Processamento de Texto – Página 84 de 101
Primeiramente vamos ler a base de dados e contar quantas linhas contém
na base de dados tweets-mg.csv.
dataset = pd.read_csv('tweets-mg.csv)
dataset.count()
Para modelar a base primeiramente é preciso separar os tweets das
classes:
1
tweets = dataset['Text'].values
2
classes = dataset['Classificacao'].values
Em seguida vamos criar o código que treina o modelo usando a abordagem
Bag of Words e o algoritmo Naive Bayes Multinomial.
1
vectorizer = CountVectorizer(analyzer="word")
2
freq_tweets = vectorizer.fit_transform(tweets)
3
modelo = MultinomialNB()
4
modelo.fit(freq_tweets,classes)
Na
linha
01criamos
tipo CountVectorizer chamado vectorizer.
um
Na
linha
objeto
2,
usamos
do
o
objeto vectorizer para calcular a frequência de todas as palavras da lista de tweets e
armazenamos seu retorno em freq_tweets.
Em seguida, criamos um objeto chamado modelo do tipo Naive Bayes
Multinomial. Na linha 4, treinamos o modelo usando a frequência de palavras
(freq_tweets) e as classes de cada instância
ASP-Análise de Sentimento e Processamento de Texto – Página 85 de 101
6.3 API do Twitter para coleta de Dados
A API do Twitter é dividida em três distintas APIs. As mais utilizadas para
análise estatística são a Search API e a Streaming API. A Search API faz um
REST URL e pode ser acessada com um simples HTTP GET.
Ela pode trabalhar em conjunto com a Streaming API, permitindo assim a
coleta de tuítes ao vivo e também a busca no banco de dados do Twitter.
Para
utilizar
a
API
página https://apps.twitter.com/.
precisaremos
de
uma
conta
na
Com a app que teremos acesso as chaves de segurança para utilizar a API.
Figura 27: chaves consumer
ASP-Análise de Sentimento e Processamento de Texto – Página 86 de 101
Figura 28: chaves acces

from TwitterSearch import *

try:

ts = TwitterSearch(

consumer_key = 'IMJh4kjQLGDzUaT9t1v0RXm5Y',

consumer_secret
=
'cjt9d684CpvElXof1BxUMgSakNnFBVLDweQTSpGZolzzrnU8JE',

access_token = '968521944944529408-oI5NcJVaZellwrsPjhsQkQPDeAZJzKf',

access_token_secret
=
'hc7bTI65fG97smD3ZEB6iCjLrBzHBxn2Sp6TIaX8fZSJZ'

)

tso = TwitterSearchOrder()

tso.set_keywords(['iphone'])

tso.set_language('pt')

for tweet in ts.search_tweets_iterable(tso):



print( '@%s tweeted: %s' % ( tweet['user']['screen_name'], tweet['text'] ) )
except TwitterSearchException as e:
print(e)
No código anterior, iniciamos importando todos os objetos e métodos da
biblioteca TwitterSearch com o asterisco. Declaramos as variáveis para a
autenticação como um construtor da classe TwitterSearch.
ASP-Análise de Sentimento e Processamento de Texto – Página 87 de 101
Instanciamos a classe TwitterSearchOrder que contém os métodos para
especificar os termos a serem pesquisados e a linguagem para a consulta,
especificamos o termo iphone através do método set_keywords e definimos a
linguagem pt (português) com o método set_language.
Por fim, simplesmente é feita a consulta e impressa o nome do usuário e
tweet, utilizando o método search_tweets_iterable passando nosso objeto tso que
contém o termo de busca e a linguagem como parâmetro.
6.4 API do Facebook para coleta de Dados
A API gráfica do Facebook é um serviço do tipo RESTful que retorna arquivos
do tipo JSON.
O processo é feito através do envio de uma solicitação HTTP para iniciar
conexão com o Facebook. Isto permite executar métodos GET para retornar dados
a serem analisados via linguagem de programação (Java, Python, PHP, etc.), ou
mesmo sem programação.
Para a extração dos dados desejados, é necessário criar um aplicativo dentro
do Facebook. Isto permite que obtenhamos um número ID e uma chave secreta
para autorização da rede social. A criação requer o uso de uma conta na rede
social.
ASP-Análise de Sentimento e Processamento de Texto – Página 88 de 101
Possuindo
uma
conta
no
Facebook,
entre
no
endereço
http://www.facebook.com/developers e selecione as opções da solicitação para
instalar a aplicação.
É importante esclarecer nesse ponto que a API do Facebook exige, por
questão de segurança, que seu aplicativo seja redirecionado para um servidor que
utilize o protocolo HTTPS.
Nas opções Canvas URL e Secure Canvas URL é necessário informar uma
página HTTPS para que você possa utilizar os dados da rede social que necessitem
de autorização de usuários.
Após
criação
do
aplicativo
acesse-o
através
do
navegador:
https://apps.facebook.com/nome_do_seu_aplicativo.
Depois de criado o aplicativo de teste, somos capazes de usar o PDI e o
método HTTP GET para buscar dados de nossos amigos no Facebook. Tais como:
news feed, Sexo, Idade.
Figura 29: formatos de saídas que podem ser gerados pela API
ASP-Análise de Sentimento e Processamento de Texto – Página 89 de 101
Capítulo 7. Processamento e classificação de Texto
7.1 Introdução
Processamento de texto computacional, é uma técnica usada para tirar
valiosas informações de bases de dados de textos. Qualquer que seja a
manipulação de um texto, string ou palavra, podemos considerar como
processamento de texto.
Atribuições simples de texto a variáveis, conversão de letras, maiúsculas em
minúsculas, tokenização, stemming, todos são exemplos de processamento de
texto.
Para
fazermos
manipulações
mais
elaboradas
e
principalmente
em
textos/documentos grandes, precisamos de mais gerenciamento que podemos dizer
como técnicas.

Bibliotecas, Datasets e scripts

Manipulação de Strings

Trabalhar com linguagem Natural

Pré-Processamento

Dicionários Léxicos

Sentimentos

Partes de Palavras
Todas para por exemplo categorizar e/ou classificar por exemplo, informações
de jornais automaticamente, principais termos utilizados em um tópico de discussão
ASP-Análise de Sentimento e Processamento de Texto – Página 90 de 101
no Facebook, verificar o que as pessoas estão falando de um determinado político
em um tópico do Twitter.
7.2 Técnicas de Pré-Processamento
Quando estamos trabalhando com textos, normalmente precisamos ter que
fazer um pré-processamento nos dados.
É quase impossível não fazer pré-processamento de dados quando
trabalhamos em algum projeto incluindo Processamento de textos. Podemos usar
as expressões regulares para fazer muita coisa.
Imagine uma base de textos onde é interessante remover os números por
exemplo. Quando você quer apenas os termos da base, números pode ser um
problema.
expressão regular:
1
import re
2
texto = 'O numero da nossa casa 56, apto 306'
3
re.sub('[-|0-9]',' ', texto)
A biblioteca nativa do python chamada “re” ajuda muito para implementarmos
as expressões regulares.
Outro Pré-processamento muito útil é a remoção de pontuação da base. As
pontuações em algumas tarefas como Análise de Sentimentos podem ser
interessantes, pois, expressam um sentimento na escrita, Mas em muitos casos,
essas pontuações mais atrapalham do que ajudam.
Veja o uso da biblioteca “re” novamente, agora para remoção de pontuações:
ASP-Análise de Sentimento e Processamento de Texto – Página 91 de 101
import re
texto = "i'm back baby!!!, Data Science ??;;;()"
re.sub(r'[-./?!,":;()\']',' ',texto)
Stemming
Uma técnica extremamente útil, é o Stemming, esta consiste na redução da
palavra até o seu radical. Isso é possível ao remover seus afixos e vogais temáticas
das palavras.
Ex.:
1
stemmer = nltk.stem.RSLPStemmer()
2
stemmer.stem('frequentemente')
3
stemmer.stem('copiar')
Essa técnica causa uma diminuição das palavras da base de dados, por
exemplo, a palavra “copiar” tem seu radical em ‘copi’ o que seria o mesmo no caso
de copiou ou copiava, tudo isso seria reduzido a copi, diminuindo o tamanho total da
base. Uma vantagem é que um modelo que leva em consideração palavras
separadamente, todas as variações de uma palavra poderiam ser tratadas com
apenas uma. Outra vantagem, é que se levado em consideração do tempo
computacional em algumas tarefas, teremos a diminuição de tempo para
processamento.
Abaixo uma função que recebe por parâmetro uma frase ou um texto e retorna
as palavras já com o stemming aplicado:
ASP-Análise de Sentimento e Processamento de Texto – Página 92 de 101
–
def Stemming(instancia):
–
stemmer = nltk.stem.RSLPStemmer()
–
palavras=[]
–
for w in instancia.split():
–
palavras.append(stemmer.stem(w))
–
return (" ".join(palavras))
–
Para chamar a função, basta passar a frase:
Stemming(‘Estamos trabalhando com texto para aprendizagem de máquina’)
1
StopWords
Stopwords são palavras ou artigos muito usados em um texto, como “a”,
“de”, “o”, “da” entre outras. Em muitas tarefas envolvendo NLP é comum a remoção
dessas palavras, pois, em muitos casos essas palavras não ajudam o modelo.
O NLTK já contém um dicionário com as palavras que são consideradas
stopwords em português, veja um exemplo:

1
stopwords = nltk.corpus.stopwords.words('portuguese')
2
stopwords
Na primeira linha crio uma variável chamada stopwords onde será uma lista
das palavras fornecidas pelo nltk
ASP-Análise de Sentimento e Processamento de Texto – Página 93 de 101

Na linha seguinte imprimo a variável com as palavras.
Podemos fazer uma função para remover as stopwords de um texto ou uma
sentença, como fizemos anteriormente:
1
def RemoviStopWords(instancia):
2
instancia = instancia.lower()
3
stopwords = set(nltk.corpus.stopwords.words('portuguese'))
4
palavras = [i for i in instancia.split() if not i in stopwords]
5
return (" ".join(palavras))
A função acima recebe uma instância (uma frase) em seguida transforma a
frase em minúsculo e define uma variável chamada stopwords que conterá o
conjunto fornecido pela Nltk. Em seguida, faz uma interação em cada palavra da
instância e se caso a palavra esteja presente na lista de stopwords esta é removida.
Para chamar a função:
1
RemoviStopWords('Olá pessoas, estou trabalhando com textos para o IGTI')
Dicionários Léxicos

O Wordnet é um grande banco de dados léxico de substantivos, verbos,
adjetivos e advérbios que são agrupados em conjuntos de sinônimos, cada
um expressando um conceito distinto.

Os sinônimos são interligados pelo seu significado semântico conceitual e
suas relações léxicas, dessa forma o Wordnet é uma grande rede de
conceitos interligados.
ASP-Análise de Sentimento e Processamento de Texto – Página 94 de 101
O Wordnet é uma ferramenta amplamente utilizada em pesquisas no mundo
todo, principalmente em trabalhos relacionados com linguística. Na industria essa
ferramenta também é muita usada em projetos de Mineração de Textos. O NLTK
também contém uma interface de acesso ao Wordnet, para começar a trabalhar
com esse dicionário:
from nltk.corpus import wordnet
O comando acima importa o wordnet através do nltk. Para consultar o
sinônimo de uma palavra, faça:
1
wordnet.synsets('bike')
7.3 Normalização
Normalização é um conjunto de regras que visa, principalmente, a
organização de um determinado texto, ou base de dados de texto, para reduzir a
redundância de dados, aumentar a integridade de dados e o desempenho. É
considerado também como uma técnica de Pré-Processamento.
Consiste em transformar os valores dos atributos em sua forma de melhor
leitura. Muitos algoritmos possuem a limitação de trabalhar somente com atributos
qualitativos. Entretanto, muitos conjuntos de dados possuem atributos quantitativos.
Precisamos de métodos que transforme atributos qualitativos em quantitativos
para o processamento computacional.
Redução de dimensionalidade também é uma Normalização.
Normalmente (forma normal), a que melhor se adequa a determinado meio de
processamento, o ser humano prefere trabalhar dados complexos de forma
ASP-Análise de Sentimento e Processamento de Texto – Página 95 de 101
qualitativa. A forma normal, nada mais é do que atribuição do modelo que melhor se
adeque ao seu tipo de processamento.
7.4 Classificação de Textos (algoritmos)
Já falamos em classificação de textos por exemplo com Naive Bayes em
Análise de Sentimentos. Vamos utilizar um método de classificação cruzada para
avaliar.
Este método consiste em dividir todo o dado em K partes, essas partes que se
chamam folds.
Dessas partes uma será separada para teste e as outras restantes serão
usadas para treinar o modelo.
Isso é feito repetidamente até que o modelo seja treinado e testado com todas
as partes (folds).
Veja esse exemplo simples:
Para k = 10 , imagine que todo nosso dado de treino foi dividido em 10 partes
distintas. Assim, o modelo será treinado com 9 partes, e testado com a parte
restante. Esse processo é repetido até que o modelo seja treinado e testado com
todas as partes do dado.
Com essa técnica evitamos problemas de variância nos dados.
Para
implementar
a
validação
do
modelo,
vamos
usar
a
função cross_val_predict() também disponível na biblioteca Scikit-Learn:
resultados = cross_val_predict(modelo, freq_tweets, classes, cv=10)
O comando atribui a variável resultados, a validação usando a técnica Cross
Validation com 10 folds.
ASP-Análise de Sentimento e Processamento de Texto – Página 96 de 101
A primeira métrica que vamos medir é a Acurácia do modelo. A Acurácia,
basicamente é o percentual de acertos que modelo teve:
1
metrics.accuracy_score(classes,resultados)
2
0.8831564824978656
Existem outras métricas que nos dizem mais sobre os resultados. Também
conhecida como tabela de contingência, esta é uma matriz simples que apresenta
os resultados de um classificador de forma intuitiva.
Para entender, imagine que temos 23 instâncias para classificar em nossa base de
teste. Dessas, 13 são classes positivas e 10 são classes negativas.
Após o teste do modelo, imagine que a nossa Matriz de Confusão seja a tabela
dada. Com essa tabela fica fácil ver que para a classe “positivo” o classificador
classificou 10 instâncias como positivo e 3 como negativo, ou seja, ele acerto 10 e
errou
3
instâncias.
Para
classe “negativo”,
o
classificador
classificou
4
como positivo e 6 como negativo, ou seja, este acertou 6 e errou 4.
Para medir a Precisão, Revocação e Medida F do modelo faça:
sentimento=['Positivo','Negativo','Neutro']
print (metrics.classification_report(classes,resultados,sentimento),'')
precision recall
Positivo 0.95
0.88
f1-score support
0.91
3300
ASP-Análise de Sentimento e Processamento de Texto – Página 97 de 101
Negativo
Neutro
0.89
0.93
0.80
avg / total
0.84
0.89
0.91
0.82
0.88
2446
2453
0.88
8199
O pacote metrics exibe as medidas de precisão, revocação e medida F por
classe e por fim, a média disso. Isso é útil para investigarmos a eficiência do modelo
para classificação de classes específicas. Por exemplo, podemos ver que a precisão
e a revocação do modelo para classificar instâncias neutras é bem diferente para
as classes positivas e negativas.
Para a Matriz de Confusão, vamos gerar esta para o nosso modelo:
1
print (pd.crosstab(classes, resultados, rownames=['Real'], colnames=['Predito'], margins=True), '')
2
3
Predito
Negativo Neutro Positivo All
4
Real
5
Negativo
2275
162
9
2446
Neutro
240
2067
146
2453
Positivo
45
356
2899
3300
2560
2585
3054
8199
6
7
8
All
9
ASP-Análise de Sentimento e Processamento de Texto – Página 98 de 101
7.5 Similaridade entre textos com Affinity Propagation
A propagação de afinidade (AP) é um algoritmo de clustering baseado no
conceito de "passagem de mensagens" entre pontos de dados. [1] Ao contrário dos
algoritmos de clustering, como k -means ou k- medoids, a propagação de afinidade
não requer que o número de clusters seja determinado ou estimado antes da
execução do algoritmo. Semelhante a k- medoids, a propagação de afinidade
localiza "exemplares", membros do conjunto de entrada que são representativos de
clusters.
O objetivo é encontrar entre todas as partições do conjunto de dados, melhor
publicação de acordo com alguma medida de qualidade. A propagação de afinidade
é um algoritmo de clustering de erro baixo, alta velocidade e flexível.
O problema de o armazenamento em cluster pode ser muito útil no domínio
de texto, em que os objetos que podem ser clusters podem ter diferentes
granularidades
tais
como
documentos,
parágrafos,
frases
ou
termos.
O
armazenamento em cluster é especialmente útil para organizar documentos para
melhore a recuperação e suporte a navegação.
As iterações são executadas até que os limites do cluster permaneçam
inalterados em um número de iterações ou após algum número predeterminado de
iterações. Os exemplares são extraídos das matrizes finais como aqueles cuja
'responsabilidade + disponibilidade' para si mesmos seja positiva.
A entrada de Propagação de Afinidade é a semelhança de pares entre cada
par dos pontos de dados, s [i, j] (i, j = 1, 2, ..., N) 1. Qualquer tipo de semelhança é
aceitável, por exemplo, distância euclidiana negativa para real e coeficiente de
Jaccard para dados não-métricos, assim Affinity Propagation é amplamente flexível.
Dada a matriz de similaridade s [i, j], a Propagação de Afinidade tenta
encontrar os exemplares que maximizam a semelhança líquida, ou seja a soma total
de semelhanças entre todos os exemplos e seus pontos de dados de membro. O
processo
ASP-Análise de Sentimento e Processamento de Texto – Página 99 de 101
Propagação de Afinidade pode ser visto como um processo de passagem de
mensagens com dois tipos de mensagens trocadas entre os pontos de dados:
responsabilidade e disponibilidade.
Responsabilidade, r [i, j], é uma mensagem do ponto de dados i a j que
reflete a evidência acumulada de quão bem adequado o ponto de dados j é servir
como exemplo para o ponto de dados i.
Disponibilidade, a [i, j], é uma mensagem do ponto de dados j para i que
reflete a evidência acumulada de quanto apropriado seria para o ponto de dados i
escolher o ponto de dados j como exemplo.
ASP-Análise de Sentimento e Processamento de Texto – Página 100 de 101
Referências
[1] Braga, P. D, Carvalho, A. P., Ludermir, T. B., Redes Neurais Artificiais: Teoria e
Aplicações, LTC, 2000, RJ.
[2] Duda R. O., Hart Peter and Stork David, Pattern Classification, Second Edition,
2009, John Wiley & Sons.
[4] Mitchell, T. M. Machine Learning. McGraw-Hill, 1997.
[5] Scikit-learn: Machine Learning in Python, Pedregosa et al., JMLR 12, pp. 28252830, 2011.
[6] Theodoridis S., Koutroumbas K., Pattern Recognition, Fourt Edition, 2009.
Elsevier.
[7] Bird, S, Klein E., Loper,E., Natural Language Processing with Python, O’Reilly,
2009, EUA.
[8] Plas, J. V., Python Data Science Handbook: Essential Tools for Working with
Data, First Edition, 2016, O’Reilly
[9] Russell, S. J., Norvig , P., Artificial Intelligence: A Modern Approach, New Jersey,
Prentice Hall, Second Edition, 2003
[10] Haikyn, S., Redes Neurais: Princípios e Prática, Segunda Edição, Bookman,
São Paulo, 2008
[11] Mertz, D., Text Processing in Python, Bookman, Addison-wesley Professional,
2003
ASP-Análise de Sentimento e Processamento de Texto – Página 101 de 101
Download