Compare commits

...

2 Commits

Author SHA1 Message Date
Kamila aa74b711b5 feed forward pytorch 2022-05-23 16:58:34 +02:00
Kamila 7f6b1182ff adding run and out files 2022-05-08 15:19:12 +02:00
6 changed files with 21015 additions and 0 deletions

5272
dev-0/out.tsv Normal file

File diff suppressed because it is too large Load Diff

5272
dev-0/out_b.tsv Normal file

File diff suppressed because it is too large Load Diff

51
run.py Normal file
View File

@ -0,0 +1,51 @@
import lzma
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer
# from sklearn.metrics import accuracy_score
def get_data(file_name, data_type):
lines = []
if data_type == "tsv":
with open(file_name, encoding="utf-8") as file:
for line in file.readlines():
lines.append(int(line.replace("\n", "")))
else:
with lzma.open(f"{file_name}.{data_type}") as file:
for line in file.readlines():
lines.append(line.rstrip().decode("utf-8"))
return lines
def bayes(train):
x_data = get_data(f"{train}/in.tsv", "xz")
Y_data = get_data(f"{train}/expected.tsv", "tsv")
vectorizer = TfidfVectorizer(stop_words="english")
X_data = vectorizer.fit_transform(x_data)
clf = MultinomialNB()
y_pred = clf.fit(X_data, Y_data)
for predct in ["test-A", "dev-0"]:
Y_test = get_data(f"{predct}/in.tsv", "xz")
y_prediction = y_pred.predict(vectorizer.transform(Y_test))
with open(f"{predct}\out.tsv", "w", encoding="UTF-8") as file_out:
for single_pred in y_prediction:
file_out.writelines(f"{str(single_pred)}\n")
bayes("train")
'''y_true = []
with open("dev-0/expected.tsv", encoding='utf-8') as file:
for line in file.readlines():
y_true.append(line)
y_pred = []
with open("dev-0/out.tsv", encoding='utf-8') as file:
for line in file.readlines():
y_pred.append(line)
print(accuracy_score(y_true, y_pred))'''

116
run_nn.py Normal file
View File

@ -0,0 +1,116 @@
import lzma
# from sklearn.metrics import accuracy_score
import numpy as np
import gensim
import gensim.downloader
import torch
import pandas as pd
import re
BATCH_SIZE = 5
class LogisticRegressionModel(torch.nn.Module):
def __init__(self):
super(LogisticRegressionModel, self).__init__()
self.layer_one = torch.nn.Linear(100, 500)
self.layer_two = torch.nn.Linear(500, 1)
def forward(self, x):
x = self.layer_one(x)
x = torch.relu(x)
x = self.layer_two(x)
x = torch.sigmoid(x)
return x
def get_data(file_name, data_type):
lines = []
if data_type == "tsv":
with open(file_name, encoding="utf-8") as file:
for line in file.readlines():
lines.append(int(line.replace("\n", "")))
else:
with lzma.open(f"{file_name}.{data_type}") as file:
for line in file.readlines():
lines.append(line.rstrip().decode("utf-8"))
return lines
def clean_data(x_data):
for sentance in range(len(x_data)):
x_data[sentance] = re.sub(r"\\n"," ", x_data[sentance])
x_data[sentance] = re.sub(r"\W"," ", x_data[sentance])
return x_data
def train_model(word2vector):
x_data = clean_data(get_data(f"train/in.tsv", "xz"))
Y_train = pd.Series(get_data(f"train/expected.tsv", "tsv"))
X_train = [np.mean([word2vector[word] for word in sentance.split() if word in word2vector] or [np.zeros(100)], axis=0) for sentance in x_data]
lr_model = LogisticRegressionModel()
acc_score = 0
items_total = 0
lr_model.train()
for i in range(0, len(Y_train), BATCH_SIZE):
#print(i, end=", ")
X = X_train[i:i+BATCH_SIZE]
X = torch.tensor(np.array(X))
Y = Y_train[i:i+BATCH_SIZE]
Y = torch.tensor(Y.astype(np.float32).to_numpy()).reshape(-1,1)
Y_predictions = lr_model(X.float())
acc_score += torch.sum((Y_predictions > 0.5) == Y).item()
items_total += len(Y_train)
criterion = torch.nn.BCELoss()
optimizer = torch.optim.SGD(lr_model.parameters(), lr = 0.1)
optimizer.zero_grad()
loss = criterion(Y_predictions, Y)
loss.backward()
optimizer.step()
#print(f"acc score: {acc_score}")
return lr_model
def prediction(lr_model, word2vector, name_of_file):
x_data = clean_data(get_data(f"{name_of_file}/in.tsv", "xz"))
x_data = [np.mean([word2vector[word] for word in sentance.split() if word in word2vector] or [np.zeros(100)], axis=0) for sentance in x_data]
y_predictions = []
with torch.no_grad():
for i in range(0, len(x_data), BATCH_SIZE):
x = x_data[i:i + BATCH_SIZE]
prediction_x = lr_model(torch.tensor(x).float())
y_predictions.extend((prediction_x > 0.5))
results = []
for result in y_predictions:
results.append(result.int()[0].item())
with open(f"{name_of_file}\out.tsv", "w", encoding="UTF-8") as file_out:
for single_pred in results:
file_out.writelines(f"{str(single_pred)}\n")
word2vector = gensim.downloader.load("glove-wiki-gigaword-100")
lr_model = train_model(word2vector)
prediction(lr_model, word2vector, "dev-0")
prediction(lr_model, word2vector, "test-A")
'''y_true = []
with open("dev-0/expected.tsv", encoding='utf-8') as file:
for line in file.readlines():
y_true.append(line)
y_pred = []
with open("dev-0/out.tsv", encoding='utf-8') as file:
for line in file.readlines():
y_pred.append(line)
print(accuracy_score(y_true, y_pred))'''

5152
test-A/out.tsv Normal file

File diff suppressed because it is too large Load Diff

5152
test-A/out_b.tsv Normal file

File diff suppressed because it is too large Load Diff