maandag 23 mei 2016

02 - Helpdesk

Het nadeel van de gekozen opzet is natuurlijk dat ik de nauwkeurigheid van het NN niet echt kan testen. Uiteraard geven mijn validatie descriptions afwijkende antwoorden:

0 Short description  : user claim the counterdesk is closed                        
0 Suggested solution : code new link sent to user code 

0 Real solution      : advice user to contact the receptionist or contact the management of the counterdesk user acknowledge

1 Short description  : i am unable to install any software from software portal                    
1 Suggested solution : transfer lendie humble
1 Real solution      : called the user on      user informed that the issue is resolved gave consent to closethe call 

2 Short description  : dropped chat                            
2 Suggested solution : dropped invalid call
2 Real solution      : dropped chat  chat crashed could not recover chat log

3 Short description  : email  user mentioned sometime he did not receive email                    
3 Suggested solution : transfer lendie humble
3 Real solution      : code pankaj confirmed the messages are getting through just fine  issues resolved  code 

4 Short description  : aventail not working                           
4 Suggested solution : dropped invalid call

4 Real solution      : uninstall aventail deleted aventail log installed aventail 


Het voorbeeld nummer 2 hier lijkt het (toevallig?) aardig te doen. Maar de rest is nog ver van juist.
En hoewel de 'loss' en 'validation loss' per Epoch aan het afnemen zijn is het moeilijk te bepalen hoe goed of slecht mijn NN het doet. Wellicht kan ik de resultaten testen door in de 'short descriptions' van de 'learndata' wat random variatie te gooien en dat dan als validatie descriptions aanbieden.
De oplossing is daarnaast niet zo 'scalable'. Nu heb ik nog 'maar' 17.207 mogelijke uitkomsten. Ik vind het al knap dat mijn putertje dat aankan. Als ik per nieuw ticket een oplossing blijf aanbieden wordt de matrix echter onhanteerbaar. Hmmm. Vraagt dus een andere strategie. Eventjes laten bezinnen.

Ik heb naast de 'short description' en de 'solution' ook nog een 'service offering'. Die kan ik wel gebruiken. Bijvoorbeeld om tickets automatisch te classificeren. Ik maak een 2e, vergelijkbare NN aan maar nu met de service offerings als output. Met de validatie records kan ik nu wel een betrouwbaarheidsmeting doen. Ik kom uit op ongeveer 50%. Ook als ik mijn LSTM ombouw naar een 'gewoon' NN. Wellicht komt dat door een onzorgvuldige selectie van de offering bij de registratie van de tickets. Is 'unable to connect' bijvoorbeeld een software / hardware  of netwerk issue?
Er moet toch iets meer intelligentie uit te halen zijn. Ook maar eens even laten bezinnen ...  

Om meer inzicht te krijgen in het verloop van het leerproces probeer ik Keras 'plot model' te gebruiken.


from keras.utils.visualize_util import plot

Dat werkt helaas niet zomaar. 'pydot' en 'graphviz' krijg ik blijkbaar niet zomaar met 'pip' installatie gekoppeld. Ik wordt verwezen naar 'MacPorts'.  Als ik dan na installatie daarvan


$ sudo port install graphviz-gui

intyp gaat hij een hele hoop dependencies installeren:


--->  Dependencies to be installed: graphviz expat fontconfig freetype bzip2 libpng zlib libiconv gd2 jpeg tiff xz gettext ncurses xpm xorg-libXext xorg-libX11 xorg-kbproto xorg-libXau xorg-xproto xorg-libXdmcp xorg-libxcb python27 db48 libedit openssl python2_select python_select readline sqlite3 xorg-libpthread-stubs xorg-xcb-proto libxml2 xorg-xextproto xorg-libXt xorg-libsm xorg-libice gts glib2 libffi pcre libnetpbm libLASi pango Xft2 xrender xorg-renderproto cairo libpixman xorg-xcb-util gobject-introspection libtool py27-mako py27-beaker py27-setuptools py27-markupsafe harfbuzz graphite2 urw-fonts webp xorg-libXaw xorg-libXmu

Gelukkig blijkt mij Theano nog steeds te werken. Ook moet ik nog de applicatie graphviz installeren. Phoe... Het resultaat is wat teleurstellend. Althans ik was naar wat anders op zoek:



Met de volgende statements kom ik wat verder:


from keras.callbacks import History

history = History()

model.fit(x_train, y_train, batch_size=64, nb_epoch=1, validation_data=(x_test, y_test), callbacks=[history])
print( history.history['loss'])

Daar kan ik iig het verloop (van o.a. de 'loss') mee vastleggen in een variabele en dan bijvoorbeeld in een grafiek plotten.

Geen opmerkingen:

Een reactie posten