DSP| Daj Się Poznać 2016 - Podsumowanie projektu

Niektóre rzeczy kończą się zanim na dobre zdążyły się zacząć. W ten oto niechlubny sposób dobiega końca moja przygoda z Daj Się Poznać. Zaledwie dwa posty i niewielka ilość kodu w repozytorium. Czy to oznacza, że niewiele pracy włożyłem w ten projekt? Czy to oznacza, że kod nie będzie już dalej rozwijany? Nie i nie. Oto garść ciekawostek z tego, co działo się za kulisami oraz dalsze plany rozwoju.

Szwajcarski scyzoryk

Kod umieszczony na GitHubie na ten moment jest jedynie wierzchołkiem góry lodowej. Większa część commitów została wypuszczona do prywatnego repozytorium na BitBucket, gdzie powstał zestaw pomocniczych narzędzi. Ich celem było wygenerowanie i zarządzanie bazą tekstów dla algorytmu. Dlaczego to repozytorium jest prywatne? W mojej ocenie kod umieszczany publicznie musi być przydatny dla innych osób, schludnie napisany oraz odpowiednio opisany. Mój szwajcarski scyzoryk był pisany możliwie jak najszybciej i posłużył tylko do stworzenia zbioru uczącego. Oto jak wygląda lista projektów:

  • WebCrawler - odczytuje komentarze ze wskazanych stron i zapisuje do pliku tekstowego

  • MongoDbImporter - transformuje dane z pliku i umieszcza w bazie MongoDb

  • SentiVoteApp - pozwala użytkownikowi ocenić dany komentarz i zapisuje wynik do bazy (takie oceny są później używane do weryfikacji poprawności algorytmu)

Tak wygląda okno aplikacji SentiVoteApp:

Trzy główne przyciski pozwalają ocenić komentarz jako negatywny/neutralny/pozytywny. W wyjątkowych sytuacjach można oznaczyć komentarz jako nieprawidłowy lub wykasować ostatnią ocenę.

Co w bazie piszczy

Do stworzenia algorytmu potrzebna jest jak największa baza komentarzy z ocenami użytkowników. Z użyciem wyżej wymienionych narzędzi zebrałem dane z trzech źródeł:

  • Allegro - komentarze są już ocenione oraz łatwo je zebrać z wykorzystaniem API. Minusem jest to, że w większości są powielane przez użytkowników oraz posiadają bardzo wąski zakres słownictwa. Konieczne było usunięcie powtarzających się lub bardzo podobnych komentarzy.

  • Twitter - brak dostępu do historycznych danych, natomiast udostępnia API, które pozwala nasłuchiwać na bieżące tweety w danej lokalizacji. Do zebrania tych danych stworzyłem prostą aplikację konsolową i umieściłem na Azure jako WebJob. Aplikacja podpinała się pod aktualny stream z tweetami i zapisywała dane do bazy. Plusem tych danych jest to, że są bardzo zróżnicowane; dotyczą wielu tematów. Minusem, że bardzo często nie są nacechowane emocjami np. "Znowu pada". Czy takiemu tweetowi można przypisać sensowną ocenę?

  • Pudelek - o dziwo najlepsze źródło danych jakie udało mi się znaleźć. Dlaczego? Po pierwsze, komentarze są zawsze po polsku, jest w nich mało slangu oraz internetowych skrótów. Po drugie, są krótkie i zwięzłe, trafia się mało wielolinijkowych wywodów, Po trzecie, prawie zawsze są nacechowane emocjami (czasami aż nadto).

Miejsce publiczne

Na GitHubie umieściłem aplikację ASP.NET MVC, która będzie wystawiać API do analizy sentymentu oraz kilka prostych stron do testowania API z poziomu przeglądarki. Użyłem darmowej wersji TFSa do automatycznego budowania projektu po każdym commicie oraz kopiowania najnowszych binarek do chmury Microsoftu pod adres wons.azurewebsites.net. Sam algorytm do rozpoznawania emocji nie ma jeszcze implementacji, ale udało mi się już stworzyć wersjonowanie API. Do każdego wywołania metody z API można dołączyć parametr version, dzięki któremu kontener zależności Unity pobierze odpowiednią wersję implementacji. W razie braku podania tego parametru zawsze jest brana najnowsza wersja. W solucji struktura wygląda tak:

Poszczególne wersje klas są umieszczone w podfolderach w numerem wersji. Jeśli użytkownik nie będzie chciał migrować do nowszej wersji to wystarczy, że określi wybrany numer wersji w każdym wywołaniu do API.

Dalsze plany

Baza tekstów jest gotowa, oceny komentarzy również są przeze mnie dodawane do bazy. Kolejnym krokiem będzie implementacja samego algorytmu, co wymaga poszerzenia wiedzy z zakresu analizy danych. Materiałów dostępnych w Internecie na ten temat jest cały ogrom. Chciałbym przy okazji przypomnieć sobie język R oraz nauczyć się podstaw Pythona. Kurz związany z konkursem już powoli opada i nagle zaczynam znajdywać coraz więcej czasu na dalsze zgłębianie tego tematu. Widocznie praca pod presją mi nie służy ; ) Oby przyszłość malowała się w zielonych odcieniach commitów na GitHubie.

Share this post

comments powered by Disqus