10. června 2015

Sentiment analýza přes PowerBI

Po delší odmlce se opět dostávám ke psaní článků. Výpadek byl způsoben větším množstvím práce a komunitními akcemi. 3 přednášky na konferenci TechEd a 2x WUG (Zlín, Ostrava).
I na těchto akcích jsem ukazoval demo sentiment analýza přes PowerBI nástroje. O co se jedná? Firmě by se mohlo hodit jaká je zpětná vazba k jejím službám, aby mohla své služby zlepšovat. Příklad z reálného života, měl jsem požadavek od jedné spolupracující firmy na vyhodnocení slovních komentářů k aplikaci v Android marketu, co se uživatelům aplikace líbí a nelíbí. Dalším použitím by mohla být analýza Tweetů, komentářů na Facebooku (PowerQuery má Facebook konektor už nějakou dobu).
Jak by se k problému dalo přistoupit? Buď můžete najmout člověka, který bude komentáře, statusy atd. číst a vyhodnocovat. Nebo na to pustíme stroje. Pro strojové zpracování dat se jedná o slušnou výzvu pro vývojáře. Naprogramovat aplikaci, která je schopná porozumnět lidské řeči, rozlišit ironii od upřímně mysleného komentáře není vůbec jednoduché. Chtělo by to nástroj, který je schopný pracovat s textem a pokud možno i učit se ze svých chyb. V Azure Microsoft nabízí službu Azure Machine Learning, která tomuto přesně vyhovuje. Službu naštěstí může použít i člověk, který Azure ML nikdy v životě neviděl a není programátor. Datoví vědci, kteří problematice rozumí a mají nezbytné IT schopnosti se mohou o své výtvory podělit a i na nich vydělávat peníze. Mnoho algoritmů je dostupných i zdarma pro každého.
Pokud byste si chtěli přidat nějakou funkcionalitu z Azure Marketplace, najdete ji na webu http://datamarket.azure.com/browse/data
Mezi algoritmy byste našli i Lexicon Based Sentiment Analysis (pod Machine learning) zde
Po registraci dát pořídit funkci. Problém s lexicon based (na základě slovníku) je, že bude reagovat pouze na anglický slovník. Česká data bych potřeboval prvně přeložit do angličtiny, abych mohl provádět Sentiment analýzu. A proč se omezovat na jeden jazyk? Můžeme pvně zjistit jakým jazykem je psaný komentář a tento přeložit do angličtiny, poté vyhodnotit sentiment.
Pro detekci jazyka a překlad můžeme použít MS Translator API v datamarketu, funkci naleznete zde https://datamarket.azure.com/dataset/bing/microsofttranslator
Celou následující demonstraci jsem předváděl na WUG v Brně, na video záznam se můžete podívat na následujícím linku http://www.wug.cz/zaznamy/264-Excel-a-Self-Service-nastroje-pro-Business-Intelligence v čase okolo: 2:50:00
Použiji jen trochu jiná data
Prvně si napíšu do Excelu data do tabulky k analýze. Můžeme zkoušet různé jazyky.
Komentář
Miluji svého šéfa, je to skvělý chlap
Včerejší nehoda na D1 mi radost neudělala, zkysnul jsem tam na 2 hodiny
Venku je dnes hnusně, zůstanu raději pod peřinou
Kolega evidentně není z nejbystřejších
To je dobré jak cyp
Je to čudné, něpáčí sa mi to
Ještě jednou mi zavoláte a budu si stěžovat
Horší oběd jsem v životě nejedl, zvracel jsem ještě několik hodin
čo bolo to bolo, terazky som majorom
čo vravíš ty somár?
I like the way you use PowerQuery
PowerView sucks, you can't change labels
Awwwwwssssssoooooomeeeeeeee
V PowerQuery vyberu, že chci přidat data z Excelové tabulky (Excel Data – From Table). Dotaz zavřu křížkem a zachovám změny. Přidám další zdroj dat From Azure – From Azure Data Marketplace a postupně vyklikám, že chci přidat referenci na funkce z Microsoft Translatoru – Detect (detekce jazyka, ve kterém byl komentář) a Translate pro překlad do angličtiny. Z Lexicon Based Sentiment Analýzy vyberu jedinou funkci Score. Tímto bychom měli vidět v seznamu PowerQuery dotaz Table1 a 3 referencované funkce, klikneme pravým talčítkem na Table1 a dáme Edit. Vidíme zpět náhled tabulky a jdeme na věc.
Prvně budu muset detekovat jazyk funkcí Detect. Přidávám sloupec (Add column - Add custom column) a píši vzorec
Detect([Komentář])
Potvrzuji a vyskakuje na mě tabulka, opravdu chcete ony citlivá data z dokumentu kombinovat z funkcí volanou z internetu. Musím označit data ze sešitu jako public, jinak dostanu chybovou hlášku. Rozbaluji tabulku, ruším prefix a dostávám následující výstup. Pravda, že ne vždy se musí trefit. Viz je to dobré jak cyp.
Komentář
Code
Miluji svého šéfa, je to skvělý chlap
cs
Včerejší nehoda na D1 mi radost neudělala, zkysnul jsem tam na 2 hodiny
cs
Venku je dnes hnusně, zůstanu raději pod peřinou
cs
Kolega evidentně není z nejbystřejších
cs
To je dobré jak cyp
sk
Je to čudné, něpáčí sa mi to
sk
Ještě jednou mi zavoláte a budu si stěžovat
cs
Horší oběd jsem v životě nejedl, zvracel jsem ještě několik hodin
cs
čo bolo to bolo, terazky som majorom
sk
čo vravíš ty somár?
sk
I like the way you use PowerQuery
en
PowerView sucks, you can't change labels
en
Awwwwwssssssoooooomeeeeeeee
en

