Análise de sentimento para Twitter em Python [fechado]

87

Estou procurando uma implementação de código aberto, de preferência em python, de Textual Sentiment Analysis ( http://en.wikipedia.org/wiki/Sentiment_analysis ). Alguém está familiarizado com essa implementação de código aberto que posso usar?

Estou escrevendo um aplicativo que pesquisa no Twitter por algum termo de pesquisa, como "youtube", e conta os tweets "felizes" versus os "tristes". Estou usando o appengine do Google, então está em python. Eu gostaria de poder classificar os resultados de pesquisa retornados do twitter e gostaria de fazer isso em python. Não consegui encontrar esse analisador de sentimento até agora, especificamente não no python. Você está familiarizado com essa implementação de código aberto que posso usar? De preferência, isso já está em python, mas se não, espero poder traduzi-lo para python.

Note, os textos que estou analisando são MUITO curtos, são tweets. Portanto, idealmente, esse classificador é otimizado para esses textos curtos.

A propósito, o Twitter suporta os operadores ":)" e ":(" na pesquisa, que visam fazer exatamente isso, mas, infelizmente, a classificação fornecida por eles não é tão boa, então imaginei que poderia tentar fazer isso sozinho .

Obrigado!

BTW, uma demonstração inicial está aqui e o código que tenho até agora está aqui e eu adoraria abri-lo com qualquer desenvolvedor interessado.

Correu
fonte

Respostas:

44

Com a maioria desses tipos de aplicativos, você terá que rolar muito de seu próprio código para uma tarefa de classificação estatística. Como Lucka sugeriu, NLTK é a ferramenta perfeita para manipulação de linguagem natural em Python, contanto que seu objetivo não interfira na natureza não comercial de sua licença. No entanto, eu sugeriria outros pacotes de software para modelagem. Não encontrei muitos modelos avançados de aprendizado de máquina disponíveis para Python, então vou sugerir alguns binários autônomos que cooperam facilmente com ele.

Você pode estar interessado no Kit de ferramentas para modelagem discriminativa avançada , que pode ser facilmente conectado ao Python. Isso tem sido usado para tarefas de classificação em várias áreas do processamento de linguagem natural. Você também pode escolher vários modelos diferentes. Eu sugiro começar com a classificação de Entropia Máxima, desde que você já esteja familiarizado com a implementação de um classificador Naive Bayes. Caso contrário, você pode querer dar uma olhada e codificar um para realmente obter um entendimento decente da classificação estatística como uma tarefa de aprendizado de máquina.

Os grupos de lingüística computacional da Universidade do Texas em Austin ministraram aulas em que a maioria dos projetos que surgiram deles usaram essa ótima ferramenta. Você pode olhar a página do curso de Lingüística Computacional II para ter uma ideia de como fazê-lo funcionar e quais aplicativos anteriores ele serviu.

Outra ótima ferramenta que funciona na mesma linha é o Mallet . A diferença entre o Mallet é que há um pouco mais de documentação e mais alguns modelos disponíveis, como árvores de decisão, e está em Java, o que, na minha opinião, o torna um pouco mais lento. Weka é um conjunto completo de diferentes modelos de aprendizado de máquina em um grande pacote que inclui algumas coisas gráficas, mas é principalmente voltado para fins pedagógicos e não é realmente algo que eu colocaria em produção.

Boa sorte com sua tarefa. A parte realmente difícil provavelmente será a quantidade de conhecimento de engenharia necessária para você classificar o 'conjunto de sementes' com o qual seu modelo aprenderá. Ele precisa ser bastante considerável, dependendo se você está fazendo uma classificação binária (feliz versus triste) ou toda uma gama de emoções (o que exigirá ainda mais). Certifique-se de armazenar alguns desses dados de engenharia para teste ou execute alguns testes dez vezes ou remova um para ter certeza de que você está realmente fazendo um bom trabalho de previsão antes de colocá-los no mercado. E acima de tudo, divirta-se! Essa é a melhor parte da PNL e da IA, na minha opinião.

Robert Elwell
fonte
Obrigado. Só faço isso à noite, então ... vai demorar um pouco, mas vou postar uma atualização quando tiver algo pronto
Executado em
7
O código NLTK está disponível sob a Licença Apache 2.0 conforme nltk.org/faq
amit
1
Por que você diz que Weka é para fins pedagógicos? Não faz parte do pentaho BI suite? E o pentaho atende empresas.
Swapnil
77

Boa sorte com isso.

O sentimento é extremamente contextual, e a cultura de tweetar torna o problema pior porque você não tem o contexto para a maioria dos tweets. O objetivo do Twitter é que você pode aproveitar a enorme quantidade de contexto compartilhado do "mundo real" para incluir uma comunicação significativa em uma mensagem muito curta.

Se eles disserem que o vídeo é ruim, isso significa ruim ou ruim ?

Um professor de lingüística estava dando uma aula para sua classe um dia. "Em inglês", disse ela, "um duplo negativo forma um positivo. Em alguns idiomas, como o russo, um duplo negativo ainda é um negativo. No entanto, não há idioma em que um duplo positivo possa formar um negativo."

Uma voz do fundo da sala saltou, "Sim... Certo."

MarkusQ
fonte
4
Fico feliz que você tenha uma resposta útil, pois de outra forma eu teria que votar em você apenas por essa citação. :-)
Ben Blank
2
Acho que a citação foi "sim, sim" - de Sidney Morgenbesser
Scott Weinstein
19

