I tested the Classify algo’s on a big data set of text message conversations between users and business IoT devices. The Neral Net was fantastically more accurate than the rest.
It took a long time to run, which is fine. The problem I am facing is:
After uploading it to the cloud and creating API access, the API is slower than dirt. It times out even. However, when I classify samples in the notebook it is lightning fast as always.
My code:
Quiet[CloudDeploy[
APIFunction[{"text" ->
"String" -> "Please turn off the lights at 10pm."},
Get["BtNeuralNetwork"][#text] &],
Permissions -> "Public"]]
I used “CloudGet” and the result was even slower. Not sure how that makes any sense.
I even tried compressing it before deploying using:
Nothing really makes a difference. The API is slow in responding. When I was using Markov it replied instantly on notebook and cloud. The neural net is same speed on notebook but not cloud. Obviously, “BtNeuralNetwork” is just the arbitrary name I gave the model. The fact that it responses correctly “when” it does respond tells me it’s working. I just can’t figure out how to speed up the response time.
I also tried finding a way to not “Get” the model every time and use a variable. However, I spent many hours and found no good tutorials or documentation on writing a simple if statement for testing whether the model we loaded already or not.
Is it possible to post a complete code including Classify and data? If not data - just Classify referring to a training set (with a byte size of dataset mentioned) ? I do not understand where do you train your net (desktop or cloud). The more complete the discription of the problem the better it is to go about it.
(Debug) In[499]:= RandomSample[data, 10]
(Debug) Out[499]= {"id like you to contact me concerning this now" ->
"REQUEST TO BE CONTACTED",
"put me on ur list i need to get your txt messages" ->
"OPTIN GENERAL CONSENT",
"never send spam text messages to our phone" -> "REQUEST TO OPTOUT",
"love ya to the moon and back" -> "INITIAL LOVE YOU",
"i need to speak with a administrator straight away" ->
"REQUEST TO BE CONTACTED",
"holla back as well back to you too" -> "RESPONSE TO GREETING",
"what company working hours would you have" ->
"REQUEST FOR HOURS OF OPERATION",
"what time is ur store opened" -> "REQUEST FOR HOURS OF OPERATION",
"why r you mailing me all these kinds of texts" ->
"REQUEST FOR INTENT",
"love you with all my heart too" -> "RESPONSE TO LOVE YOU"}
Loading trained Neural Net:
c = Get["BtNeuralNetwork"]
ClassifierInformation[c]
Association[
"Method" -> "Neural network", "Number of classes" -> 33,
"Number of features" -> 1, "Number of training examples" -> 87740,
"Number of extracted features" -> 300,
"L1 regularization coefficient" -> 0,
"L2 regularization coefficient" -> 0.1,
"Number of hidden layers" -> 2,
"Hidden nodes" -> Row[{900, 900}, ","],
"Hidden layer activation functions" -> Row[{
"Rectified Linear", "Rectified Linear"}, ","]]
Example input and classify result:
(Debug) In[497]:= c["please tell me more about your company"]
(Debug) Out[497]= "REQUEST FOR INFORMATION"
Yes, I trained the data on my Macbook Pro and then PUT it locally and then also PUT it in cloud. When I GET it locally or GET it from Cloud, it performs lightning fast on my laptop. The problem only happens when I ask it via API.