Přidávám obdobně další sloupec a píši vzorec s funkcí Translate v pořadí co chci přeložit, do jakého jazyka z jakého jazyka
Translate([Komentář],"en",[Code])
Rozbaluji tabulku bez prefixu a získávám přeložená data
Komentář
Code
Text
Miluji svého šéfa, je to skvělý chlap
cs
I love my boss, he's a great guy
Včerejší nehoda na D1 mi radost neudělala, zkysnul jsem tam na 2 hodiny
cs
Last night's accident on D1 me happy, I was stuck there for 2 hours
Venku je dnes hnusně, zůstanu raději pod peřinou
cs
Out today is bad, you'd better stay under the covers
Kolega evidentně není z nejbystřejších
cs
A colleague is clearly not of the brightest
To je dobré jak cyp
sk
It is a good idea as cyp
Je to čudné, něpáčí sa mi to
sk
It's strange to me that něpáčí
Ještě jednou mi zavoláte a budu si stěžovat
cs
You call me one more time and I'll complain
Horší oběd jsem v životě nejedl, zvracel jsem ještě několik hodin
cs
The worse I've ever eaten lunch, I threw up a few more hours
čo bolo to bolo, terazky som majorom
sk
what it was was I his terazky
čo vravíš ty somár?
sk
What vravíš you a donkey?
I like the way you use PowerQuery
en
I like the way you use PowerQuery
PowerView sucks, you can't change labels
en
PowerView sucks, you can''t change labels
Awwwwwssssssoooooomeeeeeeee
en
Awwwwwssssssoooooomeeeeeeee

Zbývá vyhodnotit sentiment za použití funkce Score. Přidávám nový sloupec a píši vzorec
Score([Text])
rozbaluji Result bez prefixu a získávám sentiment, škála od -1 (negativní) do 1 pozitivní, 0 neutrál. Desetinné číslo se záporným znamínkem spíš negativní, atd.
Komentář
Code
Text
result
Miluji svého šéfa, je to skvělý chlap
cs
I love my boss, he's a great guy
1
Včerejší nehoda na D1 mi radost neudělala, zkysnul jsem tam na 2 hodiny
cs
Last night's accident on D1 me happy, I was stuck there for 2 hours
1
Venku je dnes hnusně, zůstanu raději pod peřinou
cs
Out today is bad, you'd better stay under the covers
-0.333333333
Kolega evidentně není z nejbystřejších
cs
A colleague is clearly not of the brightest
1
To je dobré jak cyp
sk
It is a good idea as cyp
1
Je to čudné, něpáčí sa mi to
sk
It's strange to me that něpáčí
-1
Ještě jednou mi zavoláte a budu si stěžovat
cs
You call me one more time and I'll complain
-1
Horší oběd jsem v životě nejedl, zvracel jsem ještě několik hodin
cs
The worse I've ever eaten lunch, I threw up a few more hours
-1
čo bolo to bolo, terazky som majorom
sk
what it was was I his terazky
0
čo vravíš ty somár?
sk
What vravíš you a donkey?
0
I like the way you use PowerQuery
en
I like the way you use PowerQuery
1
PowerView sucks, you can't change labels
en
PowerView sucks, you can''t change labels
0
Awwwwwssssssoooooomeeeeeeee
en
Awwwwwssssssoooooomeeeeeeee
0

Pravda je, že to Score ne vždy trefilo (stížnost na zásek na D1 (ale zde pochybyl už překladač). Chtělo by to tedy stejně ruční validaci a aby se stroj mohl učit z vlastních chyb.
Závěr

K tomuto nápadu mě přivedl článek Chrise Webba (blog: http://cwebbbi.wordpress.com  v angličtině), nicméně jsem jej musel modifikovat s překladem do češtiny. Stěžejním bodem dnešního článku není, že sentiment analýza přes Excel je nejúžasnější věc na světě. Vidíte, že to nefunguje na 100% (byť je to fajn a lepší než číst dlouhé texty a snažit se sám detekovat jazyk a překládat a i to score se hodí). Stěžejní myšlenkou je, že se můžu z PowerQuery připojit na programové API od třetí strany a uživatelsky využívat službu Machine Learning aniž bych byl Datový vědec (Data Scientist)

Žádné komentáře:

Okomentovat