Minulý týden mi vyšel článek na MSDN na téma Data Mining vs. Machine Learning. Jedná se o lehce modifikovanou verzi předchozího článku a Azure Machine Learningu. Porovnávám obě technologie a popisuji, v čem je ML jiný, než DM
http://blogs.msdn.com/b/vyvojari/archive/2015/08/27/data-mining-vs-machine-learning.aspx
Zobrazují se příspěvky se štítkemMachine Learning. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemMachine Learning. Zobrazit všechny příspěvky
1. září 2015
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)
Přihlásit se k odběru:
Příspěvky (Atom)