vrijdag 14 oktober 2016

02 Chatbots

Na een 100 epochs waarin de fout indicator flink is teruggelopen zou mijn chatbotje (Hoe zal ik hem eens noemen - Kletsmajoortje - Brabbelaartje - Deep neural network supported general advisor?) nu toch wel wat zinnigs moeten kunnen uiten.


Hier een stukje van het resultaat:

-->How are you ?
 Last are sick .-->Are you sick ?
 Three other sake , by . ' .-->This makes no sence .
('word ', 'sence', ' not known.')
-->This makes no sense .
 Well , would have a fire a-->What is your name ?
 'Cause I don't know .-->You don't know ?
 Is he alright ? He knows ... tell him it-->What ?
 The doctor needs as the week . What is actually-->Still no impressive answer .
 What were you see ? I'm sorry .-->Are you sorry ?
 No .-->That is more like it .
 What's going on ? I'm going going .-->Are you going ?
 We've still see him ? No , that's course .-->Are you still sorry ?
 No .-->Ar you happy ?
('word ', 'Ar', ' not known.')
-->Are you happy ?
 We're going back , see what I didn't say I'm-->You are what ?
 You said that not first all right for the entirely-->Seem like a bitch
('word ', 'Seem', ' not known.')
-->Seems like a bitch
 along on black that somebody . You've in here ?-->What is the meaning of live ?
 Oh , yes , I think so .-->Good !
 You think so ? Well , if you get that-->Now your making sense !
 What's his name ? No . That's !-->What is your name ?
 Yup .-->Yup ?
 This is this ? It's waiting for you care .-->bloody nonsense
 care on this fucking new ... men who call the-->fucking ?
 When you are you where ?-->I am not there
 . What's the doing again ? Did you be going-->I see little progress
 . What's the favorite-->I am
 go . Then does it look ? It ... have-->what do you mean ?
 I should have a lot of things .-->Sure
 is ? Whatever-->ok
 ? Yes-->not ok
 ? Yes This The matter of 'em .-->Do you know a joke ?
 Uh , yes , we think what is she I-->What is logic
 ? Oh , I'd be a plane bitch that he-->stop
 ? Yes , you could do .() 

Hmmm ... Soms lijkt er een beetje logica in te zitten maar het meeste is toch onzinnig. Dat zit nog ver van de resultaten die anderen ermee lijken te hebben. Digging further ...

zondag 2 oktober 2016

01 Chatbots

Even weer wat anders Chatbots!!! Mijn uitgebreide lezerskring heeft mij erop gewezen dat de berichtgeving zwaar achterblijft :-)
Al enkele dagen dus bezig met het onderzoeken van, op NN gebaseerde, chatbots. Feitelijk gaat het om sequence to sequence netwerken (Op basis van LSTM - Long Short Term Memory's) waarbij de ene datastroom automatisch vertaald wordt naar een andere datastroom. Hiermee worden bijvoorbeeld heel goede resultaten gehaald met vertaal netwerken.

Ik heb er al eens eerder mee ge-experimenteerd.  En ook met een helpdesk applicatie maar in beide gevallen ben ik daar weer van afgeleid door een nieuwe Kaggle competitie.

Ik besluit wat dieper te duiken.

Dit artikel van Google geeft aardig aan wat er mogelijk zou moeten zijn.

 https://arxiv.org/pdf/1506.05869v3.pdf

Maar goed ... daar staat geen code in. Ik vindt wel een code op basis van Torch.  Ook een bekend NN platform. Maar om mij dat nou weer eigen te maken. Wellicht kan ik wel de concepten overnemen.

Een daarvan is de bron data. Deze is gebaseerd op een dialogen database uit filmscripts.

the 'Cornell Movie-Dialogs Corpus'

Dat lijkt mij wel een goede bron.

De conversatie data blijkt er zo uit te zien:

L1045 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ They do not!
L1044 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ They do to!
L985 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ I hope so.
L984 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ She okay?
L925 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ Let's go.
L924 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ Wow
L872 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ Okay -- you're gonna need to learn how to lie.
L871 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ No
L870 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ I'm kidding.  You know how sometimes you just become this "persona"?  And you don't know how to quit?
L869 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ Like my fear of wearing pastels?
L868 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ The "real you".
L867 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ What good stuff?
L866 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ I figured you'd get to the good stuff eventually.

Na wat knutselen krijg ik de 'rommel' , sorry metadata, eruit. Ik laad gelijk maar alle zinnen. Dan 'weet' mijn chatbot lekker veel :-). Het blijkt echter een behoorlijk groot bestand.   304.713 zinnen met zo'n 31.208 verschillende woorden.  Mijn netwerk knalt erop:

('Iteration', 1)
Epoch 1/1

141056/149095 [===========================>..] - ETA: 73s - loss: 3.6311Killed: 9

Met name dat 'Killed: 9' slaat volgens mij op het aantal taken dat afgekapt is, vermoedelijk door geheugen issues. Ik moet mijn GTC980 4gB toch maar snel upgraden. GTX1080 8gB???. Slurp!

Zelfs als ik alleen de zinnen met vragen en bijbehorende antwoorden selecteer blijft het een problematische hoeveelheid. Als ik mij beperk tot de 20.000 meest gebruikte woorden lijkt er weer wat schot in te komen. Dan kent die maar even niet 'Ready for Fuchsmachen???' en degelijke woorden.

Hier vindt ik een aardige beschrijving van de datavoorbewerking. De zinnen worden met opvulwoorden tot een gelijke lengte gemaakt.

Oh ja, de zinnen zelf blijken in omgekeerde volgorde te staan! Zie bovenstaand voorbeeld. Ombouwen en opnieuw een paar dagen trainen dan maar :-(




Using gpu device 0: GeForce GTX 980 (CNMeM is disabled, cuDNN not available)
('total words:', 31208)
('verwijder weinig gebruikte woorden. Aantal te gebruiken:', 20000)
('text length before =', 1789152)
('text length after  =', 1777944)
('corpus length:', 1777944, ' with ', 20000, ' words.')
('nb sequences:', 148161)
Vectorization...
Build model...
()
--------------------------------------------------
('Iteration', 1)
Epoch 1/1
148161/148161 [==============================] - 834s - loss: 4.0085      
()
()
--------------------------------------------------
('Iteration', 2)
Epoch 1/1
148161/148161 [==============================] - 847s - loss: 3.4362     

()