Analiza nastrojów na Twitterze w Pythonie [zamknięte]

87

Szukam implementacji Open Source, najlepiej w Pythonie, Textual Sentiment Analysis ( http://en.wikipedia.org/wiki/Sentiment_analysis ). Czy ktoś zna taką implementację open source, z której mogę skorzystać?

Piszę aplikację, która wyszukuje na Twitterze jakieś wyszukiwane hasło, mówi „youtube” i liczy tweety „szczęśliwe” i „smutne”. Używam Appengine Google, więc jest w Pythonie. Chciałbym móc sklasyfikować zwrócone wyniki wyszukiwania z Twittera i chciałbym to zrobić w Pythonie. Jak dotąd nie udało mi się znaleźć takiego analizatora sentymentów, a konkretnie nie w Pythonie. Czy znasz taką implementację open source, której mogę użyć? Najlepiej, aby to było już w Pythonie, ale jeśli nie, mam nadzieję, że mogę przetłumaczyć to na Pythona.

Uwaga, analizowane przeze mnie teksty są BARDZO krótkie, to tweety. Idealnie więc ten klasyfikator jest zoptymalizowany pod kątem takich krótkich tekstów.

Przy okazji, Twitter obsługuje operatory „:)” i „:(” w wyszukiwaniu, których celem jest właśnie to, ale niestety klasyfikacja podana przez nich nie jest zbyt dobra, więc pomyślałem, że mogę spróbować .

Dzięki!

BTW, wczesne demo jest tutaj, a kod, który mam do tej pory, jest tutaj i chciałbym otworzyć go z każdym zainteresowanym programistą.

Biegł
źródło

Odpowiedzi:

44

W przypadku większości tego rodzaju aplikacji będziesz musiał przetoczyć znaczną część własnego kodu, aby wykonać zadanie klasyfikacji statystycznej. Jak zasugerował Lucka, NLTK jest idealnym narzędziem do manipulacji językiem naturalnym w Pythonie, o ile Twój cel nie koliduje z niekomercyjnym charakterem jego licencji. Sugerowałbym jednak inne pakiety oprogramowania do modelowania. Nie znalazłem wielu silnych zaawansowanych modeli uczenia maszynowego dostępnych dla Pythona, więc zasugeruję kilka samodzielnych plików binarnych, które z łatwością z nim współpracują.

Możesz być zainteresowany Zestawem narzędzi do zaawansowanego modelowania dyskryminacyjnego , który można łatwo połączyć z Pythonem. Zostało to wykorzystane do zadań klasyfikacyjnych w różnych obszarach przetwarzania języka naturalnego. Masz również do wyboru kilka różnych modeli. Sugerowałbym rozpoczęcie od klasyfikacji maksymalnej entropii, o ile znasz już implementację klasyfikatora Naive Bayes. Jeśli nie, możesz zajrzeć do tego i zakodować jeden z nich, aby naprawdę uzyskać przyzwoite zrozumienie klasyfikacji statystycznej jako zadania uczenia maszynowego.

Grupy lingwistyki komputerowej Uniwersytetu Teksasu w Austin prowadziły zajęcia, na których większość projektów z nich wychodzących wykorzystywała to wspaniałe narzędzie. Możesz zajrzeć na stronę kursu lingwistyki komputerowej II, aby dowiedzieć się, jak sprawić, by działała i jakie wcześniejsze zastosowania służyło.

Innym świetnym narzędziem, które działa w tym samym duchu, jest Mallet . Różnica między Malletem polega na tym, że jest nieco więcej dokumentacji i więcej dostępnych modeli, takich jak drzewa decyzyjne, i jest w Javie, co moim zdaniem sprawia, że ​​jest trochę wolniejszy. Weka to cały zestaw różnych modeli uczenia maszynowego w jednym dużym pakiecie, który zawiera pewne elementy graficzne, ale tak naprawdę jest przeznaczony głównie do celów pedagogicznych i tak naprawdę nie jest czymś, co bym wprowadził do produkcji.

Powodzenia w wykonaniu zadania. Prawdziwą trudną częścią będzie prawdopodobnie ilość inżynierii wiedzy wymaganej z góry, aby sklasyfikować „zbiór nasion”, z którego nauczy się Twój model. Musi być całkiem spory, w zależności od tego, czy robisz klasyfikację binarną (radość vs smutek), czy też całą gamę emocji (które będą wymagały jeszcze więcej). Upewnij się, że przechowujesz część tych opracowanych danych do testów lub przeprowadź kilka testów dziesięciokrotnie lub usuń jeden, aby upewnić się, że faktycznie wykonujesz dobrą robotę przewidując, zanim je tam umieścisz. A przede wszystkim dobrej zabawy! Moim zdaniem to najlepsza część NLP i AI.

Robert Elwell
źródło
Dzięki. Robię to tylko w nocy, więc ... zajmie to trochę czasu, ale opublikuję aktualizację, gdy będę miał coś gotowego
Rozpoczęto
7
Kod NLTK jest dostępna pod Apache License 2.0, jak na nltk.org/faq
Amit
1
Dlaczego mówisz, że Weka służy celom pedagogicznym? Czy nie jest to część pakietu pentaho BI? Pentaho służy przedsiębiorstwom.
Swapnil
77

Powodzenia z tym.

Sentyment jest niezwykle kontekstualny, a kultura tweetów pogarsza problem, ponieważ nie podaje się kontekstu dla większości tweetów. Cały sens twittera polega na tym, że możesz wykorzystać ogromną ilość wspólnego kontekstu „prawdziwego świata”, aby spakować znaczącą komunikację w bardzo krótkiej wiadomości.

Jeśli mówią, że film jest zły, czy to znaczy źle, czy źle ?

Pewnego dnia profesor lingwistyki prowadził wykład na swojej klasie. „Po angielsku” - powiedziała - „Podwójny negatyw tworzy pozytyw. Jednak w niektórych językach, takich jak rosyjski, podwójny negatyw jest nadal negatywem. Jednak nie ma języka, w którym podwójny pozytyw może tworzyć negatyw”.

Z tyłu pokoju dobiegł głos: „Tak… w porządku”.

MarkusQ
źródło
4
Cieszę się, że otrzymałeś użyteczną odpowiedź, ponieważ w przeciwnym razie mógłbym cię zagłosować za ten cytat. :-)
Ben Blank
2
Myślę, że cytat brzmiał „tak, tak” - Sidney Morgenbesser
Scott Weinstein,
19

