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