21 KiB
21 KiB
import gensim
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
pd.set_option('display.max_colwidth', 100)
data = pd.read_csv("train.tsv", sep="\t", on_bad_lines='skip')
data.head(5)
1 | Mindaugas Budzinauskas wierzy w odbudowę formy Kevina Johnsona. Czy ktoś opuści Polpharmę? Mindaugas Budzinauskas w rozmowie z WP SportoweFakty opowiada o transferze Kevina Johnsona, ewentualnych odejściach z Polpharmy i kolejnym meczu PLK z Anwilem. - Potrzebowaliśmy takiego gracza, jak Johnson - podkreśla szkoleniowiec starogardzian. | |
---|---|---|
0 | 1 | Przyjmujący reprezentacji Polski wrócił do PGE Skry Bełchatów Tylko rok trwał rozbrat Artura Sza... |
1 | 0 | FEN 9: Zapowiedź walki Róża Gumienna vs Katarzyna Posiadała (wideo) Podczas Fight Exclusive Nigh... |
2 | 1 | Aleksander Filipiak: Czuję się dobrze w nowym klubie Aleksander Filipiak w przerwie letniej zami... |
3 | 0 | Victoria Carl i Aleksiej Czerwotkin mistrzami świata juniorów na 5 i 10 kilometrów Biegi na 5 i ... |
4 | 1 | Świat poznał ją na mundialu. Francuska WAG czaruje pięknym ciałem Rachel Legrain-Trapani to jedn... |
data.columns = ["label", "text"]
data.head(5)
label | text | |
---|---|---|
0 | 1 | Przyjmujący reprezentacji Polski wrócił do PGE Skry Bełchatów Tylko rok trwał rozbrat Artura Sza... |
1 | 0 | FEN 9: Zapowiedź walki Róża Gumienna vs Katarzyna Posiadała (wideo) Podczas Fight Exclusive Nigh... |
2 | 1 | Aleksander Filipiak: Czuję się dobrze w nowym klubie Aleksander Filipiak w przerwie letniej zami... |
3 | 0 | Victoria Carl i Aleksiej Czerwotkin mistrzami świata juniorów na 5 i 10 kilometrów Biegi na 5 i ... |
4 | 1 | Świat poznał ją na mundialu. Francuska WAG czaruje pięknym ciałem Rachel Legrain-Trapani to jedn... |
data['text_preprocessed'] = data['text'].apply(lambda x: gensim.utils.simple_preprocess(x))
data.head(5)
label | text | text_preprocessed | |
---|---|---|---|
0 | 1 | Przyjmujący reprezentacji Polski wrócił do PGE Skry Bełchatów Tylko rok trwał rozbrat Artura Sza... | [przyjmujący, reprezentacji, polski, wrócił, do, pge, skry, bełchatów, tylko, rok, trwał, rozbra... |
1 | 0 | FEN 9: Zapowiedź walki Róża Gumienna vs Katarzyna Posiadała (wideo) Podczas Fight Exclusive Nigh... | [fen, zapowiedź, walki, róża, gumienna, vs, katarzyna, posiadała, wideo, podczas, fight, exclusi... |
2 | 1 | Aleksander Filipiak: Czuję się dobrze w nowym klubie Aleksander Filipiak w przerwie letniej zami... | [aleksander, filipiak, czuję, się, dobrze, nowym, klubie, aleksander, filipiak, przerwie, letnie... |
3 | 0 | Victoria Carl i Aleksiej Czerwotkin mistrzami świata juniorów na 5 i 10 kilometrów Biegi na 5 i ... | [victoria, carl, aleksiej, czerwotkin, mistrzami, świata, juniorów, na, kilometrów, biegi, na, k... |
4 | 1 | Świat poznał ją na mundialu. Francuska WAG czaruje pięknym ciałem Rachel Legrain-Trapani to jedn... | [świat, poznał, ją, na, mundialu, francuska, wag, czaruje, pięknym, ciałem, rachel, legrain, tra... |
from gensim.test.utils import common_texts
from gensim.models import Word2Vec
model = Word2Vec(sentences=data['text_preprocessed'], vector_size=100, window=5, min_count=1, workers=4)
import tensorflow as tf
token = tf.keras.preprocessing.text.Tokenizer(1234)
token.fit_on_texts(data['text_preprocessed'])
text = token.texts_to_sequences(data['text_preprocessed'])
text = tf.keras.utils.pad_sequences(text, 75)
X_train, X_test, y_train, y_test = train_test_split(np.array(text), data['label'], test_size=0.3)
X_train
array([[ 0, 0, 0, ..., 189, 416, 346], [ 0, 0, 0, ..., 56, 397, 907], [ 0, 0, 0, ..., 137, 226, 343], ..., [ 0, 0, 0, ..., 817, 3, 317], [ 0, 0, 0, ..., 656, 20, 923], [ 0, 0, 0, ..., 6, 478, 27]])
vocab_size = len(token.word_index) + 1
embedding_matrix = np.zeros((vocab_size, 100))
for word, i in token.word_index.items():
if word in model.wv:
embedding_matrix[i] = model.wv[word]
import keras
from keras.src.layers import Dropout, Dense, Activation, Embedding, MaxPooling1D, GlobalMaxPooling1D
from keras.src.layers import Conv1D
from keras import Sequential
opt = keras.optimizers.Adam(learning_rate=0.01)
keras_model = Sequential()
keras_model.add(Embedding(vocab_size, 100, weights=[embedding_matrix], trainable=False))
keras_model.add(Dropout(0.4))
keras_model.add(Conv1D(100, 3, activation='relu', padding='same', strides=1))
keras_model.add(Conv1D(100, 3, activation='relu', padding='same', strides=1))
keras_model.add(GlobalMaxPooling1D())
keras_model.add(Dropout(0.4))
keras_model.add(Dense(200))
keras_model.add(Activation('relu'))
keras_model.add(Dropout(0.4))
keras_model.add(Dense(1))
keras_model.add(Activation('sigmoid'))
keras_model.compile(loss='binary_crossentropy', metrics=['acc'], optimizer=opt)
keras_model.fit(X_train, y_train, batch_size=64, epochs=10, validation_data=(X_test, y_test))
Epoch 1/10 1074/1074 [==============================] - 45s 41ms/step - loss: 0.1928 - acc: 0.9313 - val_loss: 0.1255 - val_acc: 0.9564 Epoch 2/10 1074/1074 [==============================] - 43s 40ms/step - loss: 0.1985 - acc: 0.9309 - val_loss: 0.1173 - val_acc: 0.9543 Epoch 3/10 1074/1074 [==============================] - 44s 41ms/step - loss: 0.2170 - acc: 0.9252 - val_loss: 0.1254 - val_acc: 0.9522 Epoch 4/10 1074/1074 [==============================] - 44s 41ms/step - loss: 0.1953 - acc: 0.9291 - val_loss: 0.1191 - val_acc: 0.9524 Epoch 5/10 1074/1074 [==============================] - 44s 41ms/step - loss: 0.2065 - acc: 0.9253 - val_loss: 0.1237 - val_acc: 0.9503 Epoch 6/10 1074/1074 [==============================] - 43s 40ms/step - loss: 0.1990 - acc: 0.9275 - val_loss: 0.1334 - val_acc: 0.9452 Epoch 7/10 1074/1074 [==============================] - 44s 41ms/step - loss: 0.1960 - acc: 0.9256 - val_loss: 0.1266 - val_acc: 0.9516 Epoch 8/10 1074/1074 [==============================] - 45s 42ms/step - loss: 0.2203 - acc: 0.9217 - val_loss: 0.1327 - val_acc: 0.9458 Epoch 9/10 1074/1074 [==============================] - 43s 40ms/step - loss: 0.2149 - acc: 0.9197 - val_loss: 0.1191 - val_acc: 0.9486 Epoch 10/10 1074/1074 [==============================] - 69s 64ms/step - loss: 0.2136 - acc: 0.9232 - val_loss: 0.1187 - val_acc: 0.9511
<keras.src.callbacks.History at 0x26e8784f9d0>
model = keras_model
def preprocess(path):
data = pd.read_csv(path, sep="\t", on_bad_lines='skip')
data.columns = ["text"]
data['text_clean'] = data['text'].apply(lambda x: gensim.utils.simple_preprocess(x))
text = token.texts_to_sequences(data['text_clean'])
text = tf.keras.utils.pad_sequences(text, 75)
return text
x = preprocess("in.tsv")
res = model.predict(x)
y_predictions = np.where(res >= 0.49, 1, 0)
out = pd.DataFrame(y_predictions)
171/171 [==============================] - 2s 8ms/step
y_predictions = np.where(res>=0.49, 1, 0)
out = pd.DataFrame(y_predictions)
print(out)
0 0 1 1 1 2 0 3 1 4 1 ... .. 5439 1 5440 1 5441 1 5442 0 5443 1 [5444 rows x 1 columns]
out.to_csv('out.tsv', sep="\t", index=False)