Logo

مقدمة في الشبكات العصبية

9 دقائق قراءة
شرائح الدرس
1 / 14

مقدمة إلى الشبكات العصبية

بناء مُصنِّف مشاعر عربي باستخدام Keras: التضمينات (Embeddings) القابلة للتدريب مقابل التضمينات المُدرَّبة مسبقًا وطبقات LSTM

# Install necessary packages
!pip install tensorflow keras numpy pandas scikit-learn gensim requests tqdm nltk
 
# Download and install ISRI Stemmer (from NLTK)
import nltk
nltk.download('stopwords')
from nltk.stem.isri import ISRIStemmer
Collecting tensorflow
  Downloading tensorflow-2.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)
Requirement already satisfied: keras in /usr/local/lib/python3.11/dist-packages (3.8.0)
Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (1.26.4)
Requirement already satisfied: pandas in /usr/local/lib/python3.11/dist-packages (2.2.2)
Requirement already satisfied: scikit-learn in /usr/local/lib/python3.11/dist-packages (1.6.1)
Collecting gensim
  Downloading gensim-4.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (8.1 kB)
Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (2.32.3)
Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (4.67.1)
Requirement already satisfied: nltk in /usr/local/lib/python3.11/dist-packages (3.9.1)
Requirement already satisfied: absl-py>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from tensorflow) (1.4.0)
Collecting astunparse>=1.6.0 (from tensorflow)
  Downloading astunparse-1.6.3-py2.py3-none-any.whl.metadata (4.4 kB)
Collecting flatbuffers>=24.3.25 (from tensorflow)
  Downloading flatbuffers-25.2.10-py2.py3-none-any.whl.metadata (875 bytes)
Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in /usr/local/lib/python3.11/dist-packages (from tensorflow) (0.6.0)
Collecting google-pasta>=0.1.1 (from tensorflow)
  Downloading google_pasta-0.2.0-py3-none-any.whl.metadata (814 bytes)
Collecting libclang>=13.0.0 (from tensorflow)
  Downloading libclang-18.1.1-py2.py3-none-manylinux2010_x86_64.whl.metadata (5.2 kB)
Requirement already satisfied: opt-einsum>=2.3.2 in /usr/local/lib/python3.11/dist-packages (from tensorflow) (3.4.0)
Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from tensorflow) (24.2)
Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev,>=3.20.3 in /usr/local/lib/python3.11/dist-packages (from tensorflow) (5.29.3)
Requirement already satisfied: setuptools in /usr/local/lib/python3.11/dist-packages (from tensorflow) (75.1.0)
Requirement already satisfied: six>=1.12.0 in /usr/local/lib/python3.11/dist-packages (from tensorflow) (1.17.0)
Requirement already satisfied: termcolor>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from tensorflow) (2.5.0)
Requirement already satisfied: typing-extensions>=3.6.6 in /usr/local/lib/python3.11/dist-packages (from tensorflow) (4.12.2)
Requirement already satisfied: wrapt>=1.11.0 in /usr/local/lib/python3.11/dist-packages (from tensorflow) (1.17.2)
Requirement already satisfied: grpcio<2.0,>=1.24.3 in /usr/local/lib/python3.11/dist-packages (from tensorflow) (1.71.0)
Collecting tensorboard~=2.19.0 (from tensorflow)
  Downloading tensorboard-2.19.0-py3-none-any.whl.metadata (1.8 kB)
Requirement already satisfied: h5py>=3.11.0 in /usr/local/lib/python3.11/dist-packages (from tensorflow) (3.13.0)
Requirement already satisfied: ml-dtypes<1.0.0,>=0.5.1 in /usr/local/lib/python3.11/dist-packages (from tensorflow) (0.5.1)
Collecting tensorflow-io-gcs-filesystem>=0.23.1 (from tensorflow)
  Downloading tensorflow_io_gcs_filesystem-0.37.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)
