Kolejna odsłona style transfer

Technologia style transfer, pozwalająca na przeniesienie stylu jednego obrazu na inny wywołała kilka lat temu spore zamieszanie. Dla wielu osób była to pierwsza okazja kiedy usłyszały o Deep Learning. Dla innych było to odkrycie niesamowitych możliwości nowoczesnych maszyn i algorytmów. Niestety ma on wiele wad. Do najpoważniejszych można zaliczyć ogromną złożoność obliczeniową – obróbka pojedynczego zdjęcia wymaga kilku-kilkunastu minut obliczeń z wykorzystaniem najszybszych kart graficznych. Innym problemem jest częste powstawanie artefaktów i tworzenie niespójnych obrazów w których elementy stylu są przenoszone błędnie na niewłaściwe elementy obrazu (np. liście drzew na budynki,  błękit nieba na drogi itp.)

Screenshot from 2018-02-24 10-18-50.png

Kilka dni temu badacze z Uniwersytetu Kalifornijskiego z Merced oraz Nvidii opublikowali najnowsze wyniki swoich badań wraz z kodem źródłowym, w których  pokazali jak można przyśpieszyć technologię style transfer 60-cio krotnie i jednocześnie generować znacznie bardziej spójne obrazy. FastPhotoStyle, bo tak nazwali swoje oprogramowanie, w przeciwieństwie do istniejących algorytmów nie wymaga wielu iteracji a cały proces sprowadza się do 3 krótkich faz: stylizacji, propagacji i post-processingu. Badacze przeprowadzili też ankietę w której porównali opinie na temat wyników uzyskiwanych przez własny system oraz trzy inne, czołowe rozwiązania, w której ponad połowa respondentów uznała, że zarówno realizm jak i stopień stylizacji osiągnięty przez badaczy z Merced najbardziej im odpowiada.

Screenshot from 2018-02-24 12-43-26.png

W dalszej części artykułu pokażę jak możemy samodzielnie zreplikować zaprezentowane wyniki. Niezbędny będzie do tego komputer z GPU Nvidii (jeśli nie mamy takiego w domu możemy wykorzystać cloud, np. Google Compute, gdzie ceny K80 wynoszą 0.45USD a nawet 0.2USD za godzinę przy minutowym rozliczaniu!) posiadający minimum 16GB RAM. Czytaj dalej Kolejna odsłona style transfer

Przykład klasyfikacji polskich tekstów (część 1)

Klasyfikacja tekstów wydaje się być zagadnieniem akademickim ma jednak bardzo wiele praktycznych zastosowań. Jedno z nich to automatyczne segregowanie zleceń w systemie CRM, innymi przykładami mogą być przypisywanie kategorii i tagów do różnego rodzaju publikacji, np. książek w sklepie, czy artykułów w Internecie,  wykrywanie tekstów o określonej treści, np.  wulgarnych, nacechowanych nienawiścią, tzw. fake-newsów, czy wręcz rozpoznawanie płci autora, grupy docelowej itd. itp. Wszystko zależy od pomysłowości i dostępnych danych.

Z klasyfikacją tekstów wiąże się też kilka pokrewnych zagadnień o których mam nadzieję w przyszłości napisać. Przykładem mogą być tu określenie wieku autora, roku publikacji, stopnia zdenerwowania piszącego, wartości oceny produktu której towarzyszył komentarz itp. Kolejnym zagadnieniem jest generowanie tekstów na podstawie tekstów: streszczenia na podstawie książki, tematu na podstawie treści zgłoszenia czy wręcz odpowiedzi na zapytanie.

W dalszej części opiszę prosty przykład klasyfikacji tekstów z wykorzystaniem regresji logistycznej w scikit-learn a w przyszłości może pokażę jak można poprawić rezultaty z wykorzystaniem bardziej zaawansowanych technik. Wszystkie przykłady były uruchomione z wykorzystaniem Jupytra kernelem Python 3. Link do notatnika znajduje się na końcu artykułu. Czytaj dalej Przykład klasyfikacji polskich tekstów (część 1)

Deep Learning w e-commerce

W marcu 2017 roku pracownicy działu badawczego Flipkart, praktycznie nieznanego w Europie „Indyjskiego Amazon” wycenianego na 12 miliardów USD, opublikowali pracę zatytułowaną Deep Learning based Large Scale Visual Recommendation and Search for E-Commerce. Pokazali w niej bardzo ciekawe zastosowanie Deep Learningu do budowy systemu rekomendacyjnego odnajdującego identyczne lub bardzo podobne ubrania na podstawie zdjęcia. Nie jest to pomysł nowy, sami autorzy pracy odwołują się w niej do co najmniej kilkunastu innych prac obejmujących to zagadnienie. Tym razem jednak  rozwiązanie zostało zaprojektowane z myślą o e-commerce a nie jako akademicki test możliwości ML więc jego celem było nie tyle stwierdzenie czy dwa prezentowane zdjęcia pokazują tę samą garderobę ile wyszukanie w ogromnej bazie asortymentu przedmiotów podobnych i prezentacja ich jako sugestii dla klienta. Czytaj dalej Deep Learning w e-commerce

Przygotowanie polskiego modelu word2vec z wykorzystaniem korpusu OpenSubtitles

Jednym z częstych zagadnień związanych z Machine Learning jest budowa tzw. word embedding, czyli sposobu reprezentacji wyrazów w postaci liczbowej. Technika ta pojawiła się na początku lat 2000 za sprawą serii prac Yoshuy Bengio, jednak prawdziwy jej rozkwit nastąpił w 2013 roku za sprawą publikacji prac zespołu google pod przewodnictwem Tomasa Mikolova. Zespół opracował a następnie udoskonalił metodę zapisu znaczenia słów w postaci wektorów w wielowymiarowej przestrzeni. Typowo stosowane są przestrzenie 100 i 300 wymiarowe. Zapis ten określony został mianem word2vec.  Do jego stworzenia stosuje się dwie metody Continuous Bag of Words (CBoW) oraz Continuous skip-gram. W pierwszej z nich model przewiduje aktualnie uczone słowo na podstawie słów otaczających bez uwzględnienia kolejności (bag of words). W drugiej model wykorzystuje aktualne słowo do prognozowania słów otaczających, przy czym słowom bliższym przyporządkowana jest wyższa waga. Według autorów CBOW jest szybszy ale algorytm skip-gram osiąga lepsze rezultaty dla rzadszych słów.


Reprezentacja wektorowa słów word2vec posiada  bardzo ciekawą cechę, mianowicie pozwala ona przeprowadzać na słowach operacje arytmetyczne. Przykładowo:

brat - mężczyzna + kobieta = siostra

W powyższym wyrażeniu w słowie brat odjęty zostanie  aspekt męski a dodany kobiecy co powoduje że w wyniku tej operacji otrzymujemy słowo siostra. Czytaj dalej Przygotowanie polskiego modelu word2vec z wykorzystaniem korpusu OpenSubtitles