Uczenie_Glebokie/2. Word2Vec/word2vec.ipynb
2024-05-20 03:14:08 +02:00

349 lines
58 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 23,
"id": "36c02fac",
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import pandas as pd\n",
"import gensim\n",
"from gensim.models import KeyedVectors\n",
"import numpy as np\n",
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.layers import Dense\n",
"import matplotlib.pyplot as plt\n",
"from keras.regularizers import l2"
]
},
{
"cell_type": "markdown",
"id": "db84429c",
"metadata": {},
"source": [
"### Declare path"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "fc2539ae",
"metadata": {},
"outputs": [],
"source": [
"data_dir_path = 'sport-text-classification-ball-isi-public'\n",
"train_path = os.path.join(data_dir_path, 'train\\\\train.tsv')\n",
"dev_texts_path = os.path.join(data_dir_path, 'dev-0\\\\in.tsv')\n",
"dev_labels_path = os.path.join(data_dir_path, 'dev-0\\\\expected.tsv')\n",
"dev_predicted_path = os.path.join(data_dir_path, 'dev-0\\\\out.tsv')\n",
"test_texts_path = os.path.join(data_dir_path, 'test-A\\\\in.tsv')\n",
"test_predicted_path = os.path.join(data_dir_path, 'test-A\\\\out.tsv')\n",
"word2vec_file_path = 'word2vec_100_3_polish.bin'"
]
},
{
"cell_type": "markdown",
"id": "e4ea0458",
"metadata": {},
"source": [
"### Load files"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "4e038df7",
"metadata": {},
"outputs": [],
"source": [
"train_data = pd.read_csv(train_path, sep='\\t', usecols=[0, 1], header=None, names=['label', 'text'])\n",
"dev_texts_data = pd.read_csv(dev_texts_path, sep='\\t', usecols=[0], header=None, names=['text'])\n",
"dev_labels_data = pd.read_csv(dev_labels_path, sep='\\t', usecols=[0], header=None, names=['label'])\n",
"test_texts_data = pd.read_csv(test_texts_path, sep='\\t', usecols=[0], header=None, names=['text'])"
]
},
{
"cell_type": "markdown",
"id": "80bcbe49",
"metadata": {},
"source": [
"### Load word2vec"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "3d2e114b",
"metadata": {},
"outputs": [],
"source": [
"word2vec = KeyedVectors.load(word2vec_file_path)"
]
},
{
"cell_type": "markdown",
"id": "4ed6fe85",
"metadata": {},
"source": [
"### Preprocess data"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "149c6b1f",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Pawel\\anaconda3\\Lib\\site-packages\\numpy\\core\\fromnumeric.py:3464: RuntimeWarning: Mean of empty slice.\n",
" return _methods._mean(a, axis=axis, dtype=dtype,\n"
]
}
],
"source": [
"def text_to_word2vec(text):\n",
" text_vector = np.mean([word2vec[word] for word in text if word in word2vec], axis=0).tolist()\n",
" if np.isnan(text_vector).any() or not isinstance(text_vector, list):\n",
" return np.zeros(word2vec.vector_size)\n",
" return text_vector\n",
"\n",
"def fit_data(column):\n",
" return np.array(column.tolist())\n",
"\n",
"def fit_data_X(text_column):\n",
" text_preprocessed = text_column.apply(lambda x: gensim.utils.simple_preprocess(x))\n",
" vectors = text_preprocessed.apply(lambda x: text_to_word2vec(x))\n",
" return fit_data(vectors)\n",
"\n",
"train_X = fit_data_X(train_data['text'])\n",
"train_Y = fit_data(train_data['label'])\n",
"dev_X = fit_data_X(dev_texts_data['text'])\n",
"dev_Y = fit_data(dev_labels_data['label'])\n",
"test_X = fit_data_X(test_texts_data['text'])"
]
},
{
"cell_type": "markdown",
"id": "1fa44315",
"metadata": {},
"source": [
"### Create model"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1eeecf36",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From C:\\Users\\Pawel\\anaconda3\\Lib\\site-packages\\keras\\src\\backend.py:873: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n",
"\n"
]
}
],
"source": [
"model = Sequential()\n",
"model.add(Dense(128, input_dim=train_X.shape[1], activation='relu'))\n",
"model.add(Dense(64, activation='relu', kernel_regularizer=l2(0.001)))\n",
"model.add(Dense(32, activation='relu'))\n",
"model.add(Dense(1, activation='sigmoid'))"
]
},
{
"cell_type": "markdown",
"id": "c84111a9",
"metadata": {},
"source": [
"### Compile model"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "a6e56c53",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From C:\\Users\\Pawel\\anaconda3\\Lib\\site-packages\\keras\\src\\optimizers\\__init__.py:309: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n",
"\n"
]
}
],
"source": [
"model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])"
]
},
{
"cell_type": "markdown",
"id": "ec76b0f6",
"metadata": {},
"source": [
"### Train model"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "e72a055c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/20\n",
"WARNING:tensorflow:From C:\\Users\\Pawel\\anaconda3\\Lib\\site-packages\\keras\\src\\utils\\tf_utils.py:492: The name tf.ragged.RaggedTensorValue is deprecated. Please use tf.compat.v1.ragged.RaggedTensorValue instead.\n",
"\n",
"WARNING:tensorflow:From C:\\Users\\Pawel\\anaconda3\\Lib\\site-packages\\keras\\src\\engine\\base_layer_utils.py:384: The name tf.executing_eagerly_outside_functions is deprecated. Please use tf.compat.v1.executing_eagerly_outside_functions instead.\n",
"\n",
"3067/3067 [==============================] - 17s 4ms/step - loss: 0.1955 - accuracy: 0.9319 - val_loss: 0.1569 - val_accuracy: 0.9404\n",
"Epoch 2/20\n",
"3067/3067 [==============================] - 11s 4ms/step - loss: 0.1393 - accuracy: 0.9471 - val_loss: 0.1337 - val_accuracy: 0.9450\n",
"Epoch 3/20\n",
"3067/3067 [==============================] - 10s 3ms/step - loss: 0.1264 - accuracy: 0.9523 - val_loss: 0.1410 - val_accuracy: 0.9426\n",
"Epoch 4/20\n",
"3067/3067 [==============================] - 15s 5ms/step - loss: 0.1189 - accuracy: 0.9543 - val_loss: 0.1231 - val_accuracy: 0.9516\n",
"Epoch 5/20\n",
"3067/3067 [==============================] - 16s 5ms/step - loss: 0.1133 - accuracy: 0.9570 - val_loss: 0.1206 - val_accuracy: 0.9490\n",
"Epoch 6/20\n",
"3067/3067 [==============================] - 17s 6ms/step - loss: 0.1076 - accuracy: 0.9588 - val_loss: 0.1220 - val_accuracy: 0.9481\n",
"Epoch 7/20\n",
"3067/3067 [==============================] - 11s 4ms/step - loss: 0.1039 - accuracy: 0.9605 - val_loss: 0.1125 - val_accuracy: 0.9541\n",
"Epoch 8/20\n",
"3067/3067 [==============================] - 18s 6ms/step - loss: 0.0997 - accuracy: 0.9620 - val_loss: 0.1123 - val_accuracy: 0.9536\n",
"Epoch 9/20\n",
"3067/3067 [==============================] - 17s 6ms/step - loss: 0.0964 - accuracy: 0.9639 - val_loss: 0.1092 - val_accuracy: 0.9547\n",
"Epoch 10/20\n",
"3067/3067 [==============================] - 11s 4ms/step - loss: 0.0936 - accuracy: 0.9645 - val_loss: 0.1120 - val_accuracy: 0.9567\n",
"Epoch 11/20\n",
"3067/3067 [==============================] - 17s 5ms/step - loss: 0.0906 - accuracy: 0.9656 - val_loss: 0.1170 - val_accuracy: 0.9527\n",
"Epoch 12/20\n",
"3067/3067 [==============================] - 12s 4ms/step - loss: 0.0882 - accuracy: 0.9670 - val_loss: 0.1171 - val_accuracy: 0.9549\n",
"Epoch 13/20\n",
"3067/3067 [==============================] - 18s 6ms/step - loss: 0.0854 - accuracy: 0.9681 - val_loss: 0.1120 - val_accuracy: 0.9567\n",
"Epoch 14/20\n",
"3067/3067 [==============================] - 13s 4ms/step - loss: 0.0830 - accuracy: 0.9688 - val_loss: 0.1171 - val_accuracy: 0.9562\n",
"Epoch 15/20\n",
"3067/3067 [==============================] - 12s 4ms/step - loss: 0.0810 - accuracy: 0.9695 - val_loss: 0.1226 - val_accuracy: 0.9510\n",
"Epoch 16/20\n",
"3067/3067 [==============================] - 16s 5ms/step - loss: 0.0791 - accuracy: 0.9704 - val_loss: 0.1167 - val_accuracy: 0.9567\n",
"Epoch 17/20\n",
"3067/3067 [==============================] - 14s 4ms/step - loss: 0.0776 - accuracy: 0.9709 - val_loss: 0.1264 - val_accuracy: 0.9532\n",
"Epoch 18/20\n",
"3067/3067 [==============================] - 14s 4ms/step - loss: 0.0755 - accuracy: 0.9714 - val_loss: 0.1191 - val_accuracy: 0.9519\n",
"Epoch 19/20\n",
"3067/3067 [==============================] - 13s 4ms/step - loss: 0.0742 - accuracy: 0.9722 - val_loss: 0.1190 - val_accuracy: 0.9545\n",
"Epoch 20/20\n",
"3067/3067 [==============================] - 13s 4ms/step - loss: 0.0725 - accuracy: 0.9732 - val_loss: 0.1295 - val_accuracy: 0.9552\n"
]
}
],
"source": [
"history = model.fit(train_X, train_Y, epochs=20, batch_size=32, validation_data=(dev_X, dev_Y))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "561f4db3",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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YcOGDQavK4rC559/TpkyZbC2tqZt27acP3/+qcddu3YtNWrUwNLSkho1arB+/fp8uoLcye56U1NT+fDDD6lduza2traUKVOGIUOGcPv27WyPuXjx4kzvd1JSUj5fTfaedm+HDRuWIeamTZs+9biF8d4+7Vozuz8ajYbp06dneczCel/zkyRAeWzVqlVMmDCBTz75hJMnT9KqVSu6du1qMKHj465fv063bt1o1aoVJ0+e5OOPP+add95h7dq1BRx57uzdu5e3336bw4cPs337dtLS0ujUqRMJCQlP3TcoKIiwsDD9o0qVKgUQ8fOpWbOmQcxnz57NsmxRvafpjh49anCt27dvB+Dll1/Odr+icF8TEhKoW7cuv/zyS6avf/fdd8ycOZNffvmFo0eP4uHhQceOHYmLi8vymIcOHWLAgAEMHjyY06dPM3jwYPr378+RI0fy6zJyLLvrTUxM5MSJE0yePJkTJ06wbt06Ll26RK9evZ56XHt7e4N7HRYWhpWVVX5cQo497d4CdOnSxSDmzZs3Z3vMwnpvn3atT94bf39/NBoN/fr1y/a4hfG+5qunrhYmcqVJkybKmDFjDLb5+voqH330UablP/jgA8XX19dg2xtvvKE0bdo032LMDxEREQqg7N27N8syu3fvVgDl/v37BRdYHvjss8+UunXr5rh8cbmn6caPH69UqlRJ0el0mb5eVO8roKxfv17/s06nUzw8PJRp06bptyUlJSkODg7Kr7/+muVx+vfvr3Tp0sVgW+fOnZWBAwfmeczP48nrzUxAQIACKDdv3syyzKJFixQHB4e8DS6PZXatQ4cOVXr37p2r4xSFe5uT+9q7d2/lhRdeyLZMUbiveU1qgPJQSkoKx48fp1OnTgbbO3XqxMGDBzPd59ChQxnKd+7cmWPHjpGamppvsea1mJgYAEqXLv3UsvXr18fT05P27duze/fu/A4tT1y+fJkyZcpQoUIFBg4cyLVr17IsW1zuKajv6eXLlzNixIinLgxcFO/r465fv054eLjBvbO0tKRNmzZZ/v1C1vc7u30Kq5iYGDQaDY6OjtmWi4+Px9vbm3LlytGjRw9OnjxZMAE+pz179uDm5kbVqlUZPXo0ERER2ZYvDvf2zp07bNq0iZEjRz61bFG9r89KEqA8FBkZiVarxd3d3WC7u7s74eHhme4THh6eafm0tDQiIyPzLda8pCgKEydOpGXLltSqVSvLcp6ensybN4+1a9eybt06qlWrRvv27fnvv/8KMNrc8/PzY+nSpWzdupX58+cTHh5O8+bNiYqKyrR8cbin6TZs2EB0dDTDhg3LskxRva9PSv8bzc3fb/p+ud2nMEpKSuKjjz7i1VdfzXapBF9fXxYvXszGjRtZsWIFVlZWtGjRgsuXLxdgtLnXtWtXfv/9d3bt2sWMGTM4evQoL7zwAsnJyVnuUxzu7ZIlS7Czs6Nv377Zliuq9/V5GHUx1OLqyW/KiqJk++05s/KZbS+sxo4dy5kzZ9i/f3+25apVq0a1atX0Pzdr1oyQkBC+//57Wrdund9hPrOuXbvqn9euXZtmzZpRqVIllixZwsSJEzPdp6jf03QLFy6ka9eulClTJssyRfW+ZiW3f7/Puk9hkpqaysCBA9HpdMyZMyfbsk2bNjXoPNyiRQsaNGjAzz//zE8//ZTfoT6zxxfErlWrFo0aNcLb25tNmzZlmxwU9Xvr7+/PoEGDntqXp6je1+chNUB5yMXFBVNT0wzfDiIiIjJ8i0jn4eGRaXkzMzOcnZ3zLda8Mm7cODZu3Mju3bspV65crvdv2rRpkfuGYWtrS+3atbOMu6jf03Q3b95kx44djBo1Ktf7FsX7mj6yLzd/v+n75XafwiQ1NZX+/ftz/fp1tm/fnuuFMk1MTGjcuHGRu9+enp54e3tnG3dRv7f79u0jKCjomf6Gi+p9zQ1JgPKQhYUFDRs21I+aSbd9+3aaN2+e6T7NmjXLUH7btm00atQIc3PzfIv1eSmKwtixY1m3bh27du2iQoUKz3SckydP4unpmcfR5a/k5GQuXLiQZdxF9Z4+adGiRbi5udG9e/dc71sU72uFChXw8PAwuHcpKSns3bs3y79fyPp+Z7dPYZGe/Fy+fJkdO3Y8U4KuKAqnTp0qcvc7KiqKkJCQbOMuyvcW1Brchg0bUrdu3VzvW1Tva64Yq/d1cbVy5UrF3NxcWbhwoRIYGKhMmDBBsbW1VW7cuKEoiqJ89NFHyuDBg/Xlr127ptjY2CjvvvuuEhgYqCxcuFAxNzdX/vzzT2NdQo68+eabioODg7Jnzx4lLCxM/0hMTNSXefJaZ82apaxfv165dOmScu7cOeWjjz5SAGXt2rXGuIQce++995Q9e/Yo165dUw4fPqz06NFDsbOzK3b39HFarVbx8vJSPvzwwwyvFeX7GhcXp5w8eVI5efKkAigzZ85UTp48qR/1NG3aNMXBwUFZt26dcvbsWeWVV15RPD09ldjYWP0xBg8ebDCq88CBA4qpqakybdo05cKFC8q0adMUMzMz5fDhwwV+fU/K7npTU1OVXr16KeXKlVNOnTpl8HecnJysP8aT1/v5558rW7ZsUa5evaqcPHlSGT58uGJmZqYcOXLEGJeol921xsXFKe+9955y8OBB5fr168ru3buVZs2aKWXLli2S9/Zp72NFUZSYmBjFxsZGmTt3bqbHKCr3NT9JApQPZs+erXh7eysWFhZKgwYNDIaGDx06VGnTpo1B+T179ij169dXLCwsFB8fnyzfsIUJkOlj0aJF+jJPXuu3336rVKpUSbGyslKcnJyUli1bKps2bSr44HNpwIABiqenp2Jubq6UKVNG6du3r3L+/Hn968Xlnj5u69atCqAEBQVleK0o39f0IftPPoYOHaooijoU/rPPPlM8PDwUS0tLpXXr1srZs2cNjtGmTRt9+XRr1qxRqlWrppibmyu+vr6FJvnL7nqvX7+e5d/x7t279cd48nonTJigeHl5KRYWFoqrq6vSqVMn5eDBgwV/cU/I7loTExOVTp06Ka6uroq5ubni5eWlDB06VAkODjY4RlG5t097HyuKovz222+KtbW1Eh0dnekxisp9zU8aRXnYO1MIIYQQooSQPkBCCCGEKHEkARJCCCFEiSMJkBBCCCFKHEmAhBBCCFHiSAIkhBBCiBJHEiAhhBBClDiSAAkhhBCixJEESAghckCj0bBhwwZjhyGEyCOSAAkhCr1hw4ah0WgyPLp06WLs0IQQRZSZsQMQQoic6NKlC4sWLTLYZmlpaaRohBBFndQACSGKBEtLSzw8PAweTk5OgNo8NXfuXLp27Yq1tTUVKlRgzZo1BvufPXuWF154AWtra5ydnXn99deJj483KOPv70/NmjWxtLTE09OTsWPHGrweGRnJiy++iI2NDVWqVGHjxo35e9FCiHwjCZAQoliYPHky/fr14/Tp07z22mu88sorXLhwAYDExES6dOmCk5MTR48eZc2aNezYscMgwZk7dy5vv/02r7/+OmfPnmXjxo1UrlzZ4BxTpkyhf//+nDlzhm7dujFo0CDu3btXoNcphMgjxl6NVQghnmbo0KGKqampYmtra/D44osvFEVRFEAZM2aMwT5+fn7Km2++qSiKosybN09xcnJS4uPj9a9v2rRJMTExUcLDwxVFUZQyZcoon3zySZYxAMr//vc//c/x8fGKRqNR/v333zy7TiFEwZE+QEKIIqFdu3bMnTvXYFvp/2/fjlkTCcIwjj8btNDFJixqOisVC220kNilshNiJ2IrwmJj734C/QSWC4JFWi1SCiGVnfELiGgpAW12rzgQQo67yx3oefv/VbMzu8M73cPM7O3tqV0ulz+MlctlLRYLSdJyuVShUJBpmqfx+/t7eZ6n1WolwzC0Xq/18PDw0xry+fypbZqmYrGYttvtny4JwAURgABcBdM0Px1J/YphGJIk3/dP7R+9E4lEfmu+cDj86VvP875UE4B/A3eAAPwXXl5ePj1ns1lJUi6X02Kx0Pv7+2l8Pp/r5uZG6XRasVhMqVRKz8/PZ60ZwOWwAwTgKhyPR202mw99oVBIlmVJkiaTiYrFoiqVilzX1evrq0ajkSSp0Wio3++r1WrJcRztdjvZtq1ms6lEIiFJchxH7XZb8Xhc1WpV+/1e8/lctm2fd6EAzoIABOAqTKdT3d3dfejLZDJ6e3uT9P0PrfF4rE6no2QyKdd1lcvlJEnRaFSz2UzdblelUknRaFSPj48aDAanuVqtlg6Hg4bDoXq9nizLUr1eP98CAZyV4fu+f+kiAOBvGIahp6cn1Wq1S5cC4EpwBwgAAAQOAQgAAAQOd4AAXD1O8gF8FTtAAAAgcAhAAAAgcAhAAAAgcAhAAAAgcAhAAAAgcAhAAAAgcAhAAAAgcAhAAAAgcAhAAAAgcL4B3HYLmIBMVKsAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(history.history['accuracy'], label='Train Accuracy')\n",
"plt.plot(history.history['val_accuracy'], label='Validation Accuracy')\n",
"plt.xlabel('Epoch')\n",
"plt.ylabel('Accuracy')\n",
"plt.title('Model Accuracy Over Epochs')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "4d0b9315",
"metadata": {},
"source": [
"### Predict and save results"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "54f93a9b",
"metadata": {},
"outputs": [],
"source": [
"def predict_and_save(X, filename):\n",
" Y_predicted = model.predict(X)\n",
" Y_predicted = np.round(Y_predicted,0).astype(int)\n",
" Y_predicted_df = pd.DataFrame(Y_predicted, columns=['predicted_label'])\n",
" Y_predicted_df.to_csv(filename, sep='\\t', index=False, header=None)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "9d3b3867",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"171/171 [==============================] - 0s 3ms/step\n",
"171/171 [==============================] - 1s 3ms/step\n"
]
}
],
"source": [
"dev_predicted = predict_and_save(dev_X, dev_predicted_path)\n",
"test_predicted = predict_and_save(test_X, test_predicted_path)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}