2013-03-10 24 views
10

Tytuł mówi wszystko; Mam pęknięcie bazy danych SQL w szwach z tekstem rozmowy online. Zrobiłem już większość tego projektu w Pythonie, więc chciałbym to zrobić za pomocą biblioteki NLTK Pythona (chyba, że ​​jest powód, aby nie było powodu).Analiza nastrojów w kolekcji LARGE z tekstem konwersacji online

Dane są organizowane przez wątek, Login i Napisz. Każdy wątek mniej więcej koncentruje się na omówieniu jednego "produktu" kategorii, którą chcę przeanalizować. Ostatecznie, kiedy to się skończy, chciałbym mieć szacunkową opinię (jak/nie lubię rodzaju transakcji) od każdego użytkownika za któryś z produktów, o których dyskutowali w pewnym momencie.

Więc, co chciałbym wiedzieć:

1) Jak mogę iść o określenie, co produkt każdy wątek jest o? Czytałem o ekstrakcji słów kluczowych ... czy to właściwa metoda?

2) Jak określić określony sentyment użytkowników na podstawie ich postów? Z mojego ograniczonego zrozumienia muszę najpierw "przeszkolić" NLTK, aby rozpoznać pewne wskaźniki opinii, a następnie czy po prostu określam kontekst tych słów, gdy pojawiają się one w tekście?

Jak można się domyślić, nie mam wcześniejszego doświadczenia z NLP. Z mojego dotychczasowego czytania, myślę, że poradzę sobie z jego nauką. Nawet zwykły i prosty model pracy byłby świetny, gdyby ktoś wskazał mi właściwy kierunek. Google nie był dla mnie bardzo pomocny.

P.S. Mam pozwolenie na analizę tych danych (w przypadku, gdy jest to ważne)

+0

Czy masz jakieś dane z etykietą? – placeybordeaux

+0

Nie, to jest to. Próbowałem zrobić to tak automatycznie, jak potrafię ... Oznakowanie danych brzmi jak niezwykle czasochłonne/zdrętwiałe zadanie. Czy bezwzględnie wymagane jest mierzenie nastrojów? Jeśli tak, to rozważałbym możliwość wprowadzenia go na Mechanical Turk lub coś w tym rodzaju ... – araisbec

+0

Wszystkie znane mi algorytmy uczenia się wymagają zestawu danych treningowych, których używasz do budowy modelu. Następnie możesz go uwolnić na nieoznakowanych danych. – BenDundee

Odpowiedz

5

Trening dowolny klasyfikator wymaga szkolenie ustawić z znakowanych danych a funkcja ściągacza do uzyskania funkcja ustawia dla każdego tekstu. Po wyszkolonym klasyfikatorze można zastosować go do wcześniej niewidocznego tekstu (bez etykiety) i uzyskać klasyfikację opartą na algorytmie uczenia maszynowego. NLTK gives a good explanation and some samples to play around with.

Jeśli jesteś zainteresowany budowaniem klasyfikatora dla pozytywnych/negatywnych nastrojów, używając swojego własnego zestawu danych treningowych, uniknęłbym prostej liczby słów kluczowych, jako they aren't accurate for a number of reasons (np. Negacja pozytywnych słów: "nie szczęśliwy"). Alternatywą, w której nadal można używać dużego zestawu treningowego bez konieczności ręcznego oznaczania czegokolwiek, jest odległy nadzór. Zasadniczo w tym podejściu używa się emotikonów lub innych specyficznych elementów tekstowych, takich jak głośne etykiety.Nadal musisz wybrać, które funkcje są istotne, ale wiele badań przyniosło dobre rezultaty, po prostu używając unigramów lub bigrams (poszczególne słowa lub pary słów, odpowiednio).

Wszystko to można zrobić stosunkowo łatwo za pomocą Pythona i NLTK. Możesz także użyć narzędzia takiego jak NLTK-trainer, które jest opakowaniem dla NLTK i wymaga mniej kodu.

Myślę, że this study przez Go et al. jest jednym z najłatwiejszych do zrozumienia. Możesz także przeczytać inne badania dla distant supervision, distant supervision sentiment analysis i sentiment analysis.

Istnieje kilka wbudowanych klasyfikatorów w NLTK z metod zarówno szkolenia i klasyfikacja (Naive Bayes, MaxEnt, etc.), ale jeśli jesteś zainteresowany wykorzystaniem wektorów nośnych (SVM) Maszyny następnie należy szukać gdzie indziej. Technicznie rzecz biorąc, NLTK oferuje ci SVM class, ale jest to naprawdę tylko opakowanie dla PySVMLight, które samo w sobie jest opakowaniem dla SVMLight, napisanym w języku C. Miałem wiele problemów z tym podejściem, a zamiast tego zaleciłbym LIBSVM.

Do określenia tematu użyto wielu prostych słów kluczowych, ale dostępne są bardziej złożone metody.

+0

Jedno pytanie, a otrzymasz najlepszą odpowiedź, o swoim przykładzie liczenia częstotliwości. "Nieszczęśliwy". Czy nie mogę napisać algorytmu, który niezależnie analizuje każde zdanie, zlicza słowa kluczowe, a następnie przeprowadza analizę przez faktoring w kontekście, a następnie stamtąd? Na przykład, powiedz zdanie "Nie jestem zadowolony z mojego produktu-nazwa-tutaj". Czy nie mogę napisać czegoś, co by zauważyło, że "Happy" jest negowane przez "Not" i dotyczy "Produktu"? Wiem, że NLTK może rozbijać zdania na czasowniki i rzeczowniki i tak dalej, czyż nie? Czy możliwe jest zaatakowanie problemu pod tym kątem? – araisbec

+0

@araibec Tak, ale jest wiele ukrytych zawiłości próbujących to zrobić. Możesz użyć słowa negacji i słownika słów emocji, ale jeśli weźmiesz pod uwagę pojawienie się słowa negacji w zdaniu, oznacza to, że słowo emocji jest przeciwieństwem, co się dzieje z "Cieszę się z mojego iPhone'a, ale mój przyjaciel jest nie." Mówi się, że większość aktualnych badań naukowych wykorzystuje metody takie jak uczenie maszynowe zamiast słów kluczowych. Naprawdę nie jest trudniej go skonfigurować. – Jared

+0

Ma sens. Ponadto uczenie maszynowe może zostać zaimplementowane w celu samopoprawnienia. Dziękuję za odpowiedź! – araisbec

3

Możesz wyszkolić dowolny klasyfikator z podobnymi zestawami danych i zobaczyć, jakie są wyniki, gdy zastosujesz je do swoich danych. Na przykład kod NLTK zawiera Movie Reviews Corpus zawierający 1000 pozytywnych i 1000 negatywnych recenzji. Here is an example on how to train a Naive Bayes Classifier with it. Niektóre inne zestawy danych przeglądu, takie jak dane Amazon Product Review, są dostępne pod numerem here.

Inną możliwością jest zrobienie listy pozytywnych i negatywnych słów, takich jak this one i zliczenie ich częstotliwości w zestawie danych. Jeśli chcesz uzyskać pełną listę, użyj SentiWordNet.