Dziękuję wszystkim za sugestie, były rzeczywiście bardzo przydatne! Skończyło się na tym, że użyłem klasyfikatora Bayesa naiwnego, który pożyczyłem stąd . Zacząłem od podania listy dobrych / złych słów kluczowych, a następnie dodałem funkcję „uczenia się”, wykorzystując opinie użytkowników. Okazało się, że działa całkiem nieźle.

Pełne szczegóły mojej pracy jak w poście na blogu .

Twoja pomoc była bardzo przydatna, więc dziękuję!

Biegł
źródło
1
link do wpisu na blogu już nie działa, czy możesz go zaktualizować?
Petrutiu Mihai,
Cześć @PetrutiuMihai, rzeczywiście, ten blog został usunięty. Ale to dość stare rzeczy, nie będące na czele badań na dzień dzisiejszy, więc nie stracisz wiele; (
Ran,
14

Zbudowałem listę słów oznaczoną sentymentem. Możesz uzyskać do niego dostęp stąd:

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

Na moim blogu znajdziesz krótki program w Pythonie:

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

Ten post pokazuje, jak używać listy słów z pojedynczymi zdaniami, a także z Twitterem.

Podejścia oparte na listach słów mają swoje ograniczenia. Badanie ograniczeń mojej listy słów znajdziesz w artykule „Nowe ODNOWOŚĆ: Ocena listy słów do analizy sentymentów w mikroblogach”. Ten artykuł jest dostępny na mojej stronie domowej.

Uwaga: unicode(s, 'utf-8')w kodzie brakuje litery (ze względów pedagogicznych).

Finn Årup Nielsen
źródło
„Posterous Spaces nie jest już dostępny” Czy mógłbyś gdzieś opublikować kod Pythona?
andilabs
1
Dzięki, że to zauważyłeś. Teraz zmieniłem późniejszy odsyłacz na odsyłacz Wordpress, do którego przeniosłem mojego bloga.
Finn Årup Nielsen
Czy mógłbyś powiedzieć coś o eksperymentach z podświetleniem słów? Mam na myśli to, co było precyzją, przypomnieniem klasyfikacji.
andilabs
1
Mam tutaj linki do kilku ocen: neuro.compute.dtu.dk/wiki/AFINN#Evaluation Sam nie oceniłem jego działania pod względem precyzji, zapamiętywania i klasyfikacji. To, co zrobiłem, to korelacja rang z etykietami tweetów Amazon Mechanical Turk firmy Mislove.
Finn Årup Nielsen
10

Wiele prac badawczych wskazuje, że dobrym punktem wyjścia do analizy sentymentów jest przyjrzenie się przymiotnikom, np. Czy są to przymiotniki pozytywne, czy przymiotniki negatywne. W przypadku krótkiego bloku tekstu jest to właściwie jedyna opcja ... Istnieją artykuły, które przeglądają całe dokumenty lub analizę na poziomie zdań, ale jak mówisz, tweety są dość krótkie ... Nie ma prawdziwego magicznego podejścia do zrozumienia sentyment zdania, więc myślę, że najlepszym rozwiązaniem byłoby wyszukanie jednego z tych artykułów naukowych i próba uzyskania ich zestawu przymiotników zorientowanych pozytywnie / negatywnie.

Jak już powiedziano, nastroje zależą od domeny i może być trudno uzyskać wysoki poziom dokładności przy użyciu zestawu danych ogólnego przeznaczenia.

Powodzenia.


źródło
Cholera, zamierzałem cię wyprzedzić.
Dana the Sane
4

Myślę, że znalezienie tego, czego szukasz, może być trudne. Najbliższą rzeczą, jaką znam, jest LingPipe , który ma pewną funkcję analizy sentymentów i jest dostępny na ograniczonej licencji typu open source, ale jest napisany w Javie.

Ponadto systemy analizy nastrojów są zwykle opracowywane przez szkolenie systemu na podstawie danych z recenzji produktów / filmów, które znacznie różnią się od przeciętnego tweeta. Zostaną zoptymalizowane pod kątem tekstu z kilkoma zdaniami na ten sam temat. Podejrzewam, że lepiej byłoby, gdybyś sam wymyślił system oparty na regułach, być może oparty na leksykonie terminów związanych z sentymentami, takiego jak ten, który zapewnia University of Pittsburgh .

Sprawdź We Feel Fine, aby wdrożyć podobny pomysł z naprawdę pięknym interfejsem (i twitrratr ).

Stompchicken
źródło
1

Może TextBlob (oparty na NLTK i wzorcu) jest odpowiednim narzędziem do analizy nastrojów.

Sonson123
źródło
1

Jakiś czas temu natknąłem się na Natural Language Toolkit . Prawdopodobnie możesz użyć tego jako punktu wyjścia. Ma też sporo modułów i dodatków, więc może mają już coś podobnego.

Luka Marinko
źródło
0

Trochę zwariowana myśl: możesz spróbować użyć interfejsu API Twittera do pobrania dużego zestawu tweetów, a następnie sklasyfikować podzbiór tego zestawu za pomocą emotikonów: jedna pozytywna grupa dla „:)”, „:]”, „: D” itd. i inna wykluczająca grupa z „:(” itp.)

Kiedy już masz tę prymitywną klasyfikację, możesz poszukać więcej wskazówek za pomocą analizy częstotliwości lub liczby gramofonów lub czegoś podobnego.

Może się to wydawać głupie, ale przeprowadzono poważne badania w tej sprawie (szukanie „analizy sentymentu” i emotikonów). Warte zobaczenia.


źródło
0

Dla zainteresowanych kodowaniem Twitter Sentiment Analyis od podstaw dostępny jest kurs Coursera „ Data Science ” z kodem Pythona na GitHub (w ramach zadania 1 - link ). Nastroje są częścią AFINN-111 .

Możesz znaleźć działające rozwiązania, na przykład tutaj . Oprócz listy sentymentów AFINN-111 istnieje prosta implementacja tworzenia dynamicznej listy terminów w oparciu o częstotliwość terminów w tweetach, które mają wynik dodatni / ujemny (patrz tutaj ).

philshem
źródło