Jakiś czas temu, na RBloggers pokazano jak z poziomu R używać Microsoft Cognitive Services API. Co to za API? Zbiór usług do pracy z obrazem, wideo lub tekstem. Przykładowo Ben Heubl użył Emotion API aby ocenić emocje na zdjęciach kandydatów na prezydentów USA a David Smith użył Face API aby oceniać płeć i wiek programistów na GitHub na bazie awatarów.
Super zabawka. Miałem chwilę czasu, stwierdziłem, że się nią pobawię.
Tylko skąd wziąć publicznie dostępny zbiór zdjęć?
Z pomocą przyszła strona Sejmu. Można z niej pobrać profilowe zdjęcia posłów i posłanek.
Korzystanie z Microsoft Cognitive Services okazuje się być bardzo proste, wystarczy użyć pakietu xml2 i funkcji read_html().
Emotion API dla każdej twarzy ze zdjęcia wyznacza scory dla ośmiu emocji (anger, contempt, disgust, fear, happiness, neutral, sadness, surprise). Ale dla zdjęć profilowych posłów i posłanek praktycznie jedyne niezerowe scory otrzymuje się w emocjach happiness i neutral. Okazuje się, że niektóre zdjęcia posłów i posłanek zdobywają wyższe skory w obszarze happiness a inne w neutral.
Co ciekawe posłanki mają znacznie częściej zdjęcia wysoko ocenione w skali happiness. Posłowie mają zdjęcia zeskorowane mniej więcej pół na pół jako happy i neutral.
Poniżej wyniki w rozbiciu na kluby. Proszę traktować to jako zabawkę z Cognitive Services i nie wyciągać niewiadomo jakich wniosków. Narzędzie jak narzędzie, ma jakąś niedokładność. W pionie, kluby uporządkowane ze względu na udział procentowy posłów/posłanek zescorowanych na zdjęciach jako najszczęśliwsi.
Nie wiem jak czytać ten wykres… Jeżeli jest wysoki słupek nad 75-100% to co to oznacza?
Każdy kwadrat to jedna osoba. Jeżeli jest wysoki słupek nad 75-100% to znaczy, że było wiele osób z takim scorem.
A może warto znormalizować do liczby posłów w partii – wtedy zobaczylibyśmy „wskaźnik szczęśliwości” wśród posłów, no bo ilościowo .N i Kukiz’15 jest najmniej, a PiS najwięcej. Na oko, to najszczęśliwsi są z Kukiza: nie są partią i nie mają dotacji?).
Można unormować (mozaikowe wykresy to pierwsze co zrobiłem), tylko wtedy cały wykres jest o porównywaniu partii i gubi się informacja o pojedynczych posłach (a tego chciałem uniknąć).
Teraz przynajmniej każdy poseł ma swoja kropkę i swoje zdjęcie,
kluby można porównać zestawiając wysokości słupków szarych i zielonych, dla niektórych partii jest wyższy szary dla innych zielony.
kluby są zresztą uszeregowane, ich kolejność na osi OY to kolejność od tych ze średnio największą liczbą posłów z wysokim skorem happy po tych o niższym skorze.
Unikałbym jakichś daleko idących wniosków, gdy się ogląda zdjęcia wysoko i nisko zeskorowane nie zawsze jest jasne skąd takie a nie inne wartości liczbowe wygenerowane przez MCS.
Ciekawe. Czy jest szansa zobaczyć kody? Także te do wykresu.
Warto byłoby zobaczyć czy poziom zadowolenia na zdjęciach zmienia się wraz z faktem bycia w opozycji / większości parlamentarnej. No i zważyć wartości dla klubów liczebnością
Z dokładnością do stałej (trzeba ustawić własne access key) kody wyglądają tak
Funkcja do wyciągania emocji z dowolnego zdjęcia.
Strona sejmu próbuje się bronić przed wyciąganiem zdjeć posłów ze strony o posłach, więc trzeba korzystać z dziur.
Kod poniżej wyciąga scory i kluby posłów/posłanek.
Powyższy wynik to lista list list, trzeba zrobić porządek (a że na map/walk się nie przestawiłem, więc kilka brudnych sapply). Dla innych emocji podobnie.
Wykres to odrobina ggplot2, ale większość przesuwania kropek w Adobe Ilustrator.
dziękuję 🙂
Cześć 🙂 Co jest w zmiennej mybody w funkcji getEmo?
A, sorry, tam powinien być link do zdjęcia.
Ta funkcja powinna wyglądać tak:
Temat robiony pod click-bait 🙂
Moim zdaniem metodyka bardziej pokazuje, którzy posłowie dbają o takie szczegóły jak dobry fotograf 🙂
Temat ciekawy i można byłoby pobawić się w zaciągnięcie zdjęć z profili fb / twittera.
Genialne. Dziękuję bardzo!
Pozwolę sobie na małe trzy grosze. To API to jakiś fake: ot filmik z mężczyzną brunetem. Obserwując klatka po klatce API przypisuje emocje bazując na kształcie ust i ignoruje fakty. Dlaczego? Facet jest wyraźnie zły, ale w trakcie wypowiedzi API przypisuje mu fazy jak „neutral” czy „surprise”. Przy czym wiadomo, że stan emocjonalny nie zmienia się z sekundy na sekundę. Jakby nawet podliczyć ilość przypisanych stanów to wyszłoby, że wyraźnie zły człowiek najczęściej był „neutral” albo „surprised”.
To nie jedyna wada. A co z „happiness”? Przecież od dawna wiadomo, że to bardzo złożona emocja a ze stanów wynika, że to raczej „szeroki uśmiech” a nie faktyczne szczęście. Introwertyk zaliczony byłby przez to API jako „neutral” a w rzeczywistości czułby się szczęśliwym człowiekiem.
Wystarczy podać zdjęcia z oczywistymi emocjami i wychodzi, że ludzie są neutralni. Gdyby ktoś chciał wnioskować o warunkach bytowania ludzi w obozach odosobnienia na podstawie tego, co wywnioskowało to API to uznałby, że warunki w obozach zagłady były neutralne.
MCS ma ograniczoną skuteczność (jak każdy algorytm machine learning), ale aby mówić o tym czy dużą czy małą trzeba by zrobić badania na większym korpusie zdjęć. To, że jedno czy kilka zdjęcie wychodzi inaczej niż byśmy chcieli o niczym nie świadczy.
Takie badania (zgodności z oceną ludzkiego scorera) byłyby bardzo ciekawe i do zrobienia przy niewielkich środkach (+czas). Więc może ktoś się pokusi.
Póki co google niewiele pokazuje na hasło: how good are microsoft cognitive services.
Nie widzę szans na to, żeby zwiększona próbka dała inne wyniki bo decyzja API jest oczywista jak tylko zobaczy kształt ust: proste = neutralność. Także usta otwarte (oczy nie wydają się mieć znaczenia nawet).
Miłego prowadzenia badań, ale moim zdaniem po odjęciu marketingu tu zostaje co najwyżej rozpoznawanie kształtu ust a nie emocji.