azure-cognitive-services-analiza-sentymentu
Łukasz Bielak

Łukasz Bielak

Co o tobie mówią w sieci – czyli analiza sentymentu z wykorzystaniem Azure Cognitive Services!

Media społecznościowe, takie jak Twitter, Facebook czy Instagram, w ciągu każdej minuty generują ogromne ilości treści. Zwykły śmiertelnik nie jest w stanie tego wszystkiego śledzić na bieżąco, właściwie to zwykły śmiertelnik nie ma po co tego śledzić 🙂 Ale co w sytuacji, gdy prowadzisz firmę i bardzo zależy ci na opinii innych? Wtedy robi się ciekawie – chcielibyśmy wiedzieć czy mówi się o nas dobrze czy źle, a może bez żadnych skrajnych emocji? W dzisiejszym artykule zaprezentuję jak z pomocą sztucznej inteligencji dowiedzieć się co ćwierkają o nas na Twitterze!

Plan działania

  1. Założenie konta deweloperskiego na Twitterze w celu pobierania tweetów;
  2. Przygotowanie instancji Azure Cognitive Services do analizy sentymentu;
  3. Przygotowanie notatnika w Databricks, w którym pobierzemy dane z Twittera, przekażemy je do Cognitive Services, a następnie wyświetlimy rezultaty.

Czym jest Azure Cognitive Services?

Są to usługi kognitywne dostępne na platformie Azure. Dzięki nim możemy budować rozwiązania wykorzystujące sztuczną inteligencję, bez konieczności budowania i trenowania modeli Machine Learning. Zakres ich możliwości jest bardzo szeroki – możemy np. skorzystać z usług do rozpoznawania obrazu, w tym do rozpoznawania twarzy i emocji, ale nas najbardziej interesuje jeszcze inna właściwość tej usługi. Cognitive Services ma bardzo duże możliwości w zakresie analizy tekstu. Począwszy od jego moderacji, czyli wykluczania niedopuszczalnych i obraźliwych zwrotów, aż do analizy sentymentu wypowiedzi.

Czym jest sentyment wypowiedzi? Najprościej – jest to określenie czy dana wypowiedź ma charakter negatywny, pozytywy czy neutralny. W przypadku Cognitive Services wystarczy, że utworzymy instancję i za pośrednictwem API możliwa będzie analiza wysłanych przykładów. Nie trzeba trenować modelu, przygotowywać dużych zbiorów testowych. To po prostu działa.

Oczywiście, jak każde gotowe rozwiązanie, takie podejście ma swoje minusy, ponieważ nie można go dostrajać pod nasze konkretne potrzeby. Co z kosztami? Zasadniczo możemy skorzystać z darmowej instancji, która co prawda ma swoje ograniczenia, ale na potrzeby tego przykładu powinna wystarczyć. Niestety zauważyłem, że analiza sentymentu nie wypada najlepiej  w przypadku zwrotów z języka polskiego, dlatego dzisiaj posłużymy się tweetami w języku angielskim.

Konto deweloperskie na Twitterze

Chyba jasne jest, że jeżeli chcemy pobierać tweety powinniśmy mieć konto na Twitterze 🙂 Oczywiście oprócz zwykłego konta niezbędne jest też stworzenie konta deweloperskiego, które pozwoli nam, za pośrednictwem API, pobierać dane niemal z każdej aplikacji.

Aby stworzyć takie konto wchodzimy na tę stronę i aplikujemy o konto deweloperskie. Dostaniemy sporo pytań, na które będziemy musieli odpowiedzieć, ale po przejściu kilku formularzy konto deweloperskie zostanie nam przydzielone. Pozostaje jeszcze utworzyć aplikację, a właściwie to zdefiniować jaka aplikacja będzie pobierała tweety, i gotowe. Jeśli wszystko zostało wykonane poprawnie, powinniśmy dostać niezbędne klucze i hasła, o których więcej opowiem później. Cały proces jest szczegółowo opisany tutaj. Jak wspominałem, darmowa subskrypcja ma pewne ograniczenia, np. w postaci limitu pobieranych tweetów, ale na potrzeby tego rozwiązania to w zupełności wystarczy.

Tworzenie instancji Cognitive Services

Tutaj nie powinniśmy mieć żadnych problemów. Jeśli mamy doświadczenie z Azurem, to wszystko można bardzo łatwo wyklikać. Wszystko zaprezentowałem na na poniższych obrazkach. Natomiast należy pamiętać o zaznaczeniu opcji darmowego tiera. Tak naprawdę jedyne co nam potrzeba to parametry endpoint i key, dzięki którym będziemy mogli przekazać do API sentencje, których sentyment chcemy określić.

Właściwie z przygotowania to tyle, teraz pozostaje połączyć kropki w Databricks i będziemy wiedzieli, co o nas mówią 🙂

