{"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":"from sklearn.metrics import accuracy_score,classification_report\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn import svm\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nimport tensorflow as tf\nimport pandas as pd\nimport seaborn as sns\nfrom sklearn.model_selection import train_test_split","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-11-18T02:32:01.637212Z","iopub.execute_input":"2022-11-18T02:32:01.637703Z","iopub.status.idle":"2022-11-18T02:32:09.579172Z","shell.execute_reply.started":"2022-11-18T02:32:01.637626Z","shell.execute_reply":"2022-11-18T02:32:09.577098Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_csv('../input/goodreads-books-reviews-290312/goodreads_train.csv')\ndf.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-18T02:32:19.641360Z","iopub.execute_input":"2022-11-18T02:32:19.642210Z","iopub.status.idle":"2022-11-18T02:32:46.487151Z","shell.execute_reply.started":"2022-11-18T02:32:19.642177Z","shell.execute_reply":"2022-11-18T02:32:46.486079Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ratings = df['rating']\nreviews = df['review_text']\n\nX_train, X_test, y_train, y_test  = train_test_split(reviews, ratings, stratify = ratings ,test_size = 0.2, shuffle = True , random_state = 25)","metadata":{"execution":{"iopub.status.busy":"2022-11-18T02:32:54.466653Z","iopub.execute_input":"2022-11-18T02:32:54.467637Z","iopub.status.idle":"2022-11-18T02:32:54.862604Z","shell.execute_reply.started":"2022-11-18T02:32:54.467600Z","shell.execute_reply":"2022-11-18T02:32:54.861583Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.feature_extraction.text import CountVectorizer\nfrom tensorflow.keras.preprocessing.sequence import pad_sequences\nfrom tensorflow.keras.preprocessing.text import Tokenizer\n\nmax_features = 20000\nmaxlen = 200\n\ntokenizer = Tokenizer(num_words=max_features, oov_token='<OOV>')\ntokenizer.fit_on_texts(X_train)\n\ncv_train = tokenizer.texts_to_sequences(X_train)\n#pads sequences so they all have the same length\npadded_in = pad_sequences(cv_train, maxlen=200, value=0.0)","metadata":{"execution":{"iopub.status.busy":"2022-11-18T02:34:46.658700Z","iopub.execute_input":"2022-11-18T02:34:46.659695Z","iopub.status.idle":"2022-11-18T02:37:45.235703Z","shell.execute_reply.started":"2022-11-18T02:34:46.659654Z","shell.execute_reply":"2022-11-18T02:37:45.234571Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"EMBEDDING_FILE = \"../input/glovedata/glove.6B.200d.txt\"\ndef get_coefs(word,*arr): return word, np.asarray(arr, dtype='float32')\n\nembeddings_index = dict(get_coefs(*o.strip().split()) for o in open(EMBEDDING_FILE))","metadata":{"execution":{"iopub.status.busy":"2022-11-18T02:40:13.161921Z","iopub.execute_input":"2022-11-18T02:40:13.162293Z","iopub.status.idle":"2022-11-18T02:40:33.100253Z","shell.execute_reply.started":"2022-11-18T02:40:13.162264Z","shell.execute_reply":"2022-11-18T02:40:33.093553Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"all_embs = np.stack(embeddings_index.values())\nemb_mean,emb_std = all_embs.mean(), all_embs.std()\nemb_mean,emb_std","metadata":{"execution":{"iopub.status.busy":"2022-11-18T02:40:33.102571Z","iopub.execute_input":"2022-11-18T02:40:33.103308Z","iopub.status.idle":"2022-11-18T02:40:34.038683Z","shell.execute_reply.started":"2022-11-18T02:40:33.103269Z","shell.execute_reply":"2022-11-18T02:40:34.037712Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"word_index = tokenizer.word_index\nembed_size = 200\nnb_words = min(max_features, len(word_index))\nembedding_matrix = np.random.normal(emb_mean, emb_std, (nb_words, embed_size))\nfor word, i in word_index.items():\n    if i >= max_features: continue\n    embedding_vector = embeddings_index.get(word)\n    if embedding_vector is not None: embedding_matrix[i] = embedding_vector","metadata":{"execution":{"iopub.status.busy":"2022-11-18T02:40:34.040159Z","iopub.execute_input":"2022-11-18T02:40:34.040639Z","iopub.status.idle":"2022-11-18T02:40:34.241244Z","shell.execute_reply.started":"2022-11-18T02:40:34.040600Z","shell.execute_reply":"2022-11-18T02:40:34.240121Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.layers import Dense, Embedding, LSTM, SpatialDropout1D, Bidirectional, Dropout\n\nmodel = keras.Sequential(\n    [\n        layers.Input(shape=(maxlen,)),\n        layers.Embedding(max_features, embed_size, weights=[embedding_matrix]),\n        layers.Conv1D(filters=300, kernel_size=1, padding='same', activation='relu'),\n        layers.Conv1D(filters=300, kernel_size=1, padding='same', activation='relu'),\n        layers.Conv1D(filters=30, kernel_size=4, padding='same', activation='relu'),\n        layers.Conv1D(filters=30, kernel_size=4, padding='same', activation='relu'),\n        layers.Conv1D(filters=30, kernel_size=1, padding='same', activation='relu'),\n        layers.Conv1D(filters=30, kernel_size=1, padding='same', activation='relu'),\n        layers.MaxPooling1D(pool_size=2),\n        layers.Bidirectional(LSTM(32, return_sequences=True)),\n        layers.Dropout(0.1),\n        \n        layers.Conv1D(filters=600, kernel_size=1, padding='same', activation='relu'),\n        layers.Conv1D(filters=600, kernel_size=1, padding='same', activation='relu'),\n        layers.Conv1D(filters=60, kernel_size=4, padding='same', activation='relu'),\n        layers.Conv1D(filters=60, kernel_size=4, padding='same', activation='relu'),\n        layers.Conv1D(filters=60, kernel_size=1, padding='same', activation='relu'),\n        layers.Conv1D(filters=60, kernel_size=1, padding='same', activation='relu'),\n        layers.MaxPooling1D(pool_size=2),\n        layers.Bidirectional(LSTM(32, return_sequences=True)),\n        layers.Dropout(0.1),\n        \n        layers.Conv1D(filters=600, kernel_size=4, padding='same', activation='relu'),\n        layers.Conv1D(filters=600, kernel_size=4, padding='same', activation='relu'),\n        layers.Conv1D(filters=30, kernel_size=8, padding='same', activation='relu'),\n        layers.Conv1D(filters=30, kernel_size=8, padding='same', activation='relu'),\n        layers.Conv1D(filters=30, kernel_size=4, padding='same', activation='relu'),\n        layers.Conv1D(filters=30, kernel_size=4, padding='same', activation='relu'),\n        layers.MaxPooling1D(pool_size=2),\n        layers.Bidirectional(LSTM(32, return_sequences=True)),\n        layers.Dropout(0.1),\n        \n        layers.Conv1D(filters=300, kernel_size=2, padding='same', activation='relu'),\n        layers.Conv1D(filters=300, kernel_size=2, padding='same', activation='relu'),\n        layers.Conv1D(filters=128, kernel_size=2, padding='same', activation='relu'),\n        layers.Conv1D(filters=128, kernel_size=2, padding='same', activation='relu'),\n        layers.Conv1D(filters=128, kernel_size=2, padding='same', activation='relu'),\n        layers.Conv1D(filters=128, kernel_size=2, padding='same', activation='relu'),\n        layers.MaxPooling1D(pool_size=2),\n        layers.Bidirectional(LSTM(128, return_sequences=True)),\n        layers.Dropout(0.1),\n        \n        layers.Flatten(),\n        layers.Dense(256, activation='relu'),\n        layers.Dropout(0.50),\n        layers.Dense(6, activation='sigmoid'),\n        \n        \n        \n    ]\n)","metadata":{"execution":{"iopub.status.busy":"2022-11-18T02:40:34.243511Z","iopub.execute_input":"2022-11-18T02:40:34.244398Z","iopub.status.idle":"2022-11-18T02:40:40.078527Z","shell.execute_reply.started":"2022-11-18T02:40:34.244359Z","shell.execute_reply":"2022-11-18T02:40:40.077568Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer=keras.optimizers.Adam(1e-4), loss='sparse_categorical_crossentropy', metrics=['acc'])\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2022-11-18T02:40:45.747299Z","iopub.execute_input":"2022-11-18T02:40:45.747658Z","iopub.status.idle":"2022-11-18T02:40:45.771513Z","shell.execute_reply.started":"2022-11-18T02:40:45.747629Z","shell.execute_reply":"2022-11-18T02:40:45.770458Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(padded_in, y_train, epochs=8, batch_size=32, verbose=1, validation_split=0.20)","metadata":{"execution":{"iopub.status.busy":"2022-11-18T02:40:49.600694Z","iopub.execute_input":"2022-11-18T02:40:49.601079Z","iopub.status.idle":"2022-11-18T05:25:52.410901Z","shell.execute_reply.started":"2022-11-18T02:40:49.601050Z","shell.execute_reply":"2022-11-18T05:25:52.409978Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test = pd.read_csv('../input/goodreads-books-reviews-290312/goodreads_test.csv')\ndf_test.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-18T05:25:52.413281Z","iopub.execute_input":"2022-11-18T05:25:52.413652Z","iopub.status.idle":"2022-11-18T05:26:05.447687Z","shell.execute_reply.started":"2022-11-18T05:25:52.413617Z","shell.execute_reply":"2022-11-18T05:26:05.446708Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test = df_test[['review_id', 'review_text']]","metadata":{"execution":{"iopub.status.busy":"2022-11-18T05:26:07.896114Z","iopub.execute_input":"2022-11-18T05:26:07.896505Z","iopub.status.idle":"2022-11-18T05:26:07.951663Z","shell.execute_reply.started":"2022-11-18T05:26:07.896468Z","shell.execute_reply":"2022-11-18T05:26:07.950765Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test.shape","metadata":{"execution":{"iopub.status.busy":"2022-11-18T05:26:07.953765Z","iopub.execute_input":"2022-11-18T05:26:07.954541Z","iopub.status.idle":"2022-11-18T05:26:07.961740Z","shell.execute_reply.started":"2022-11-18T05:26:07.954501Z","shell.execute_reply":"2022-11-18T05:26:07.960262Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"testing_sequences = tokenizer.texts_to_sequences(df_test['review_text'])\ntesting_sequences = pad_sequences(testing_sequences, maxlen=200)","metadata":{"execution":{"iopub.status.busy":"2022-11-18T05:26:07.963957Z","iopub.execute_input":"2022-11-18T05:26:07.964277Z","iopub.status.idle":"2022-11-18T05:26:59.951869Z","shell.execute_reply.started":"2022-11-18T05:26:07.964249Z","shell.execute_reply":"2022-11-18T05:26:59.950754Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import multilabel_confusion_matrix\n\nypred=model.predict(testing_sequences)","metadata":{"execution":{"iopub.status.busy":"2022-11-18T05:26:59.953571Z","iopub.execute_input":"2022-11-18T05:26:59.953993Z","iopub.status.idle":"2022-11-18T05:30:44.090769Z","shell.execute_reply.started":"2022-11-18T05:26:59.953952Z","shell.execute_reply":"2022-11-18T05:30:44.089731Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ypred.shape","metadata":{"execution":{"iopub.status.busy":"2022-11-18T05:30:44.092939Z","iopub.execute_input":"2022-11-18T05:30:44.093295Z","iopub.status.idle":"2022-11-18T05:30:44.100729Z","shell.execute_reply.started":"2022-11-18T05:30:44.093260Z","shell.execute_reply":"2022-11-18T05:30:44.099768Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test = df_test.drop(['review_text'], axis=1)\ndf_test.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-18T05:30:44.102392Z","iopub.execute_input":"2022-11-18T05:30:44.103086Z","iopub.status.idle":"2022-11-18T05:30:44.151018Z","shell.execute_reply.started":"2022-11-18T05:30:44.103052Z","shell.execute_reply":"2022-11-18T05:30:44.150126Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"saida = np.argmax(ypred, axis=1)","metadata":{"execution":{"iopub.status.busy":"2022-11-18T05:30:44.154069Z","iopub.execute_input":"2022-11-18T05:30:44.154590Z","iopub.status.idle":"2022-11-18T05:30:44.166083Z","shell.execute_reply.started":"2022-11-18T05:30:44.154552Z","shell.execute_reply":"2022-11-18T05:30:44.165276Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test['rating']=pd.Series(saida)\ndf_test.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-18T05:30:44.167393Z","iopub.execute_input":"2022-11-18T05:30:44.167835Z","iopub.status.idle":"2022-11-18T05:30:44.186133Z","shell.execute_reply.started":"2022-11-18T05:30:44.167796Z","shell.execute_reply":"2022-11-18T05:30:44.185104Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-11-18T13:26:03.558401Z","iopub.execute_input":"2022-11-18T13:26:03.558962Z","iopub.status.idle":"2022-11-18T13:26:03.714154Z","shell.execute_reply.started":"2022-11-18T13:26:03.558850Z","shell.execute_reply":"2022-11-18T13:26:03.711670Z"},"trusted":true},"execution_count":null,"outputs":[]}]}