Spaces:
Sleeping
Sleeping
Make the model larger and add PReLU alpha constraint
Browse files- chatbot_constructor.py +18 -8
chatbot_constructor.py
CHANGED
@@ -4,14 +4,24 @@ from keras.models import Model
|
|
4 |
from keras.saving import load_model
|
5 |
from keras.layers import *
|
6 |
from keras.regularizers import L1
|
|
|
7 |
from tensorflow.keras.optimizers import RMSprop
|
8 |
from keras.preprocessing.text import Tokenizer
|
|
|
9 |
import os
|
10 |
import hashlib
|
11 |
import keras
|
12 |
|
13 |
os.mkdir("cache")
|
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
def todset(text: str):
|
16 |
lines = [x.rstrip("\n").lower().split("→") for x in text.split("\n")]
|
17 |
lines = [(x[0].replace("\\n", "\n"), x[1].replace("\\n", "\n")) for x in lines]
|
@@ -33,8 +43,8 @@ def hash_str(data: str):
|
|
33 |
def train(message: str = "", regularization: float = 0.0001, dropout: float = 0.1, learning_rate: float = 0.001, epochs: int = 16, emb_size: int = 128, input_len: int = 16, kernels_count: int = 8, kernel_size: int = 8, left_padding: bool = True, end_activation: str = "softmax", data: str = ""):
|
34 |
data_hash = None
|
35 |
if "→" not in data or "\n" not in data:
|
36 |
-
if data in os.listdir("cache"):
|
37 |
-
data_hash = data
|
38 |
else:
|
39 |
return "Dataset example:\nquestion→answer\nquestion→answer\netc."
|
40 |
dset, responses = todset(data)
|
@@ -68,14 +78,14 @@ def train(message: str = "", regularization: float = 0.0001, dropout: float = 0.
|
|
68 |
conv3_flatten_layer = Flatten()(conv3_layer)
|
69 |
concat1_layer = Concatenate()([flatten_layer, attn_flatten_layer, conv1_flatten_layer, conv2_flatten_layer, conv3_flatten_layer])
|
70 |
dropout2_layer = Dropout(dropout)(concat1_layer)
|
71 |
-
dense1_layer = Dense(
|
72 |
-
prelu1_layer = PReLU()(dense1_layer)
|
73 |
dropout3_layer = Dropout(dropout)(prelu1_layer)
|
74 |
-
dense2_layer = Dense(
|
75 |
dropout4_layer = Dropout(dropout)(dense2_layer)
|
76 |
-
dense3_layer = Dense(
|
77 |
dropout5_layer = Dropout(dropout)(dense3_layer)
|
78 |
-
dense4_layer = Dense(
|
79 |
concat2_layer = Concatenate()([dense4_layer, prelu1_layer, attn_flatten_layer, conv1_flatten_layer])
|
80 |
dense4_layer = Dense(resps_len, activation=end_activation, kernel_regularizer=L1(regularization))(concat2_layer)
|
81 |
model = Model(inputs=input_layer, outputs=dense4_layer)
|
@@ -103,7 +113,7 @@ def train(message: str = "", regularization: float = 0.0001, dropout: float = 0.
|
|
103 |
model.save(f"cache/{data_hash}")
|
104 |
tokens = tokenizer.texts_to_sequences([message,])[0]
|
105 |
prediction = model.predict(np.array([(list(tokens)+[0,]*inp_len)[:inp_len],]))[0]
|
106 |
-
|
107 |
return responses[np.argmax(prediction)]
|
108 |
|
109 |
if __name__ == "__main__":
|
|
|
4 |
from keras.saving import load_model
|
5 |
from keras.layers import *
|
6 |
from keras.regularizers import L1
|
7 |
+
from keras.constraints import Constraint
|
8 |
from tensorflow.keras.optimizers import RMSprop
|
9 |
from keras.preprocessing.text import Tokenizer
|
10 |
+
import keras.backend as K
|
11 |
import os
|
12 |
import hashlib
|
13 |
import keras
|
14 |
|
15 |
os.mkdir("cache")
|
16 |
|
17 |
+
class ValueConstraint(Constraint):
|
18 |
+
def __init__(self, min_value: float = -1, max_value: float = 1):
|
19 |
+
self.min_value = min_value
|
20 |
+
self.max_value
|
21 |
+
|
22 |
+
def __call__(self, w):
|
23 |
+
return K.clip(w, self.min_value, self.max_value)
|
24 |
+
|
25 |
def todset(text: str):
|
26 |
lines = [x.rstrip("\n").lower().split("→") for x in text.split("\n")]
|
27 |
lines = [(x[0].replace("\\n", "\n"), x[1].replace("\\n", "\n")) for x in lines]
|
|
|
43 |
def train(message: str = "", regularization: float = 0.0001, dropout: float = 0.1, learning_rate: float = 0.001, epochs: int = 16, emb_size: int = 128, input_len: int = 16, kernels_count: int = 8, kernel_size: int = 8, left_padding: bool = True, end_activation: str = "softmax", data: str = ""):
|
44 |
data_hash = None
|
45 |
if "→" not in data or "\n" not in data:
|
46 |
+
if data in os.listdir("cache"): # data = filename
|
47 |
+
data_hash = data # set the hash to the file name
|
48 |
else:
|
49 |
return "Dataset example:\nquestion→answer\nquestion→answer\netc."
|
50 |
dset, responses = todset(data)
|
|
|
78 |
conv3_flatten_layer = Flatten()(conv3_layer)
|
79 |
concat1_layer = Concatenate()([flatten_layer, attn_flatten_layer, conv1_flatten_layer, conv2_flatten_layer, conv3_flatten_layer])
|
80 |
dropout2_layer = Dropout(dropout)(concat1_layer)
|
81 |
+
dense1_layer = Dense(2048, activation="linear", kernel_regularizer=L1(regularization))(dropout2_layer)
|
82 |
+
prelu1_layer = PReLU(alpha_constraint=ValueConstraint())(dense1_layer)
|
83 |
dropout3_layer = Dropout(dropout)(prelu1_layer)
|
84 |
+
dense2_layer = Dense(1024, activation="relu", kernel_regularizer=L1(regularization))(dropout3_layer)
|
85 |
dropout4_layer = Dropout(dropout)(dense2_layer)
|
86 |
+
dense3_layer = Dense(512, activation="relu", kernel_regularizer=L1(regularization))(dropout4_layer)
|
87 |
dropout5_layer = Dropout(dropout)(dense3_layer)
|
88 |
+
dense4_layer = Dense(256, activation="relu", kernel_regularizer=L1(regularization))(dropout5_layer)
|
89 |
concat2_layer = Concatenate()([dense4_layer, prelu1_layer, attn_flatten_layer, conv1_flatten_layer])
|
90 |
dense4_layer = Dense(resps_len, activation=end_activation, kernel_regularizer=L1(regularization))(concat2_layer)
|
91 |
model = Model(inputs=input_layer, outputs=dense4_layer)
|
|
|
113 |
model.save(f"cache/{data_hash}")
|
114 |
tokens = tokenizer.texts_to_sequences([message,])[0]
|
115 |
prediction = model.predict(np.array([(list(tokens)+[0,]*inp_len)[:inp_len],]))[0]
|
116 |
+
K.clear_session()
|
117 |
return responses[np.argmax(prediction)]
|
118 |
|
119 |
if __name__ == "__main__":
|