-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun_fasttext_model_da.py
More file actions
151 lines (138 loc) · 4.61 KB
/
Copy pathrun_fasttext_model_da.py
File metadata and controls
151 lines (138 loc) · 4.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import sys
import click
import pandas as pd
from src.models.classifier import Classifier
from src.models.bi_lstm_pretrained_init import create_model
from src.CONSTANTS import (
MAX_NUM_WORDS,
MAX_SEQ_LEN,
EN_FILE_PATH,
DA_FILE_PATH,
EN_DA_FILE_PATH,
EN_DA_FILE_PATH,
EN_EMB_FILE_PATH,
DA_EMB_FILE_PATH,
EN_DA_EMB_FILE_PATH,
FAST_TEXT_DIM,
)
from src.features.embedding_matrix import (
create_embedding_model,
create_embedding_matrix,
)
from src.layers.pretrained_embedding_layer import (
get_pretrained_embedding_layer,
)
from src.preprocess.offens_eval import get_X_and_ys
from src.features.keras_padded_w2i import get_padded_w2i_matrix
RANDOM_STATE = 0
METRICS = ['accuracy']
@click.command()
@click.option("--lstm_units", default=5, help="# LSTM Units")
@click.option("--dense_units", default=4, help="# Dense Units")
@click.option("--dropout", default=0.2, help="Amount of Dropout")
@click.option("--dense_1_activation", default="relu", help="Dense#1 Activation Function")
@click.option("--dense_2_activation", default="sigmoid", help="Dense#2 Activation Function")
@click.option("--optimizer", default="adam", help="Adam")
@click.option("--loss_function", default="binary_crossentropy", help="Loss Function")
@click.option("--epochs", default=20, help="# of Epochs")
@click.option("--batch_size", default=512, help="Batch Size when training")
@click.option("--test_size", default=0.2, help="Test Size")
@click.option("--val_size", default=0.1, help="Validation Size")
@click.option("--model_name", help="The name of the model")
@click.option("--train_file_path", default=EN_FILE_PATH, help="Path to train file")
@click.option("--embedding_file_path", default=EN_EMB_FILE_PATH, help="Path to embedding file")
@click.option("--max_seq_len", default=MAX_SEQ_LEN, help="Max sequence length in input (number of words in sentence)")
@click.option("--max_num_words", default=MAX_NUM_WORDS, help="Max # words to consider in tokenization")
def main(
lstm_units,
dense_units,
dropout,
dense_1_activation,
dense_2_activation,
optimizer,
loss_function,
epochs,
batch_size,
test_size,
val_size,
model_name,
train_file_path,
embedding_file_path,
max_seq_len,
max_num_words,
):
arguments = sys.argv
en_data = get_X_and_ys(EN_FILE_PATH)
da_data = get_X_and_ys(DA_FILE_PATH)
X_en = en_data[0]
X_da = da_data[0]
X_original_en = X_en
X_original_da = X_da
y_en = en_data[1]
y_da = da_data[1]
y_mapping_en = en_data[4]
y_mapping_da = da_data[4]
X_en, word_index_en = get_padded_w2i_matrix(X_en, max_num_words, max_seq_len)
X_da, word_index_da = get_padded_w2i_matrix(X_da, max_num_words, max_seq_len)
en_da_data = get_X_and_ys(EN_DA_FILE_PATH)
X_en_da = en_da_data[0]
X_en_da, word_index_en_da = get_padded_w2i_matrix(X_en_da, max_seq_len, max_num_words)
emb_dim = FAST_TEXT_DIM
emb_model = create_embedding_model(EN_DA_EMB_FILE_PATH)
emb_matrix, num_oov = create_embedding_matrix(
emb_model,
emb_dim,
word_index_en_da,
)
print("# OOV: {}".format(num_oov))
emb_layer = get_pretrained_embedding_layer(
len(word_index_en_da) + 1,
emb_dim,
emb_matrix,
max_seq_len,
)
dense_2_units = 1
model = create_model(
embedding_layer=emb_layer,
lstm_units=lstm_units,
dropout_1=dropout,
dropout_2=dropout,
dropout_3=dropout,
recurrent_dropout=dropout,
dense_1_units=dense_units,
dense_2_units=dense_2_units,
dense_1_activation=dense_1_activation,
dense_2_activation=dense_2_activation,
optimizer=optimizer,
loss_function=loss_function,
metrics=METRICS,
)
clf = Classifier(
arguments=arguments,
model_name=model_name,
units=[lstm_units, dense_units, dense_2_units],
dropouts=[dropout, dropout, dropout, dropout],
regularizations=[],
activation_functions=[dense_1_activation, dense_2_activation],
optimizer=optimizer,
loss=loss_function,
metric=METRICS,
epochs=epochs,
batch_size=batch_size,
model=model,
X=pd.DataFrame(X_en),
X_original=pd.DataFrame(X_original),
y=pd.DataFrame(y),
y_mapping=y_mapping,
test_size=test_size,
val_size=val_size,
random_state=RANDOM_STATE,
train_file_path=train_file_path,
num_oov_words=num_oov,
max_seq_len=max_seq_len,
max_num_words=max_num_words,
)
clf.train()
clf.predict()
if __name__ == "__main__":
main()