Niezbędne biblioteki

Jedną z ciekawszych rzeczy w Pythonie, bo w nim będziemy tworzyć nasze rozwiązanie, jest ogromna liczba bibliotek, które możemy wykorzystać. Dzięki temu nie ma konieczności pisania na nowo funkcji, które będą po prostu pobierać lub wysyłać jakieś dane za pośrednictwem API. Dlatego też w naszym przykładzie wykorzystamy dwie dodatkowe biblioteki:

  • python-twitter, która umożliwi podłączenie do interfejsu Twittera i pobranie niezbędnych danych,
  • azure-ai-textanalytics, dzięki której możliwe będzie wysłanie danych do Cognitive Services, a następnie pobranie rezultatów analizy. W efekcie otrzymamy tweety wraz z określonym sentymentem.

Warto pamiętać, aby przed rozpoczęciem pracy doinstalować do Databricks biblioteki, korzystając z poniższego polecenia:

Rozpoczynamy pracę!

Na początku konieczne będzie zdefiniowanie funkcji do autoryzacji w Cognitive Services. Funkcja ta jest właściwie skopiowana z przykładów Microsoftu. Dodajmy jeszcze jedną funkcję, która przyjmuje autoryzowanego klienta, a także dane. W naszym przypadku będzie to lista tweetów. Jako rezultat otrzymamy ID tweeta i sentyment, czyli informację czy tweet był pozytywny, negatywny czy neutralny. Kolejną rzeczą, jaką należy zrobić, jest utworzenie połączenia do API Twittera. Jako że korzystamy z biblioteki python-twitter, wystarczy, że podamy niezbędne klucze i tokeny, a połączenie zostanie utworzone.

Teraz należy utworzyć pętlę, która będzie pobierała dane z Twittera. Niestety, mając podstawową wersję konta deweloperskiego, możemy pobrać jednocześnie tylko 100 tweetów. Dlatego też, żeby mieć większą liczbę danych do analizy, będziemy iterować za ostatnie 7 dni (niestety to kolejne ograniczenie darmowego konta -możemy pobierać dane tylko z ostatnich 7 dni). Na samym końcu pozostaje nam usunięcie retweetów, żeby niepotrzebnie nie analizować kilka razy tej samej informacji.

Wysyłamy dane do analizy

Jesteśmy na etapie, kiedy wszystkie niezbędne dane zostały pobrane. Należy je teraz wysłać do Cognitive Services. Aby to zrobić, musimy wywołać funkcję, którą tworzyliśmy na początku i jako jeden z jej parametrów przekazać kolumnę z naszymi tweetami. Po wykonanej analizie dostaniemy określony przez Cognitive Services sentyment, a także ID. Żeby wiedzieć, który tweet ma jaki sentyment, należy połączyć po ID dwa dataframy – ten sprzed analizy i po niej. Na sam koniec narysujemy wykres, który zobrazuje nam, jak dużo mamy na swój temat opinii pozytywnych lub negatywnych. To wszystko!

Wady i zalety rozwiązania

Oczywiście nie jest to rozwiązanie, które od razu można wdrożyć na produkcję i korzystać z pełnym zaufaniem. Natomiast można je znacznie rozbudować, chociażby po to, aby analizowało większą liczbę danych. Plusem Cognitive Services jest fakt, że nie musimy budować i trenować modelu ML, ale z drugiej strony nie możemy też go dostrajać pod swoje potrzeby, aby dostawać znacznie bardziej wiarygodne wyniki. Ale niestety – aby wytrenować dobrze model potrzebowalibyśmy znacznie większej ilości danych.

Jak korzystać z załączonego notatnika?

Oczywiście całe rozwiązanie jest dostępne na moim githubie. To, co trzeba zrobić, to uzupełnić wartości widgetów o niezbędne parametry, to znaczy o klucze i tokeny do API Twittera i Cognitive Services. Mamy też dwa widgety, w których określamy słowo kluczowe, które chcemy badać i język, w którym mają być napisane tweety. Pierwsze 4 widgety uzupełnimy z wykorzystaniem kluczy z Twittera. Aby to zrobić należy z menu wybrać Apps -> Keys and Tokens, a w przypadku tokenów należy jeszcze kliknąć Regenerate. Dwa pozostałe klucze pobieramy z Cognitive Services. Wszystko umieściłem na poniższych obrazkach. Pozostało jedynie wpisać słowo, którego szukamy i język, w jakim chcemy tweety przeszukiwać.

Udostępnij post

Share on facebook
Share on twitter
Share on linkedin
Share on print
Share on email

Pozostańmy w kontakcie

Jeżeli chcesz być na bieżąco informowany o nowych wpisach oraz dostawać materiały, których nie publikuję na blogu - zapisz się do newslettera!