File size: 4,368 Bytes
e101f24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import tensorflow as tf
import numpy as np
from keras.models import load_model
from tensorflow.keras.preprocessing.text import Tokenizer
import pickle
from tensorflow.keras.preprocessing.sequence import pad_sequences
import os

print(tf.__version__)
#Load tokenizer
fp = "resources/tokenizer.pkl"
with open(fp,mode="rb") as f:
    tokenizer = pickle.load(f)

#Load LSTM
fp = 'resources/lstm_model.h5'
LSTM_model = tf.keras.models.load_model(fp, compile=True)

#Load GRU
fp = 'resources/gru_model.h5'
GRU_model = load_model(fp)


def tokenizer_pad(tokenizer,comment_text,max_length=200):
   
    # converting text into integer sequences
    comment_text = [comment_text]
    tokenized_text = tokenizer.texts_to_sequences(comment_text)

    # padding based on max length
    padded_sequences = pad_sequences(sequences=tokenized_text,maxlen=max_length,padding="post",truncating="post")

    return padded_sequences

def LSTM_predict(x):
    x = tokenizer_pad(tokenizer=tokenizer,comment_text=x)


    #print(x)

    # processing before mapping

    # predicting using best model
    pred_proba = LSTM_model.predict(x)[0]

    # making predictions readable
    pred_proba = [round(i,2) for i in pred_proba]

    print(pred_proba)

    return pred_proba

def GRU_predict(x):
    x = tokenizer_pad(tokenizer=tokenizer,comment_text=x)


    print(x)
    # processing before mapping

    # predicting using best model
    pred_proba = GRU_model.predict(x)[0]

    # making predictions readable
    pred_proba = [round(i,2) for i in pred_proba]

    print(pred_proba)

    return pred_proba

def judge(x):

  label = ['độc hại', 'cực kì độc hại', 'tục tĩu', 'đe dọa', 'xúc phạm', 'thù ghét cá nhân']
  result = []
  judge_result = []

  lstm_pred = LSTM_predict(x)
  gru_pred = GRU_predict(x)


  return_result = 'Result'
  result_lstm = np.round(lstm_pred, 2)
  result_gru = np.round(gru_pred, 2)
  sensitive_result = max(max(result_lstm),max(result_gru))
  print(sensitive_result)
  return_result += '\nMô hình LSTM\n'
  return_result += f"{result_lstm}\n"
  for i in range(6):
    if result_lstm[i]>=0 and result_lstm[i]<0.1:
      return_result += "Tính {} là không có\n".format(label[i])
    if result_lstm[i]>=0.1 and result_lstm[i]<0.5:
      return_result += "Tính {} ở mức nhận thấy được, từ ngữ có thể chưa phù hợp\n".format(label[i])
    if result_lstm[i]>=0.5 and result_lstm[i]<0.8:
      return_result += "Tính {} ở mức rõ ràng, cần xem xét\n".format(label[i])
    if result_lstm[i]>=0.8:
      return_result += "Tính {} ở mức nghiêm trọng, yêu cầu chấn chỉnh\n".format(label[i])


  return_result += '\nMô hình GRU\n'
  return_result += f"{result_gru}\n"
  for i in range(6):
    if result_gru[i]>=0 and result_gru[i]<0.1:
      return_result += "Tính {} là không có\n".format(label[i])
    if result_gru[i]>=0.1 and result_gru[i]<0.5:
      return_result += "Tính {} ở mức nhận thấy được, từ ngữ có thể chưa phù hợp\n".format(label[i])
    if result_gru[i]>=0.5 and result_gru[i]<0.8:
      return_result += "Tính {} ở mức rõ ràng, cần xem xét\n".format(label[i])
    if result_gru[i]>=0.8:
      return_result += "Tính {} ở mức nghiêm trọng, yêu cầu chấn chỉnh\n".format(label[i])

  return_result += "\nTổng quan:\n"
  if sensitive_result>=0 and sensitive_result<0.1:
    return_result += "Ngôn ngữ phù hợp mọi lứa tuổi.\n"
  if sensitive_result>=0.1 and sensitive_result<0.5:
    return_result += "Ngôn ngữ có thể còn chứa từ ngữ chưa phù hợp.\n"
  if sensitive_result>=0.5 and sensitive_result<0.8:
    return_result += "Ngôn ngữ không phù hợp, cần xem xét lại.\n"
  if sensitive_result>=0.8:
    return_result += "Ngôn ngữ vi phạm tiêu chuẩn cộng đồng nghiêm trọng, yêu cầu chấn chỉnh.\n"

  return return_result


if __name__ == "__main__":
  #  print("Loading")
  #  while(True):
  #   string = input("\nMời nhập văn bản: ")
  #   os.system('cls')
  #   print(f"Văn bản đã nhập: {string}")
  #   judge(string)
  interface = gr.Interface(fn=judge,
                         inputs=gr.Textbox(lines=2, placeholder='Please write something', label="Input Text"),
                        outputs='text')
  interface.launch()