Maio de 2018

Volume 33, Número 5

Inteligência Artificial - Análise de Sentimento do Texto

Por Frank La La

Frank La VigneUma das bobagens do mundo moderno controladas por dados é que a velocidade e o volume de dados continua aumentando. Estamos vendo mais dados gerados a cada dia que nunca no histórico humano. E têm esse rápido crescimento mais evidente que no mundo de mídia social, onde os usuários geram conteúdo em uma escala ninguém imaginava anteriormente. Os usuários, por exemplo, coletivamente enviam aproximadamente 6.000 tweets por segundo, do Twitter acordo com estatísticas em tempo real do site da Internet de controle (internetlivestats.com/twitter-estatísticas). Com essa taxa, há aproximadamente 350.000 tweets enviadas por minuto, tweets 500 milhões por dia e tweets de cerca de 200 bilhões por ano. Acompanhando esse fluxo de dados ao avaliar o conteúdo seja impossível mesmo para as equipes de maior – simplesmente não pôde contratar pessoas suficiente para fazer a varredura do Twitter para avaliar o sentimento de seu usuário com base em qualquer momento determinado.

Felizmente, o caso de uso para analisar cada tweet seria um caso extremo de borda. Há, no entanto, motivos comerciais para controle de sentimento, seja em relação a um tópico específico, o termo de pesquisa ou hashtag. Embora isso limita o número de tweets para analisar significativamente, o volume de dados para analisar ainda torna impraticável para analisar as opiniões de tweets de qualquer maneira significativa.

Felizmente, a análise de sentimento geral de texto é um processo que pode ser facilmente automatizado por meio de análise de sentimento. Análise de sentimento é o processo de computação classificando e classificando opiniões expressadas em texto para determinar se a atitude expressada em demonstra um sinal positivo, negativo ou neutro. Em resumo, o processo pode ser automatizado e refinado a uma pontuação de matemática que indica o tom e subjetividade.

Configuração de um bloco de anotações do Azure

Em fevereiro (msdn.com/magazine/mt829269), cobertos no blocos de anotações do Jupyter detalhes e o ambiente no qual eles podem executar. Enquanto qualquer ambiente Python 3 pode executar o código neste artigo, para simplificar, vou usar blocos de anotações do Azure. Procurar por para o site de serviço do Azure anotações em notebooks.azure.com e entre com suas credenciais da ID da Microsoft. Crie uma nova biblioteca com o nome artificialmente inteligente. No campo ID de biblioteca, insira "ArtificiallyIntelligent" e clique em criar. Na página seguinte, clique em novo para criar um novo bloco de anotações. Insira um nome na caixa de texto Nome do Item, escolha o bloco de anotações Python 3.6 da lista suspensa de tipo de Item e clique em novo (Figura 1).

Criando um novo bloco de anotações com um Kernel Python 3.6
Figura 1 Criando um novo bloco de anotações com um Kernel Python 3.6

Clique no bloco de anotações recém-criado e aguarde até que o serviço para se conectar a um kernel.

Análise de sentimento em Python

Quando o bloco de anotações estiver pronto, insira o código a seguir na célula vazia e execute o código na célula.

from textblob import TextBlob
simple_text = TextBlob("Today is a good day for a picnic.")
print(simple_text.sentiment)

Os resultados exibidos serão semelhante ao seguinte:

Sentiment(polarity=0.7, subjectivity=0.6000000000000001)

Polaridade refere-se ao positivo ou negativo como tom das taxas de texto de entrada de -1 até + 1, -1 que está sendo mais negativos e + 1 sendo mais positiva. Subjetividade refere-se às subjetiva como taxas de instrução de 0 a 1 com 1 sendo altamente subjetiva. Com apenas três linhas de código, pode analisar sentimento não apenas de um fragmento de texto, mas seu subjetividade. Como algo como análise de sentimento, considerado complicada, se torna então aparentemente simple?

Python gosta de um ecossistema vibrante, particularmente em termos de aprendizado de máquina e processamento de linguagem natural (NLP). O trecho de código acima se baseia na biblioteca TextBlob (textblob.readthedocs.io/en/dev). TextBlob é uma biblioteca de software livre para processar dados textuais, fornecendo uma API simples para se aprofundar em comum linguagem natural (NLP) tarefas de processamento. Essas tarefas incluem a análise de sentimento e muito mais.

Na célula em branco abaixo dos resultados, insira o código a seguir e executá-lo:

simple_text = TextBlob("the sky is blue.")
print(simple_text.sentiment)

Os resultados de estado que a frase "o sky é azul" tem uma polaridade 0,0 e uma subjetividade de 0.1. Isso significa que o texto é neutro em tom e pontuações pouca subjetividade. Na célula em branco imediatamente abaixo os resultados, insira o código a seguir e execute a célula:

simple_text1 = TextBlob("I hate snowstorms.")
print(simple_text1.sentiment)
simple_text2 = TextBlob("Bacon is my favorite!")
print(simple_text2.sentiment)