Requirement already satisfied: rich in /usr/local/lib/python3.11/dist-packages (from keras) (13.9.4)
Requirement already satisfied: namex in /usr/local/lib/python3.11/dist-packages (from keras) (0.0.8)
Requirement already satisfied: optree in /usr/local/lib/python3.11/dist-packages (from keras) (0.14.1)
Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from pandas) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas) (2025.1)
Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas) (2025.1)
Requirement already satisfied: scipy>=1.6.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (1.14.1)
Requirement already satisfied: joblib>=1.2.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (1.4.2)
Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (3.5.0)
Collecting scipy>=1.6.0 (from scikit-learn)
  Downloading scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (60 kB)
[2K     [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m60.6/60.6 kB[0m [31m1.8 MB/s[0m eta [36m0:00:00[0m
[?25hRequirement already satisfied: smart-open>=1.8.1 in /usr/local/lib/python3.11/dist-packages (from gensim) (7.1.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests) (3.4.1)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests) (2.3.0)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests) (2025.1.31)
Requirement already satisfied: click in /usr/local/lib/python3.11/dist-packages (from nltk) (8.1.8)
Requirement already satisfied: regex>=2021.8.3 in /usr/local/lib/python3.11/dist-packages (from nltk) (2024.11.6)
Collecting wheel<1.0,>=0.23.0 (from astunparse>=1.6.0->tensorflow)
  Downloading wheel-0.45.1-py3-none-any.whl.metadata (2.3 kB)
Collecting markdown>=2.6.8 (from tensorboard~=2.19.0->tensorflow)
  Downloading Markdown-3.7-py3-none-any.whl.metadata (7.0 kB)
Collecting tensorboard-data-server<0.8.0,>=0.7.0 (from tensorboard~=2.19.0->tensorflow)
  Downloading tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl.metadata (1.1 kB)
Collecting werkzeug>=1.0.1 (from tensorboard~=2.19.0->tensorflow)
  Downloading werkzeug-3.1.3-py3-none-any.whl.metadata (3.7 kB)
Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from rich->keras) (3.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.11/dist-packages (from rich->keras) (2.19.1)
Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.11/dist-packages (from markdown-it-py>=2.2.0->rich->keras) (0.1.2)
Requirement already satisfied: MarkupSafe>=2.1.1 in /usr/local/lib/python3.11/dist-packages (from werkzeug>=1.0.1->tensorboard~=2.19.0->tensorflow) (3.0.2)
Downloading tensorflow-2.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (644.9 MB)
[2K   [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m644.9/644.9 MB[0m [31m576.4 kB/s[0m eta [36m0:00:00[0m
[?25hDownloading gensim-4.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (26.7 MB)
[2K   [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m26.7/26.7 MB[0m [31m25.9 MB/s[0m eta [36m0:00:00[0m
[?25hDownloading astunparse-1.6.3-py2.py3-none-any.whl (12 kB)
Downloading flatbuffers-25.2.10-py2.py3-none-any.whl (30 kB)
Downloading google_pasta-0.2.0-py3-none-any.whl (57 kB)
[2K   [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m57.5/57.5 kB[0m [31m4.4 MB/s[0m eta [36m0:00:00[0m
[?25hDownloading libclang-18.1.1-py2.py3-none-manylinux2010_x86_64.whl (24.5 MB)
[2K   [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m24.5/24.5 MB[0m [31m69.8 MB/s[0m eta [36m0:00:00[0m
[?25hDownloading scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (38.6 MB)
[2K   [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m38.6/38.6 MB[0m [31m31.0 MB/s[0m eta [36m0:00:00[0m
[?25hDownloading tensorboard-2.19.0-py3-none-any.whl (5.5 MB)
[2K   [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m5.5/5.5 MB[0m [31m42.2 MB/s[0m eta [36m0:00:00[0m
[?25hDownloading tensorflow_io_gcs_filesystem-0.37.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.1 MB)
[2K   [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m5.1/5.1 MB[0m [31m98.1 MB/s[0m eta [36m0:00:00[0m
[?25hDownloading Markdown-3.7-py3-none-any.whl (106 kB)
[2K   [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m106.3/106.3 kB[0m [31m7.7 MB/s[0m eta [36m0:00:00[0m
[?25hDownloading tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl (6.6 MB)
[2K   [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m6.6/6.6 MB[0m [31m104.7 MB/s[0m eta [36m0:00:00[0m
[?25hDownloading werkzeug-3.1.3-py3-none-any.whl (224 kB)
[2K   [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m224.5/224.5 kB[0m [31m18.0 MB/s[0m eta [36m0:00:00[0m
[?25hDownloading wheel-0.45.1-py3-none-any.whl (72 kB)
[2K   [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m72.5/72.5 kB[0m [31m6.0 MB/s[0m eta [36m0:00:00[0m
[?25hInstalling collected packages: libclang, flatbuffers, wheel, werkzeug, tensorflow-io-gcs-filesystem, tensorboard-data-server, scipy, markdown, google-pasta, tensorboard, gensim, astunparse, tensorflow
  Attempting uninstall: scipy
    Found existing installation: scipy 1.14.1
    Uninstalling scipy-1.14.1:
      Successfully uninstalled scipy-1.14.1
Successfully installed astunparse-1.6.3 flatbuffers-25.2.10 gensim-4.3.3 google-pasta-0.2.0 libclang-18.1.1 markdown-3.7 scipy-1.13.1 tensorboard-2.19.0 tensorboard-data-server-0.7.2 tensorflow-2.19.0 tensorflow-io-gcs-filesystem-0.37.1 werkzeug-3.1.3 wheel-0.45.1
[nltk_data] Error loading arabic_reshaper: Package 'arabic_reshaper'
[nltk_data]     not found in index
[nltk_data] Downloading package stopwords to /root/nltk_data...
[nltk_data]   Unzipping corpora/stopwords.zip.
import os
import numpy as np
import pandas as pd
import tensorflow as tf
import gensim
import requests
import zipfile
from tqdm import tqdm
from sklearn.model_selection import train_test_split
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout
from nltk.stem.isri import ISRIStemmer
from nltk.corpus import stopwords
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive
import pandas as pd
 
# Define the path to your CSV file in Google Drive
csv_path = "/content/drive/My Drive/ANLP/SEC05/Arabic Sentiment Analysis Dataset - SS2030.csv"  # Update with the actual path
 
# Read the CSV file
df = pd.read_csv(csv_path, encoding="utf-8")  # Use 'utf-8-sig' if needed
df = df.dropna()  # Remove missing values
 
# Display sample
print(df.head())
                                                text  Sentiment
0            حقوق المرأة 💚💚💚 https://t.co/Mzf90Ta5g1          1
1  RT @___IHAVENOIDEA: حقوق المرأة في الإسلام. ht...          1
2  RT @saud_talep: Retweeted لجنة التنمية بشبرا (...          1
3  RT @MojKsa: حقوق المرأة التي تضمنها لها وزارة ...          1
4  RT @abm112211: ولي امر الزوجة او ولي الزوجة او...          1
# Initialize ISRI Stemmer
stemmer = ISRIStemmer()
stop_words = set(stopwords.words("arabic"))
 
# Function to preprocess Arabic text
def preprocess_arabic_text(text):
    text = str(text)  # Ensure it's a string
    text = text.replace("،", "").replace(".", "").replace("؟", "").replace("!", "")
    text = text.replace("\n", " ").replace("\r", " ")
    words = text.split()  # Tokenize manually (since ISRI doesn't tokenize)
    words = [stemmer.stem(word) for word in words if word not in stop_words]  # Stem and remove stopwords
    return " ".join(words)
 
# Apply preprocessing
df["processed_text"] = df["text"].apply(preprocess_arabic_text)
df.columns = df.columns.str.strip()
df = df.rename(columns={"Sentiment": "label"})
 
# Display processed data
df.head()
                                                text  label  \
0            حقوق المرأة 💚💚💚 https://t.co/Mzf90Ta5g1      1   
1  RT @___IHAVENOIDEA: حقوق المرأة في الإسلام. ht...      1   
2  RT @saud_talep: Retweeted لجنة التنمية بشبرا (...      1   
3  RT @MojKsa: حقوق المرأة التي تضمنها لها وزارة ...      1   
4  RT @abm112211: ولي امر الزوجة او ولي الزوجة او...      1   
 
                                      processed_text  
0                 حقق رأة 💚💚💚 https://tco/Mzf90Ta5g1  
1  RT @___IHAVENOIDEA: حقق رأة سلم https://tco/ps...  
2  RT @saud_talep: Retweeted لجن نمي شبر (@Shubra...  
3  RT @MojKsa: حقق رأة تضم وزر عدل https://tco/QU...  
4  RT @abm112211: ولي امر زوج او ولي زوج او ولي ر...
# Tokenization
tokenizer = Tokenizer(num_words=10000)  # Keep top 10K words
tokenizer.fit_on_texts(df["processed_text"])
 
# Convert text to sequences
X_sequences = tokenizer.texts_to_sequences(df["processed_text"])
X_padded = pad_sequences(X_sequences, maxlen=100)  # Standardize length
 
# Labels
y = np.array(df["label"])
 
# Split dataset
X_train, X_test, y_train, y_test = train_test_split(X_padded, y, test_size=0.2, random_state=42)
# Define Trainable Embedding Model
trainable_model = Sequential([
    Embedding(input_dim=10000, output_dim=300, input_length=100, trainable=True),
    LSTM(64, return_sequences=True),
    LSTM(32),
    Dense(1, activation='sigmoid')
])
 
# Compile the model
trainable_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
 
# Train the model
trainable_model.fit(X_train, y_train, epochs=5, batch_size=32, validation_data=(X_test, y_test))
 
# Evaluate
trainable_loss, trainable_acc = trainable_model.evaluate(X_test, y_test)
print(f"Trainable Embedding Model Accuracy: {trainable_acc:.2f}")
Epoch 1/5
/usr/local/lib/python3.11/dist-packages/keras/src/layers/core/embedding.py:90: UserWarning: Argument `input_length` is deprecated. Just remove it.
  warnings.warn(
[1m107/107[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m23s[0m 179ms/step - accuracy: 0.7188 - loss: 0.5467 - val_accuracy: 0.8566 - val_loss: 0.3537
Epoch 2/5
[1m107/107[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m17s[0m 156ms/step - accuracy: 0.9509 - loss: 0.1273 - val_accuracy: 0.8731 - val_loss: 0.3269
Epoch 3/5
[1m107/107[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m17s[0m 160ms/step - accuracy: 0.9906 - loss: 0.0422 - val_accuracy: 0.8519 - val_loss: 0.5036
Epoch 4/5
[1m107/107[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m17s[0m 157ms/step - accuracy: 0.9967 - loss: 0.0139 - val_accuracy: 0.8566 - val_loss: 0.6059
Epoch 5/5
[1m107/107[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m17s[0m 158ms/step - accuracy: 0.9962 - loss: 0.0159 - val_accuracy: 0.8496 - val_loss: 0.5953
[1m27/27[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m1s[0m 29ms/step - accuracy: 0.8257 - loss: 0.6966
Trainable Embedding Model Accuracy: 0.85
# Download AraVec Word2Vec Model
aravec_url = "https://bakrianoo.ewr1.vultrobjects.com/aravec/full_grams_cbow_300_twitter.zip"
aravec_zip_path = "aravec.zip"
aravec_model_path = "full_grams_cbow_300_twitter.mdl"
 
if not os.path.exists(aravec_model_path):
    response = requests.get(aravec_url, stream=True)
    with open(aravec_zip_path, "wb") as file:
        for chunk in tqdm(response.iter_content(chunk_size=1024)):
            file.write(chunk)
 
    # Extract the zip file
    with zipfile.ZipFile(aravec_zip_path, "r") as zip_ref:
        zip_ref.extractall("aravec")
 
# Load Word2Vec model
word2vec_model = gensim.models.Word2Vec.load('./aravec/full_grams_cbow_300_twitter.mdl')
3247588it [00:35, 91383.82it/s]
word2vec_model = gensim.models.Word2Vec.load('./aravec/full_grams_cbow_300_twitter.mdl')
embedding_dim = 300
embedding_matrix = np.zeros((len(tokenizer.word_index) + 1, embedding_dim))
 
for word, i in tokenizer.word_index.items():
    if word in word2vec_model.wv:  # Corrected: Use .wv to check vocabulary
        embedding_matrix[i] = word2vec_model.wv[word]  # Corrected: Use .wv to access word vectors
 
print(f"Embedding matrix shape: {embedding_matrix.shape}")
Embedding matrix shape: (11710, 300)
# Define LSTM Model with Pretrained Embeddings
pretrained_model = Sequential([
    Embedding(input_dim=len(tokenizer.word_index) + 1, output_dim=embedding_dim,
              weights=[embedding_matrix], input_length=100, trainable=False),  # Use pretrained embeddings (Frozen)
    LSTM(128, return_sequences=True),
    Dropout(0.3),
    LSTM(64),
    Dense(32, activation='relu'),
    Dense(1, activation='sigmoid')
])
 
# Compile model
pretrained_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
 
# Display model summary
pretrained_model.summary()
/usr/local/lib/python3.11/dist-packages/keras/src/layers/core/embedding.py:90: UserWarning: Argument `input_length` is deprecated. Just remove it.
  warnings.warn(
[1mModel: "sequential_1"[0m
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
┃[1m [0m[1mLayer (type)                        [0m[1m [0m┃[1m [0m[1mOutput Shape               [0m[1m [0m┃[1m [0m[1m        Param #[0m[1m [0m┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
│ embedding_1 ([38;5;33mEmbedding[0m)              │ ?                           │       [38;5;34m3,513,000[0m │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ lstm_2 ([38;5;33mLSTM[0m)                        │ ?                           │     [38;5;34m0[0m (unbuilt) │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dropout ([38;5;33mDropout[0m)                    │ ?                           │               [38;5;34m0[0m │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ lstm_3 ([38;5;33mLSTM[0m)                        │ ?                           │     [38;5;34m0[0m (unbuilt) │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dense_1 ([38;5;33mDense[0m)                      │ ?                           │     [38;5;34m0[0m (unbuilt) │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dense_2 ([38;5;33mDense[0m)                      │ ?                           │     [38;5;34m0[0m (unbuilt) │
└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘
[1m Total params: [0m[38;5;34m3,513,000[0m (13.40 MB)
[1m Trainable params: [0m[38;5;34m0[0m (0.00 B)
[1m Non-trainable params: [0m[38;5;34m3,513,000[0m (13.40 MB)
# Train the model
pretrained_model.fit(X_train, y_train, epochs=5, batch_size=32, validation_data=(X_test, y_test))
 
# Evaluate model
pretrained_loss, pretrained_acc = pretrained_model.evaluate(X_test, y_test)
print(f"Pretrained Word2Vec Model Accuracy: {pretrained_acc:.2f}")
Epoch 1/5
[1m107/107[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m22s[0m 174ms/step - accuracy: 0.7081 - loss: 0.5336 - val_accuracy: 0.8120 - val_loss: 0.3891
Epoch 2/5
[1m107/107[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m18s[0m 171ms/step - accuracy: 0.8829 - loss: 0.2669 - val_accuracy: 0.8343 - val_loss: 0.3698
Epoch 3/5
[1m107/107[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m18s[0m 171ms/step - accuracy: 0.9314 - loss: 0.1794 - val_accuracy: 0.8390 - val_loss: 0.3783
Epoch 4/5
[1m107/107[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m18s[0m 172ms/step - accuracy: 0.9508 - loss: 0.1287 - val_accuracy: 0.8496 - val_loss: 0.3836
Epoch 5/5
[1m107/107[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m18s[0m 170ms/step - accuracy: 0.9760 - loss: 0.0757 - val_accuracy: 0.8555 - val_loss: 0.4293
[1m27/27[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m1s[0m 52ms/step - accuracy: 0.8577 - loss: 0.4420
Pretrained Word2Vec Model Accuracy: 0.86
print(f"Trainable Embedding Model Accuracy: {trainable_acc:.2f}")
print(f"Pretrained Word2Vec Model Accuracy: {pretrained_acc:.2f}")
Trainable Embedding Model Accuracy: 0.85
Pretrained Word2Vec Model Accuracy: 0.86