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
import tensorflow as tf
import pandas as pd
import numpy as np
 
from gensim.models.wrappers import FastText
model_ft = FastText.load_fasttext_format("model_drama.bin")
print("fasttext model load finished")
 
def featurize_rnn(corpus,wdim,maxlen):
    rnn_total = np.zeros((len(corpus),maxlen,wdim))
    for i in range(len(corpus)):
        if i%1000 ==0:
            print(i)
        s = corpus[i]
        for j in range(len(s)):
            if s[-j-1in model_ft and j < maxlen:
                rnn_total[i][-j-1,:] = model_ft[s[-j-1]]
    return rnn_total
 
inp = pd.read_csv("train.csv")
total_data = inp[:]["text"].values.tolist()
total_label = np.array(inp[:]["smishing"].values.tolist())
rnn_total_text = featurize_rnn(total_data,100,100)
 
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Bidirectional, LSTM, Dense
def biLSTM(result):
    model = Sequential()
    model.add(Bidirectional(LSTM(64), input_shape=(len(result[0]), len(result[0][0]))))
    model.add(Dense(128, activation='relu'))
    model.add(Dense(32, activation='relu'))
    model.add(Dense(1, activation="softmax"))
    model.summary()
    model.compile(loss="sparse_categorical_crossentropy",
                  optimizer=tf.keras.optimizers.Adam(1e-4),
                  metrics=['accuracy'])
    history = model.fit(result,
                        total_label,
                        epochs=10,
                        validation_split=0.1,
                        batch_size=512)
biLSTM(rnn_total_text)
cs

한국어 임베딩 부분인 feature_rnn함수는 https://github.com/warnikchow/dlk2nlp를 참고했습니다.

간단한 2진분류를 목적으로 했기 때문에 마지막 Dense는 1로 뒀습니다.

다양하게 분류하고 싶으시면 마지막 Dense를 늘려서 사용하시면 될 거 같아요

모델을 저장하는 부분은 차후에 업데이트 하도록 하겠습니다.

+ Recent posts