Observe que o algoritmo identificado corretamente que o conteúdo de simple_text1 tinha um sentimento negativo (-0.8) e a instrução é bastante subjetivas (0,9). Além disso, o algoritmo inferido corretamente o sentimento positivo de simple_text2 (0.625) e sua natureza altamente subjetiva (1.0).

No entanto, o algoritmo ter dificuldades significativas ao analisar as nuances mais sutis de idioma humano. Sarcasm, por exemplo, não é apenas difícil de detectar, mas pode gerar desativar os resultados. Imagine um cenário em que um restaurante extrai revisões de um site de análise online como Yelp e publica automaticamente revisões com um sentimento positivo no seu site e a mídia social. Insira o código a seguir em uma célula vazia e executá-lo:

sample_customer_review1 =
  TextBlob("The burgers at this place will
  make you ill with joy.")
print(sample_customer_review1.sentiment)
sample_customer_review2 =
  TextBlob("Whenever I want to take a sick
  day, I eat here the night before and it is
  always a sure fire win!")
print(sample_customer_review2.sentiment)

Claramente o sentimento dessas duas avaliações são negativos. Embora o algoritmo parece caso contrário, considere com ambas as revisões de pontuação como tendo o sentimento positivo pontuações, 0,15 e 0.26 respectivamente. Nesse caso, o restaurante provavelmente não seria conveniente qualquer uma dessas avaliações realçado em qualquer plataforma. Sistemas NLP ainda precisam entender um bom entendimento de sarcasm, embora não haja muitas pesquisas atualmente sendo feita nessa área (thesarcasmdetector.com/about).

Conectar com o Twitter

Até aqui, eu executei apenas pequenas unidades de texto por meio do analisador de TextBlob. Um uso mais prático essa tecnologia é alimentá-los dados gerados pelo usuário, idealmente em tempo quase real. Felizmente Twitter, seus usuários ativos de aproximadamente 327 milhões (www.statista.com/statistics/282087/number-of-monthly-active-twitter-users), fornece um fluxo constante de texto para analisar.

Para conectar-se com a API do Twitter, preciso registrar um aplicativo com o Twitter para gerar as credenciais necessárias. Em um navegador, vá para apps.twitter.com e, se necessário, faça logon com suas credenciais do Twitter. Clique no botão Criar novo aplicativo para abrir a criar um formulário de aplicativo conforme mostrado na Figura 2. Digite um nome, descrição e um site da Web para o aplicativo. Para os fins deste artigo, o endereço do site não importa, portanto, insira uma URL válida. Clique na caixa de seleção para concordar com os termos do contrato de desenvolvedor do Twitter e clique em criar o botão de aplicativo do Twitter.

O Twitter Criar formulário de aplicativo
Figura 2 o Twitter Criar formulário de aplicativo

Na tela seguinte, procure a chave do consumidor (chave de API) na seção configurações do aplicativo. Clique em "gerenciar chaves de tokens de acesso" link. Na página seguinte, clique em criar o botão de token de acesso, conforme mostrado no Figura 3, para criar um token de acesso. Anote os seguintes quatro valores mostrados nesta página: Chave do consumidor (chave de API), o segredo do consumidor (segredo de API), Token de acesso e o segredo do Token de acesso.

Chaves do aplicativo e a tela de Tokens de acesso do Twitter
Figura 3 Twitter aplicativo chaves e a tela de Tokens de acesso

Usando Tweepy para ler Tweets

Tweepy é uma biblioteca do Python que simplifica a interação entre o código Python e a API do Twitter. Para obter mais informações sobre Tweepy podem ser encontradas em docs.tweepy.org/en/v3.5.0. Neste momento, volte para o bloco de anotações do Jupyter e insira o código a seguir para instalar a API Tweepy. O ponto de exclamação instrui Jupyter para executar um comando no shell:

!pip install tweepy

Depois que o código é executado com êxito, lerá o texto de resposta na célula: "Tweepy-3.6.0 instalado com êxito" Embora pode alterar o número de versão específico. Na célula abaixo, insira o código em Figura 4 célula vazia e execute-o em recém-criado.

Figura 4 Use Tweepy para acessar a API do Twitter

import tweepy
consumer_key = "[Insert Consumer Key value]"
consumer_secret = "[Insert Consumer Secret value]"
access_token = "[Insert Access Token value]"
access_token_secret = "[Insert Access Token Secret value]"
authentication_info = tweepy.OAuthHandler(consumer_key, consumer_secret)
authentication_info.set_access_token(access_token, access_token_secret)
twitter_api = tweepy.API(authentication_info)
spacex_tweets = twitter_api.search("#spacex")
for tweet in spacex_tweets:
  print(tweet.text)
  analysis = TextBlob(tweet.text)
  print(analysis.sentiment)

Os resultados que retornam devem ser semelhantes ao seguinte:

#ElonMusk deletes own, #SpaceX and #Tesla Facebook pages after #deletefacebook https://t.co/zKGg4ZM2pi https://t.co/d9YFboUAUj
Sentiment(polarity=0.0, subjectivity=0.0)
RT @loislane28: Wow. did @elonmusk just delete #SpaceX and #Tesla from Facebook? https://t.co/iN4N4zknca
Sentiment(polarity=0.0, subjectivity=0.0)

Tenha em mente que os dados do Twitter em tempo real como o código é executado em uma pesquisa, seus resultados certamente irão variar. A formatação é um pouco confuso para leitura. Modificar o para executar um loop na célula para o seguinte e, em seguida, execute novamente o código.

for tweet in spacex_tweets:
  analysis = TextBlob(tweet.text)
  print('{0} | {1} | {2}'.format(tweet.text, analysis.sentiment.polarity,
    analysis.sentiment.subjectivity))

Adicionar os caracteres de conexão para a saída deve facilitar a leitura. Observe também que dois campos da propriedade sentimento, polaridade e subjetividade, podem ser exibidos individualmente.

Carregar dados de sentimento do Twitter em um DataFrame

O código anterior criado uma lista delimitados por pipe de tweet pontuações de conteúdo e sensibilidade. Uma estrutura mais úteis para análise adicional seria um DataFrame. Um DataFrame é uma estrutura de dados de duas dimensões rotulado. As colunas podem conter tipos de valor diferentes. Semelhante a uma planilha ou tabela SQL, quadros de dados fornecem um mecanismo simple e familiar para trabalhar com conjuntos de dados.

Quadros de dados são parte da biblioteca de Pandas. Como tal, você precisará importar biblioteca Pandas juntamente com Numpy. Inserir uma célula em branco abaixo da célula atual, digite o seguinte código e execute:

import pandas as pd
import numpy as np
tweet_list = []
for tweet in spacex_tweets:
  analysis = TextBlob(tweet.text)
  tweet_list.append({'Text': tweet.text, 'Polarity': analysis.sentiment.polarity,
    'Subjectivity':analysis.sentiment.subjectivity })
  tweet_df = pd.DataFrame(tweet_list)   
tweet_df

Agora, os resultados serão exibidos em um mais fáceis de ler o formato de tabela. No entanto, que não é tudo o que os quadros de dados biblioteca pode fazer. Inserir uma célula em branco abaixo da célula atual, digite o seguinte código e execute:

print ("Polarity Stats")
print ("Avg", tweet_df["Polarity"].mean())
print ("Max", tweet_df["Polarity"].max())
print ("Min", tweet_df["Polarity"].min())
print ("Subjectivity Stats")
print ("Avg", tweet_df["Subjectivity"].mean())
print ("Max", tweet_df["Subjectivity"].max())
print ("Min", tweet_df["Subjectivity"].min())

Carregando os dados de análise de sentimento tweet em um DataFrame, é mais fácil executar e analisar os dados em grande escala. No entanto, essas estatísticas descritivas apenas superficiais potência que fornecem quadros de dados. Para explorar mais completa de quadros de dados Pandas em Python, assista o webcast, "Dados de análise em Python com Pandas," por Jonathan Wood em bit.ly/2urCxQX.

Conclusão

Com a velocidade e o volume de dados continua crescendo, as empresas pequenas e grandes devem encontrar formas de aproveitar o aprendizado de máquina para compreender os dados e transformá-lo em ideias acionáveis. Processamento de idioma natural ou NLP, é uma classe de algoritmos que podem analisar o texto não estruturado e analisá-lo em estruturas legível por máquina, fornecendo acesso a um dos atributos de chave de qualquer corpo de texto — sentimento. Não muito tempo atrás, isso está fora do alcance do desenvolvedor médio, mas agora a biblioteca do TextBlob Python coloca essa tecnologia para o ecossistema do Python. Embora os algoritmos, às vezes, podem ter dificuldade com o sutilezas e nuances dos idiomas humanos, eles fornecem uma base excelente para fazer sentido de dados não estruturados.

Conforme demonstrado neste artigo, o esforço para analisar um determinado bloco de texto para sentimento em termos de negativity ou subjetividade agora é simples. Graças um ecossistema vibrante de Python de bibliotecas de software livre de terceiros, também é fácil de fonte de dados de sites ao vivo de mídia social, como o Twitter e efetuar pull de tweets de usuários em tempo real. Outra biblioteca de Python, Pandas, simplifica o processo para executar uma análise avançada de dados. Com análise ponderada, as empresas podem monitorar os feeds de mídia social e obter reconhecimento do que os clientes estão dizendo e compartilhamento sobre eles.


Frank La Vigne chefia o setor de dados e análises da Wintellect e é um dos apresentadores do podcast DataDriven. Ele regularmente no FranksWorld.com e você pode assisti-lo em seu canal do YouTube, "De Frank mundo TV" (FranksWorld.TV).

Agradecemos ao seguinte especialista técnico pela revisão deste artigo: Andy Leonard


Discuta esse artigo no fórum do MSDN Magazine