ArifSyamil24 commited on
Commit
7b2fc38
·
verified ·
1 Parent(s): 4ac0749

Upload 5 files

Browse files
__pycache__/malaya_file.cpython-38.pyc ADDED
Binary file (1.11 kB). View file
 
knn_malaya.sav ADDED
Binary file (110 kB). View file
 
malaya_file.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #Import all neccessary libraries
2
+ import streamlit as st
3
+ import re
4
+ import wikipediaapi
5
+ import malaya
6
+ import torch
7
+ import tensorflow
8
+ import pandas as pd
9
+ from sklearn.preprocessing import OneHotEncoder, LabelEncoder
10
+ from sklearn.model_selection import train_test_split
11
+ from sklearn.neighbors import KNeighborsClassifier
12
+ from sklearn.multioutput import MultiOutputClassifier
13
+ from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
14
+ import numpy as np
15
+ import matplotlib.pyplot as plt
16
+ import tracemalloc
17
+
18
+ st.cache(allow_output_mutation=True)
19
+ def malaya_model(model_name, kata):
20
+ global df_malaya
21
+ q_model = malaya.entity.transformer(model = model_name, quantized = True)
22
+ malay_pred = q_model.predict(kata)
23
+ df_malaya = pd.DataFrame(malay_pred, columns = ['kata', 'entiti'])
24
+ return df_malaya
requirements.txt ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ malaya==5.0
2
+ matplotlib==3.6.3
3
+ numpy==1.24.1
4
+ pandas==1.5.2
5
+ psutil==5.9.4
6
+ scikit_learn==1.2.1
7
+ streamlit==1.17.0
8
+ tensorflow==2.11.0
9
+ torch==1.13.1
10
+ Wikipedia_API==0.5.8
webpickle.py ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #Import all neccessary libraries
2
+ import streamlit as st
3
+ import re
4
+ import wikipediaapi
5
+ import malaya
6
+ import torch
7
+ import tensorflow
8
+ import pandas as pd
9
+ from sklearn.preprocessing import OneHotEncoder, LabelEncoder
10
+ from sklearn.model_selection import train_test_split
11
+ from sklearn.neighbors import KNeighborsClassifier
12
+ from sklearn.multioutput import MultiOutputClassifier
13
+ from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
14
+ import numpy as np
15
+ import matplotlib.pyplot as plt
16
+ import os
17
+ import psutil
18
+ import pickle
19
+ from malaya_file import *
20
+
21
+ #Page header, title
22
+ st.set_page_config(page_title= "Malay Named Entity Recognition (NER) Model", page_icon= ":book:", layout= "wide")
23
+ st.title(":book: Pengecaman Entiti Nama Malay (NER) model")
24
+ st.markdown("CARA MENGGUNAKAN PROGRAM")
25
+ st.markdown("1. Sila taip sebuah ayat atau teks tidak melebihi 500 karakter di ruangan bawah")
26
+ st.markdown("2. Pilih model untuk melakukan proses pengecaman entiti nama (NER) berdasarkan teks")
27
+ st.markdown("3. Klik butang 'BUAT RAMALAN' bagi memulakan program")
28
+ st.markdown("4. Paparan bagi setiap kata serta jenis entiti akan dipaparkan pada bahagian 'HASIL RAMALAN'")
29
+
30
+
31
+ #LOAD MODEL FROM KNN_MALAYA.SAV
32
+ st.cache(allow_output_mutation=True)
33
+ def knn_malaya():
34
+ load_model = pickle.load(open('knn_malaya.sav', 'rb'))
35
+ return load_model
36
+
37
+ #CHANGE STRING INTO LABELENCODER DATAFRAME
38
+ #PREDICT WORD OUTSIDE DATA
39
+ st.cache(allow_output_mutation=True)
40
+ def tukar_kata(kata):
41
+ #global kelas, output
42
+ global output
43
+ string = re.sub("[=(),:;.]", "", kata)
44
+ string1 = string.split(" ")
45
+ string2 = pd.DataFrame(string1, columns = ["LKATA"])
46
+ string2['LSEBELUM'] = string2['LKATA'].shift(1)
47
+ string2['LSELEPAS'] = string2['LKATA'].shift(-1)
48
+ string2.fillna("null", inplace=True)
49
+ #string1
50
+ #st.table(string1[:10])
51
+ lbl = LabelEncoder()
52
+ lbl_sen = lbl.fit_transform(string2['LKATA'])
53
+ lbl_bef = lbl.fit_transform(string2['LSEBELUM'])
54
+ lbl_aft = lbl.fit_transform(string2['LSELEPAS'])
55
+ string2 = pd.DataFrame({'LKATA':lbl_sen, 'LSEBELUM': lbl_bef, 'LSELEPAS' : lbl_aft})
56
+ #st.dataframe(string2.head())
57
+
58
+ #Using classifier.predict() from load_model from knn_malaya.sav
59
+ kelas = knn_malaya()
60
+ hasil = kelas.predict(string2)
61
+
62
+ #Convert array into entities
63
+ fin = []
64
+ for z in hasil:
65
+ if (z == [1, 0, 0]).all():
66
+ fin.append("LOKASI")
67
+ elif (z == [0, 1, 0]).all():
68
+ fin.append("MANUSIA")
69
+ elif (z == [0, 0, 1]).all():
70
+ fin.append("ORGANISASI")
71
+ else:
72
+ fin.append("LAIN-LAIN")
73
+ #global perkata, output
74
+ #perkata = [(key, value) for i, (key, value) in enumerate(zip(string1, fin))]
75
+ output = pd.DataFrame({"kata" : string1, "entiti" : fin})
76
+ return output
77
+
78
+ #CREATE TEXT FORM
79
+ with st.form(key= 'my_form'):
80
+ global kata, btn_model, df1, df2
81
+ kata = st.text_area(label="Sila taip teks atau ayat:", max_chars= 500)
82
+
83
+ btn_model = st.radio("Pilih model untuk pengecaman entiti nama",
84
+ ("KNN", "BERT", "Tiny-BERT", "ALBERT", "Tiny-ALBERT", "XLNET", "ALXLNET", "FASTFORMER", "Tiny-FASTFORMER"))
85
+
86
+ submit_button = st.form_submit_button(label= ":arrow_right: Buat Ramalan")
87
+
88
+ if submit_button:
89
+ if re.sub(r'\s+','',kata)=='':
90
+ st.error('Ruangan teks tidak boleh kosong.')
91
+
92
+ elif re.match(r'\A\s*\w+\s*\Z', kata):
93
+ st.error("Teks atau ayat mestilah sekurang-kurangnya dua patah perkataan.")
94
+
95
+ else:
96
+ if btn_model == "KNN":
97
+ st.write("Anda pilih model : KNN")
98
+ result = knn_malaya()
99
+ #st.write(load_model)
100
+ #df2 = ramal_kata(kata)
101
+ else:
102
+ st.write("Anda pilih model transformer: ", btn_model)
103
+
104
+ st.success("Butang hantar berfungsi!")
105
+
106
+ #x = knn_model()
107
+ #y = use_knn()
108
+ #st.write("Main + import = ", x+y)
109
+
110
+ with st.container():
111
+ st.write("---")
112
+ st.header("Hasil Ramalan")
113
+ st.subheader("Ayat asal")
114
+ st.write("##")
115
+ st.write(kata)
116
+ patah = str(len(kata.split()))
117
+ st.write("Bilangan perkataan : {}".format(patah))
118
+ st.write("##")
119
+ df_test = pd.DataFrame()
120
+ if btn_model == 'KNN':
121
+ df_test = tukar_kata(kata)
122
+ #data = {'Name': ['Tom', 'nick', 'krish', 'jack'], 'entiti': [20, 21, 19, 18]}
123
+ #df_test = pd.DataFrame(data)
124
+ #st.write("LOAD PICKLE IN PROGRESS")
125
+ else:
126
+ df_test = malaya_model(btn_model, kata)
127
+
128
+ #MULTISELECT WITH DROPDOWN
129
+ entiti = sorted(df_test['entiti'].unique())
130
+ pilih = st.multiselect('Jenis entiti', entiti, entiti)
131
+ df_pilihan = df_test [ (df_test['entiti'].isin(pilih)) ]
132
+ df_line = df_pilihan.copy()
133
+ st.table(df_line.style.set_properties(**{'background-color': 'white', 'color': 'black'}))
134
+
135
+ #About model
136
+ with st.expander("About this app", expanded=True):
137
+ st.write(
138
+ """
139
+ - **Pengecaman Nama Entiti Malay** adalah sebuah aplikasi pembelajaran mesin yang dibangunkan bagi mengecam entiti pada setiap token menggunakan modul MALAYA (Husein, 2018)
140
+ - Projek ini adalah tugasan Final Year Project bagi Ijazah Sarjana Muda di UKM
141
+ - Aplikasi ini ingin menentukan model terbaik yang boleh digunakan bagi dokumen teks subjek sejarah Bahasa Melayu
142
+ - Model ini mempunyai 3 fitur utama iaitu kata asal, kata sebelum dan kata selepas. Kelas yang disasarkan ialah LOKASI, MANUSIA dan ORGANISASI
143
+ - Maklumat lanjut boleh hubungi Muhd Arif Syamil bin Mohd Rahimi melalui e-mel a177313@siswa.ukm.edu.my atau 012-7049021
144
+ """
145
+ )
146
+
147
+ process = psutil.Process(os.getpid())
148
+ mem_size = str((process.memory_info().rss)) # in bytes, divide by 1 billion to GB
149
+ mem_size_mb = str((process.memory_info().rss) / 1000000)
150
+ mem_size_gb = str((process.memory_info().rss) / 1000000000)
151
+ st.write("Penggunaan memori: {} bytes or {} MB or {} GB".format(mem_size, mem_size_mb, mem_size_gb))
152
+ # Dokumen Pemasyhuran Kemerdekaan 1957 telah ditulis dalam dua bahasa iaitu bahasa Melayu yang ditulis dalam Jawi dan bahasa Inggeris - No PERSON, LOCATION, ORGANISATION
153
+ # Ketika mendarat di Lapangan Terbang Sungai Besi, tetamu kehormat telah disambut oleh Pesuruhjaya Tinggi British di Tanah Melayu, Sir Donald Charles MacGillivray dan Lady MacGillivray, Yang di-Pertuan Agong Tanah Melayu yang pertama, Tuanku Abdul Rahman diiringi Raja Permaisuri Agong dan Perdana Menteri Tanah Melayu yang pertama, Tunku Abdul Rahman.
154
+ # Kedudukan sebuah kereta yang terjunam ke dalam Sungai Maaw di Jeti Feri Tanjung Kunyit, Sibu, semalam, sudah dikenal pasti. Jurucakap Pusat Gerakan Operasi (PGO), Jabatan Bomba dan Penyelamat Malaysia (JBPM) Sarawak, berkata kedudukan Toyota Camry di dasar sungai itu dikesan anggota Pasukan Penyelamat Di Air (PPDA) yang melakukan selaman kelima, hari ini, pada jam 3.49 petang.