paranormal-or-skeptic-ISI-p.../keras_classifier.ipynb

4.4 KiB

# https://gonito.net/challenge/paranormal-or-skeptic
# dane + wyniki -> https://git.wmi.amu.edu.pl/s444380/paranormal-or-skeptic-ISI-public
import lzma
from keras.models import Sequential
from keras.layers import Dense
import tensorflow as tf
import numpy as np
from gensim import downloader
# Read train files
with lzma.open("train/in.tsv.xz", "rt", encoding="utf-8") as train_file:
    x_train = [x.strip().lower() for x in train_file.readlines()]

with open("train/expected.tsv", "r", encoding="utf-8") as train_file:
    y_train = np.array([int(x.strip()) for x in train_file.readlines()])
word2vec = downloader.load("glove-twitter-200")
x_train_w2v = [np.mean([word2vec[word.lower()] for word in doc.split() if word.lower() in word2vec]
                   or [np.zeros(200)], axis=0) for doc in x_train]
# Read dev files
with lzma.open("dev-0/in.tsv.xz", "rt", encoding="utf-8") as dev_file:
    x_dev = [x.strip().lower() for x in dev_file.readlines()]

with open("dev-0/expected.tsv", "r", encoding="utf-8") as train_file:
    y_dev = np.array([int(x.strip()) for x in train_file.readlines()])

x_dev_w2v = [np.mean([word2vec[word.lower()] for word in doc.split() if word.lower() in word2vec]
                   or [np.zeros(200)], axis=0) for doc in x_dev]
# y_train = y_train.reshape(-1, 1)
model = Sequential()
model.add(Dense(1000, activation='relu', input_dim=200))
model.add(Dense(500, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(tf.stack(x_train_w2v), tf.stack(y_train), epochs=5, validation_data=(tf.stack(x_dev_w2v), tf.stack(y_dev)))
Epoch 1/5
9050/9050 [==============================] - 48s 5ms/step - loss: 0.5244 - accuracy: 0.7303 - val_loss: 0.5536 - val_accuracy: 0.6910
Epoch 2/5
9050/9050 [==============================] - 47s 5ms/step - loss: 0.5132 - accuracy: 0.7367 - val_loss: 0.5052 - val_accuracy: 0.7475
Epoch 3/5
9050/9050 [==============================] - 47s 5ms/step - loss: 0.5067 - accuracy: 0.7396 - val_loss: 0.5091 - val_accuracy: 0.7320
Epoch 4/5
9050/9050 [==============================] - 47s 5ms/step - loss: 0.5025 - accuracy: 0.7429 - val_loss: 0.5343 - val_accuracy: 0.7071
Epoch 5/5
9050/9050 [==============================] - 47s 5ms/step - loss: 0.4992 - accuracy: 0.7447 - val_loss: 0.5143 - val_accuracy: 0.7381