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.
('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
()
Geen opmerkingen:
Een reactie posten