{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nfrom keras.models import Sequential\nfrom keras.preprocessing import sequence\nfrom keras.layers import Dropout\nfrom keras.layers import  Dense, Embedding, GRU\n\nrs=123","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_csv(\"/kaggle/input/ml-olympiad-dialectrecognition/train.csv\")\ndf.head()","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.info()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.isna().sum()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.dropna(how='any', inplace=True) ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df=df.reset_index(drop=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df=df.drop(['FileName', 'ShowName','FullFileLength', 'SegmentID','SegmentLength', 'SegmentStart','SegmentEnd','Speaker','GroundTruthText'], axis=1)\ndf.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y=df.SpeakerDialect\nX=df.ProcessedText","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.isna().sum()","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2 = pd.read_csv(\"/kaggle/input/ml-olympiad-dialectrecognition/test.csv\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2.iloc[404,-1]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2.iloc[404,-1]='واحنا نتقهوى سوالف اليوم كلها عن حياتنا'","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X2=df2.ProcessedText","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Modeling","metadata":{}},{"cell_type":"code","source":"max_len = X.apply(lambda x: len(x)).max()\nprint(f'Max number of words in a text in training data: {max_len}')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from camel_tools.tokenizers.word import simple_word_tokenize","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X=X.apply(lambda z: simple_word_tokenize(z))\nX2=X2.apply(lambda z: simple_word_tokenize(z))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.preprocessing.text import Tokenizer\ntokenizer = Tokenizer()\n\ntokenizer.fit_on_texts(X)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = tokenizer.texts_to_sequences(X)\nX_test = tokenizer.texts_to_sequences(X2)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.utils import pad_sequences","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = pad_sequences(X_train, maxlen=max_len)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test = pad_sequences(X_test, maxlen=max_len)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\ny = np.array(y)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.losses import SparseCategoricalCrossentropy","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\ntf.random.set_seed(rs)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model #1","metadata":{}},{"cell_type":"code","source":"model=Sequential()\nmodel.add(Embedding(input_dim=len(tokenizer.word_index)+1, output_dim=128, input_length=max_len))\nmodel.add(GRU(units=64, activation='tanh'))\nmodel.add(Dense(units=4, activation='softmax'))\nmodel.compile(loss=SparseCategoricalCrossentropy(), optimizer='adam', metrics=['accuracy'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(X_train, y,epochs=3)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred=model.predict(X_test)\nprint(type(y_pred))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"a=np.argmax(y_pred, axis=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"a[:5]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"a=a+1\na[:5]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2['SpeakerDialect']=a\ndf2.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2=df2.drop(['FileName', 'ShowName','FullFileLength','SegmentLength', 'SegmentStart','SegmentEnd','SpeakerAge','SpeakerGender', 'Speaker','GroundTruthText', 'Environment', 'ProcessedText'], axis=1)\ndf2.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2.to_csv('submit_OneLayerGRU.csv', index=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model #2","metadata":{}},{"cell_type":"code","source":"model=Sequential()\nmodel.add(Embedding(input_dim=len(tokenizer.word_index)+1, output_dim=128, input_length=max_len))\nmodel.add(GRU(units=128, activation='tanh', return_sequences=True))\nmodel.add(GRU(units=64, activation='tanh'))\nmodel.add(Dense(units=4, activation='softmax'))\nmodel.compile(loss=SparseCategoricalCrossentropy(), optimizer='adam', metrics=['accuracy'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.callbacks import EarlyStopping\n\nearly_stopping = EarlyStopping(monitor='loss', patience=10)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(X_train, y,epochs=100, callbacks=[early_stopping])","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.stop_training = True","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred=model.predict(X_test)\na=np.argmax(y_pred, axis=1)\na=a+1\ndf2['SpeakerDialect']=a\ndf2.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2.to_csv('submit_TwoLayerGRU.csv', index=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model #3","metadata":{}},{"cell_type":"code","source":"model=Sequential()\nmodel.add(Embedding(input_dim=len(tokenizer.word_index)+1, output_dim=128, input_length=max_len))\nmodel.add(GRU(units=128, activation='tanh', return_sequences=True))\nmodel.add(GRU(units=64, activation='tanh'))\nmodel.add(Dense(units=4, activation='softmax'))\nmodel.compile(loss=SparseCategoricalCrossentropy(), optimizer='adam', metrics=['accuracy'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"early_stopping = EarlyStopping(monitor='loss', patience=3)\nmodel.fit(X_train, y,epochs=15, callbacks=[early_stopping])","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred=model.predict(X_test)\na=np.argmax(y_pred, axis=1)\na=a+1\ndf2['SpeakerDialect']=a\ndf2.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2.to_csv('submit_TwoLayerGRU_15.csv', index=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 4","metadata":{}},{"cell_type":"code","source":"model=Sequential()\nmodel.add(Embedding(input_dim=len(tokenizer.word_index)+1, output_dim=128, input_length=max_len))\nmodel.add(GRU(units=64, activation='tanh'))\nmodel.add(Dense(units=4, activation='softmax'))\nmodel.compile(loss=SparseCategoricalCrossentropy(), optimizer='adam', metrics=['accuracy'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.callbacks import EarlyStopping","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"early_stopping = EarlyStopping(monitor='loss', patience=3)\nmodel.fit(X_train, y,epochs=15, callbacks=[early_stopping], validation_split=0.1)","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred=model.predict(X_test)\na=np.argmax(y_pred, axis=1)\na=a+1\ndf2['SpeakerDialect']=a\ndf2.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2=df2.drop(['FileName', 'ShowName','FullFileLength','SegmentLength', 'SegmentStart','SegmentEnd','SpeakerAge','SpeakerGender', 'Speaker','GroundTruthText', 'Environment', 'ProcessedText'], axis=1)\ndf2.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2.to_csv('submit_OneLayerGRU_15.csv', index=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model 5","metadata":{}},{"cell_type":"code","source":"import keras_tuner as kt\n\ndef model_builder(hp):\n    model =Sequential()\n\n    model.add(Embedding(input_dim=len(tokenizer.word_index)+1, output_dim=hp.Int('ouput_dim', min_value=32, max_value=512, step=32), input_length=max_len))\n        \n    #for i in range(hp.Int('n_layers', 1, 5)):\n    model.add(GRU(hp.Int('gru_units', min_value=32, max_value=512, step=32)))\n\n    model.add(Dropout(hp.Float('dropout_rate', min_value=0, max_value=0.8, step=0.1)))\n\n    model.add(Dense(units=4, activation='softmax'))\n    \n\n    # Tune the learning rate for the optimizer\n    # Choose an optimal value from 0.1, 0.01, 0.001, or 0.0001\n    hp_learning_rate = hp.Choice('learning_rate', values=[1e-1, 1e-2, 1e-3, 1e-4])\n\n    model.compile(\n        loss=SparseCategoricalCrossentropy(),\n        optimizer=tf.keras.optimizers.Adam(learning_rate=hp_learning_rate),\n        metrics=['accuracy']\n    )\n\n    return model","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tuner = kt.Hyperband(hypermodel = model_builder,\n                     objective = kt.Objective(\"val_accuracy\", direction=\"max\"),\n                     max_epochs = 20, \n                     project_name='D:\\hyperband_tuner_Dielct')\nearly_stopping = EarlyStopping(monitor='val_loss', patience=3)\n#model.fit(X_train, y,epochs=15, callbacks=[early_stopping], validation_split=0.1)","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tuner.search(x=X_train, y=y,\n             validation_split=0.1,\n             epochs=20,\n             shuffle=True,\n             verbose=1,\n             initial_epoch=0,\n             callbacks=[early_stopping],\n             use_multiprocessing=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred=model.predict(X_test)\na=np.argmax(y_pred, axis=1)\na=a+1\ndf2['SpeakerDialect']=a\ndf2.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2=df2.drop(['FileName', 'ShowName','FullFileLength','SegmentLength', 'SegmentStart','SegmentEnd','SpeakerAge','SpeakerGender', 'Speaker','GroundTruthText', 'Environment', 'ProcessedText'], axis=1)\ndf2.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2.to_csv('submit_OneLayerGRU_15.csv', index=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}