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.
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 ?
źródło
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ę!
źródło
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).źródło
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
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 ).
źródło
Przyjrzyj się narzędziu do analizy nastrojów na Twitterze . Jest napisany w Pythonie i używa klasyfikatora Naive Bayes z częściowo nadzorowanym uczeniem maszynowym. Źródło można znaleźć tutaj .
źródło
Może TextBlob (oparty na NLTK i wzorcu) jest odpowiednim narzędziem do analizy nastrojów.
źródło
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.
źródło
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
Istnieje interfejs API Twitter Sentiment firmy TweetFeel, który wykonuje zaawansowaną analizę językową tweetów i może pobierać pozytywne / negatywne tweety. Zobacz http://www.webservius.com/corp/docs/tweetfeel_sentiment.htm
źródło
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 ).
źródło