pada kode analisis sentimen berikut, tambahkan model CNN-LSTM ke kodenya dan atur sedemikian rupa, tambahkan kode lain jika diperlukan!
Kode analisis sentimen:
import pickle
import pandas as pd
import numpy as np
import torch
from torch.utils.data import Dataset
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, accuracy_score

from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer

# Membaca dataset
data_list = pickle.load(open('filtered_pre_processed_berita_joined_done.pkl', 'rb'))
data = pd.DataFrame(data_list, columns=['judul', 'isi', 'pre_processed', 'Label', 'Nama_Pelabel'])
data['Isi Berita'] = data['pre_processed']

# Tentukan label
sentiment_mapping = {'Positif': 0, 'Negatif': 1, 'Netral': 2}
data['Label'] = data['Label'].map(sentiment_mapping)

# Split dataset
train_texts, test_texts, train_labels, test_labels = train_test_split(data['Isi Berita'].tolist(), data['Label'].tolist(), test_size=0.20, random_state=42)

# Load tokenizer dan model
tokenizer = AutoTokenizer.from_pretrained('indolem/indobert-base-uncased')
model = AutoModelForSequenceClassification.from_pretrained('indolem/indobert-base-uncased', num_labels=len(sentiment_mapping))

# Atur dataset
class NewsDataset(Dataset):
    def __init__(self, texts, labels, tokenizer, max_len):
        self.texts = texts
        self.labels = labels
        self.tokenizer = tokenizer
        self.max_len = max_len

    def __len__(self):
        return len(self.texts)

    def __getitem__(self, index):
        text = str(self.texts[index])
        label = self.labels[index]
        inputs = self.tokenizer.encode_plus(
            text, add_special_tokens=True, max_length=self.max_len, padding='max_length', truncation=True
        )

        return {'input_ids': torch.tensor(inputs['input_ids'], dtype=torch.long),
                'attention_mask': torch.tensor(inputs['attention_mask'], dtype=torch.long),
                'labels': torch.tensor(label, dtype=torch.long)
                }

max_len = 400
train_dataset = NewsDataset(train_texts, train_labels, tokenizer, max_len)
test_dataset = NewsDataset(test_texts, test_labels, tokenizer, max_len)"

Kode CNN-LSTM:
"    # Membangun model untuk lipatan saat ini
    model = Sequential([
        Embedding(input_dim=10000,
                  output_dim=300,
                  input_length=500,
                  weights=[embedding_matrix], 
                  trainable=False),
        Conv1D(256, 3, activation='relu', kernel_regularizer=l2(0.01)),
        GlobalMaxPooling1D(),
        Dropout(0.5),
        Reshape((-1, 256)),
        LSTM(200, return_sequences=False, kernel_regularizer=l2(0.01), recurrent_regularizer=l2(0.01)),
        Dropout(0.7),
        Dense(32, activation='relu', kernel_regularizer=l2(0.01)),
        Dropout(0.5),
        Dense(3, activation='softmax')
    ])
    
    # Buat callback early stopping
    callback_es = EarlyStopping(monitor='val_loss', patience=5, verbose=1, restore_best_weights=True)
    
    initial_learning_rate = 0.0001
    optimizer = Adam(learning_rate=initial_learning_rate)

    # Kompilasi model
    model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])

    # Latih model dengan menggunakan learning rate scheduler dan early stopping dalam callbacks
    history = model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=100, batch_size=128, callbacks=[callback_es])"

di akhir tambahkan kode akurasi dan classification report:
"# Menguji model
predictions, true_labels, _ = trainer.predict(test_dataset)
predicted_labels = np.argmax(predictions, axis=1)
print(classification_report(test_labels, predicted_labels))
print("Accuracy: ", accuracy_score(test_labels, predicted_labels))"