DL-Projekt/Movies_reviews.ipynb
Mateusz Grzegorzewski e9f10de4f0 Project implementation
2024-06-07 21:14:40 +02:00

5.1 KiB

Biblioteki

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.metrics import accuracy_score
import numpy as np
from gensim.models import Word2Vec
from sklearn.naive_bayes import GaussianNB
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords

Wczytanie danych

train_data = pd.read_csv('Train.csv')
valid_data = pd.read_csv('Valid.csv')
test_data = pd.read_csv('Test.csv')

X_train = train_data['text']
y_train = train_data['label']
X_valid = valid_data['text']
y_valid = valid_data['label']
X_test = test_data['text']
y_test = test_data['label']

Naiwny klasyfikator bayesowski z wektoryzacją TF-IDF

# Stworzenie pipeline do przetwarzania tekstu i uczenia modelu
model = make_pipeline(TfidfVectorizer(), MultinomialNB())

# Trenowanie modelu
model.fit(X_train, y_train)

# Ewaluacja modelu
y_valid_pred = model.predict(X_valid)
valid_accuracy = accuracy_score(y_valid, y_valid_pred)

y_test_pred = model.predict(X_test)
test_accuracy = accuracy_score(y_test, y_test_pred)

print(f'Dokładność na zbiorze walidacyjnym: {valid_accuracy:.4f}')
print(f'Dokładność na zbiorze testowym: {test_accuracy:.4f}')
Dokładność na zbiorze walidacyjnym: 0.8616
Dokładność na zbiorze testowym: 0.8670

Naiwny klasyfikator bayesowski z osadzeniami słów (Word2Vec)

stop_words = set(stopwords.words('english'))
def tokenize(text):
    tokens = word_tokenize(text.lower())
    tokens = [word for word in tokens if word.isalnum()]
    tokens = [word for word in tokens if word not in stop_words]
    return tokens

X_train_tokens = [tokenize(review) for review in X_train]
X_valid_tokens = [tokenize(review) for review in X_valid]
X_test_tokens = [tokenize(review) for review in X_test]

w2v_model = Word2Vec(sentences=X_train_tokens, vector_size=100, window=5, min_count=1, workers=4)

# Funkcja do konwersji recenzji na osadzenia słów
def document_vector(tokens, model):
    vec = [model.wv[word] for word in tokens if word in model.wv]
    return np.mean(vec, axis=0) if len(vec) > 0 else np.zeros(model.vector_size)

X_train_vectors = np.array([document_vector(tokens, w2v_model) for tokens in X_train_tokens])
X_valid_vectors = np.array([document_vector(tokens, w2v_model) for tokens in X_valid_tokens])
X_test_vectors = np.array([document_vector(tokens, w2v_model) for tokens in X_test_tokens])

# Klasyfikator Naive Bayes
model_w2v = GaussianNB()

# Trenowanie modelu
model_w2v.fit(X_train_vectors, y_train)

# Ewaluacja modelu
y_valid_pred_w2v = model_w2v.predict(X_valid_vectors)
valid_accuracy_w2v = accuracy_score(y_valid, y_valid_pred_w2v)

y_test_pred_w2v = model_w2v.predict(X_test_vectors)
test_accuracy_w2v = accuracy_score(y_test, y_test_pred_w2v)

print(f'Dokładność na zbiorze walidacyjnym (Word2Vec): {valid_accuracy_w2v:.4f}')
print(f'Dokładność na zbiorze testowym (Word2Vec): {test_accuracy_w2v:.4f}')
Dokładność na zbiorze walidacyjnym (Word2Vec): 0.7584
Dokładność na zbiorze testowym (Word2Vec): 0.7644