Obrigado a todos pelas sugestões, foram de facto muito úteis! Acabei usando um classificador Naive Bayesian, que peguei emprestado daqui . Comecei alimentando-o com uma lista de palavras-chave boas / ruins e, em seguida, adicionei um recurso de "aprender" empregando o feedback do usuário. Acabou por funcionar muito bem.

Todos os detalhes do meu trabalho em uma postagem no blog .

Novamente, sua ajuda foi muito útil, então obrigado!

Correu
fonte
1
O link da postagem do blog não está mais funcionando, você poderia atualizá-lo?
Petrutiu Mihai
Olá, @PetrutiuMihai, esse blog foi removido. Mas são coisas muito antigas, não estão na frente da pesquisa hoje, então você não vai perder muito; (
Executado em
14

Construí uma lista de palavras rotuladas com sentimento. Você pode acessá-lo aqui:

http://www2.compute.dtu.dk/pubdb/views/edoc_download.php/6010/zip/imm6010.zip

Você encontrará um pequeno programa Python em meu blog:

http://finnaarupnielsen.wordpress.com/2011/06/20/simplest-sentiment-analysis-in-python-with-af/

Esta postagem mostra como usar a lista de palavras com frases simples e também no Twitter.

As abordagens de listas de palavras têm suas limitações. Você encontrará uma investigação das limitações da minha lista de palavras no artigo "Uma nova ANOVA: Avaliação de uma lista de palavras para análise de sentimento em microblogs". Esse artigo está disponível em minha página inicial.

Observe um unicode(s, 'utf-8') está faltando no código (por razões pedagógicas).

Finn Årup Nielsen
fonte
"O espaço posterous não está mais disponível" Você poderia postar o código python em algum lugar?
andilabs
1
Obrigado por notar. Agora mudei o link posterous para um link Wordpress para onde movi meu blog.
Finn Årup Nielsen
Você poderia dizer algo sobre algum experimento com o seu sentimento wordslit? Quero dizer o que era precisão, rememoração da classificação.
andilabs
1
Tenho links para algumas avaliações aqui: neuro.compute.dtu.dk/wiki/AFINN#Evaluation Eu mesmo não avaliei seu desempenho em termos de precisão, recuperação e classificação. O que fiz foi a correlação de classificação com a rotulagem de tweets do Amazon Mechanical Turk de Mislove.
Finn Årup Nielsen
10

Muitos trabalhos de pesquisa indicam que um bom ponto de partida para a análise de sentimento é olhar para os adjetivos, por exemplo, são adjetivos positivos ou adjetivos negativos. Para um pequeno bloco de texto, esta é praticamente sua única opção ... Existem papéis que olham para documentos inteiros ou análise de nível de frase, mas como você diz, os tweets são bastante curtos ... Não existe uma abordagem mágica real para compreender o sentimento de uma frase, então acho que sua melhor aposta seria caçar um desses artigos de pesquisa e tentar obter seu conjunto de dados de adjetivos orientados positivamente / negativamente.

Agora, dito isto, o sentimento é específico do domínio, e você pode achar difícil obter um alto nível de precisão com um conjunto de dados de uso geral.

Boa sorte.


fonte
Droga, eu estava indo para antecipar você.
Dana the Sane
4

Acho que você pode achar difícil encontrar o que procura. A coisa mais próxima que conheço é LingPipe , que tem algumas funcionalidades de análise de sentimento e está disponível sob um tipo limitado de licença de código aberto, mas é escrito em Java.

Além disso, os sistemas de análise de sentimento geralmente são desenvolvidos treinando um sistema em dados de resenhas de produtos / filmes que são significativamente diferentes dos tuítes comuns. Eles serão otimizados para texto com várias frases, todas sobre o mesmo assunto. Eu suspeito que você faria melhor em criar um sistema baseado em regras, talvez baseado em um léxico de termos de sentimento como o fornecido pela Universidade de Pittsburgh .

Confira We Feel Fine para uma implementação de ideia semelhante com uma interface realmente bonita (e twitrratr ).

Stompchicken
fonte
1

Talvez o TextBlob (baseado em NLTK e padrão) seja a ferramenta de análise de sentimento certa para você.

Sonson123
fonte
1

Eu encontrei o Natural Language Toolkit há um tempo. Você provavelmente poderia usá-lo como ponto de partida. Ele também tem muitos módulos e complementos, então talvez eles já tenham algo semelhante.

Luka Marinko
fonte
0

Pensamento um tanto maluco: você poderia tentar usar a API do Twitter para baixar um grande conjunto de tweets e, em seguida, classificar um subconjunto desse conjunto usando emoticons: um grupo positivo para ":)", ":]", ": D", etc. e outro grupo negativo com ":(" etc.

Depois de ter essa classificação grosseira, você pode pesquisar mais pistas com análise de frequência ou ngram ou algo parecido.

Pode parecer bobagem, mas pesquisas sérias foram feitas sobre isso (pesquise "análise de sentimento" e emoticon). Vale a pena dar uma olhada.


fonte
0

Para aqueles interessados ​​em codificar o Twitter Sentiment Analyis do zero, há um curso " Data Science " do Coursera com código python no GitHub (como parte da tarefa 1 - link ). Os sentimentos fazem parte do AFINN-111 .

Você pode encontrar soluções de trabalho, por exemplo aqui . Além da lista de sentimento AFINN-111, há uma implementação simples de construir uma lista de termos dinâmica com base na frequência de termos em tweets que têm uma pontuação pos / neg (veja aqui ).

philshem
fonte