niedziela, 16 czerwca 2024

Analiza sentymentów - wpisy na mediach społecznościowych (podział danych)

Ten wpis zaczniemy od stworzenia DataFrame z danymi treningowymi

train_df = pd.read_csv('train.csv', encoding='ISO-8859-1').dropna(subset=['text', 'sentiment'])

Ta linijka kodu pozwala na załadowanie danych z pliku "train.csv" do zbioru danych treningowych train_df. Użyte jest kodowanie znaków "ISO-8859-1", które jest standardem dla języków zachodnioeuropejskich, pozwalającym odczytać i zinterpretować znaki takie jak "é". Dzięki funkcji dropna() pozbywamy się wartości NaN z naszego zbioru danych. Parametr subset określa, które kolumny mają być brane pod uwagę przy usuwaniu braków. Usuwamy braki w kolumnach "text" (zawierającej wpisy na Twitterze) oraz "sentiment" (określającej sentyment). Gdybyśmy nie pozbyli się tych pustych wartości, mogłoby to zaburzyć proces trenowania modelu.

Kolejną linijką kodu jest:

test_df = pd.read_csv('test.csv', encoding='ISO-8859-1').dropna(subset=['text', 'sentiment']) 

Jest to zestawy tych samych operacji tylko, że tym razem odbywają się one na zbiorze testowym "test.csv".

Kolejnym krokiem jest podzielenie zbioru treningowego na dwa zestawy. Jeden z nich będzie zawierał teksty, których sentyment badamy, a drugi wartości wynikowe, które mogą być jedną z trzech możliwości: pozytywny, negatywny lub neutralny.

train_texts = train_df['text'].values
train_labels = train_df['sentiment'].values

To samo zróbmy dla zbioru testowego:

test_texts = test_df['text'].values
test_labels = test_df['sentiment'].values

"text" lub "sentiment" to nazwy kolumn, a właściwość "values" sprawia, że dana kolumna jest konwertowana do tablicy NumPy. Dzięki takiej konwersji dane będą kompatybilne z wymaganiami narzędzi NLP.

Z mapujmy sobie etykiety sentymentów, z określeń w języku naturalnym na liczby.

label_encoder = {'positive':1, 'negative': -1, 'neutral': 0}

"label_encoder" od teraz przechowuje wartości znacznie bardziej przydatne do trenowania modelu. Każde z trzech możliwych oznaczeń sentymentów danej wypowiedzi zostało zakodowane na wartości 1, -1 i 0, to jest istotne z punktu widzenia działania algorytmu.

I tak, mając już etykiety z mapowane można przejść do stworzenia zbioru z danymi wynikowymi (ze zmiennymi zależnymi).

y_train = np.array([label_encoder[label] for label in train_labels])

Metoda "np.array()" tworzy końcową listę etykiet sentymentów, co będzie stanowić zbiór danych do predykcji podczas treningu modelu. Te wartości są tworzone w taki sposób, że "label" sprawdza "train_labels" i jeśli załóżmy pierwszą wartością w train_labels będzie "positive" co będzie etykietą sentymentu, to dzięki słownikowi "label_encoder" do "y_train" zostanie dopisana, w tym przypadku wartość równa 1. "Label_encoder" posiada słownik, w którym "positive" odnosi się do wartości 1. Niech drugim elementem, będzie sentyment opisany jako "neutral", zostanie to odniesione do zawartości "label_encoder" i "y_train" zyska kolejną wartość, w tym wypadku 0, gdyż w zbiorze "label_encoder" jest jasno zapisane, że "neutral" odpowiada wartości 0.

y_test = np.array([label_encoder[label] for label in test_labels])

Analogicznie, robimy to samo co wcześniej, tym razem na danych testowych. W rezultacie tworzymy zbiór danych wynikowych (wartości określających dany sentyment: pozytywny, negatywny lub neutralny dla każdej wartości z "test_labels"), który będzie użyty podczas testowania modelu.

C.d.n... ;-)

Wpis oparty o wiedzę z kursu: Machine Learning Mastery

Brak komentarzy:

Prześlij komentarz

Analiza sentymentów - wpisy na mediach społecznościowych (podział danych)

Ten wpis zaczniemy od stworzenia DataFrame z danymi treningowymi train_df = pd.read_csv('train.csv', encoding='ISO-8859-1')....