VerVelVel commited on
Commit
e0e0815
·
1 Parent(s): 961ee03

rubert+logreg fo first task

Browse files
images/full_metrics.csv ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ ,Accuracy,F1-score
2
+ TF-IDF+LogReg,0.93,0.91
3
+ LSTM+W2V+Att,0.92,0.93
4
+ RuBert+LogReg,0.89,0.87
images/last_mode1_metric.png ADDED
models/model1/clf.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fb1df139301379c8298e1f14159441a39e7986916f8fc4e1596200d917fe4c63
3
+ size 3359
mylog.log CHANGED
@@ -357,3 +357,27 @@ INFO:aiogram.event:Update id=294508028 is handled. Duration 449 ms by bot id=686
357
  WARNING:aiogram.dispatcher:Received SIGINT signal
358
  INFO:aiogram.dispatcher:Polling stopped for bot @Toxic_BERT_bot id=6864353709 - 'Toxic_BERT'
359
  INFO:aiogram.dispatcher:Polling stopped
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
357
  WARNING:aiogram.dispatcher:Received SIGINT signal
358
  INFO:aiogram.dispatcher:Polling stopped for bot @Toxic_BERT_bot id=6864353709 - 'Toxic_BERT'
359
  INFO:aiogram.dispatcher:Polling stopped
360
+ INFO:aiogram.dispatcher:Start polling
361
+ INFO:aiogram.dispatcher:Run polling for bot @Toxic_BERT_bot id=6864353709 - 'Toxic_BERT'
362
+ INFO:root:Вера 883002227 запустил бота
363
+ INFO:aiogram.event:Update id=294508029 is handled. Duration 341 ms by bot id=6864353709
364
+ INFO:root:Вера 883002227: Так там по сути никто и не работает дольше 3-х лет для стажа в типа сириус конторе. У нас в филиале роскосого так: после универа за 15-20к работают во всяких лабораториях, потом уебывают на вольные хлеба. Постоянно там только старичье совкового пошива и сотни начальников, 90 которых даже на работу не ходят, чисто зп получают.
365
+ INFO:aiogram.event:Update id=294508030 is handled. Duration 1469 ms by bot id=6864353709
366
+ INFO:root:Вера 883002227: Антонио, ты весь в красном!
367
+ INFO:aiogram.event:Update id=294508031 is handled. Duration 385 ms by bot id=6864353709
368
+ INFO:root:Вера 883002227: Мой коммент - ответ на другой коммент. Это видно прямо на мониторе. Ответ по теме. А Ваше выступление - выезд на лыжах из... не знаю уж откуда. Но лучше Вам туда вернуться.
369
+ INFO:aiogram.event:Update id=294508032 is handled. Duration 336 ms by bot id=6864353709
370
+ INFO:root:Вера 883002227: Ну, ясно-понятно, высказать аргументы вы не можете, умеете только на минус нажать. Ок, я пошла - чего с безмозглыми разговаривать, всё равно скоро докраситесь за рулём и в дтп все и помрёте. Естественный отбор, чо.
371
+ INFO:aiogram.event:Update id=294508033 is handled. Duration 525 ms by bot id=6864353709
372
+ INFO:root:Вера 883002227: В жизни бы не купил такое дорогое пиво... повседневные для жителей столицы вещи Да не повседневные они. Вон, у нас, когда родители приезжают, мы проводим им мощную культурную программу - ездим в горы, на океан, и т.д. Получается очень насыщенно. Но всё остальное время года мы это делаем намного реже. Повседневно - это метро, исторический центр (архитектура) и больший выбор всего (кнотеатров, театров, ВУЗов, магазинов, бизнесов). Ну и меньшая унылость.
373
+ INFO:aiogram.event:Update id=294508034 is handled. Duration 559 ms by bot id=6864353709
374
+ INFO:root:Вера 883002227: Это у тебя подгорает в одном месте, видимо перцем намазали....
375
+ INFO:aiogram.event:Update id=294508035 is handled. Duration 496 ms by bot id=6864353709
376
+ INFO:root:Вера 883002227: Уважаемый, ты реально глупый и не вкуриваешь, о чьих именно трусах идет речь? Или просто дурака валяешь?
377
+ INFO:aiogram.event:Update id=294508036 is handled. Duration 571 ms by bot id=6864353709
378
+ INFO:root:Вера 883002227 запустил бота
379
+ INFO:aiogram.event:Update id=294508037 is handled. Duration 196 ms by bot id=6864353709
380
+ INFO:root:Вера 883002227: Антонио, ты весь в красном!
381
+ INFO:aiogram.event:Update id=294508038 is handled. Duration 535 ms by bot id=6864353709
382
+ INFO:root:Вера 883002227: Уважаемый, ты реально глупый и не вкуриваешь, о чьих именно трусах идет речь? Или просто дурака валяешь?
383
+ INFO:aiogram.event:Update id=294508039 is handled. Duration 601 ms by bot id=6864353709
pages/1_policlinic.py CHANGED
@@ -8,6 +8,8 @@ import torch
8
  import numpy as np
9
  import matplotlib.pyplot as plt
10
  import time
 
 
11
 
12
  project_root = Path(__file__).resolve().parents[1]
13
  models_path = project_root / 'models'
@@ -15,10 +17,10 @@ sys.path.append(str(models_path))
15
  from models.model1.lstm_preprocessor import TextPreprocessorWord2Vec
16
  from models.model1.lstm_model import LSTMConcatAttention
17
 
18
- # Load the trained pipeline
 
19
  pipeline = joblib.load('models/model1/logistic_regression_pipeline.pkl')
20
 
21
- # Streamlit application
22
  st.title('Классификация отзывов на русском языке')
23
 
24
  input_text = st.text_area('Введите текст отзыва')
@@ -74,7 +76,27 @@ def plot_and_predict_lstm(input_text):
74
 
75
  return lstm_pred, plt
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  if st.button('Предсказать'):
 
78
  start_time_lr = time.time()
79
  prediction = pipeline.predict(pd.Series([input_text]))
80
  pred_probe = pipeline.predict_proba(pd.Series([input_text]))
@@ -88,7 +110,7 @@ if st.button('Предсказать'):
88
  time_lr = end_time_lr - start_time_lr
89
  st.write(f'**{predicted_class}** с вероятностью {pred_proba_rounded[0]}')
90
  st.write(f'Время выполнения расчетов {time_lr:.4f} секунд')
91
-
92
  start_time_lstm = time.time()
93
  lstm_pred, lstm_plot = plot_and_predict_lstm(input_text)
94
  if lstm_pred > 0.5:
@@ -102,20 +124,58 @@ if st.button('Предсказать'):
102
  st.write(f'Время выполнения расчетов {time_lstm:.4f} секунд')
103
  st.pyplot(lstm_plot)
104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
 
 
 
 
106
 
107
- st.write("# Информация об обучении модели логистической регрессии и tf-idf:")
108
- st.image(str(project_root / 'images/pipeline_logreg.png'))
109
  st.write("Модель обучалась на предсказание 1 класса")
110
  st.write("Размер датасета - 70597 текстов отзывов")
111
  st.write("Проведена предобработка текста")
112
 
 
 
 
 
113
  st.write("Метрики:")
114
  st.image(str(project_root / 'images/log_reg_metrics.png'))
115
 
116
  st.write("# Информация об обучении модели LSTM + Word2Vec + BahdanauAttention:")
117
  st.write("Время обучения модели - 10 эпох")
118
- st.write("Метрики на 10 эпохе:")
119
- st.write("Train f1: 0.95, Val f1: 0.93")
120
- st.write("Train accuracy: 0.94, Val accuracy: 0.92")
121
 
 
 
 
 
 
8
  import numpy as np
9
  import matplotlib.pyplot as plt
10
  import time
11
+ from transformers import AutoTokenizer, AutoModel
12
+ from models.model2.preprocess_text import TextPreprocessorBERT
13
 
14
  project_root = Path(__file__).resolve().parents[1]
15
  models_path = project_root / 'models'
 
17
  from models.model1.lstm_preprocessor import TextPreprocessorWord2Vec
18
  from models.model1.lstm_model import LSTMConcatAttention
19
 
20
+
21
+ # Модель логистической регрессии
22
  pipeline = joblib.load('models/model1/logistic_regression_pipeline.pkl')
23
 
 
24
  st.title('Классификация отзывов на русском языке')
25
 
26
  input_text = st.text_area('Введите текст отзыва')
 
76
 
77
  return lstm_pred, plt
78
 
79
+ #БЕРТа
80
+ @st.cache_resource
81
+ def load_logreg_model():
82
+ log_bert_path = models_path / 'model1' / 'clf.pkl'
83
+ return joblib.load(log_bert_path)
84
+
85
+ @st.cache_resource
86
+ def load_rubert_model():
87
+ return AutoModel.from_pretrained('cointegrated/rubert-tiny2')
88
+
89
+ @st.cache_resource
90
+ def load_tokenizer():
91
+ return AutoTokenizer.from_pretrained('cointegrated/rubert-tiny2')
92
+
93
+ logreg_model = load_logreg_model()
94
+ rubert_model = load_rubert_model()
95
+ tokenizer = load_tokenizer()
96
+
97
+
98
  if st.button('Предсказать'):
99
+ #LOGREG
100
  start_time_lr = time.time()
101
  prediction = pipeline.predict(pd.Series([input_text]))
102
  pred_probe = pipeline.predict_proba(pd.Series([input_text]))
 
110
  time_lr = end_time_lr - start_time_lr
111
  st.write(f'**{predicted_class}** с вероятностью {pred_proba_rounded[0]}')
112
  st.write(f'Время выполнения расчетов {time_lr:.4f} секунд')
113
+ #LSTM
114
  start_time_lstm = time.time()
115
  lstm_pred, lstm_plot = plot_and_predict_lstm(input_text)
116
  if lstm_pred > 0.5:
 
124
  st.write(f'Время выполнения расчетов {time_lstm:.4f} секунд')
125
  st.pyplot(lstm_plot)
126
 
127
+ #BERT
128
+ start_time_bert = time.time()
129
+ # Применяем предобработку
130
+ preprocessor = TextPreprocessorBERT()
131
+ preprocessed_text = preprocessor.transform(input_text)
132
+ tokens = tokenizer.encode_plus(
133
+ preprocessed_text,
134
+ add_special_tokens=True,
135
+ truncation=True,
136
+ max_length=64,
137
+ padding='max_length',
138
+ return_tensors='pt'
139
+ )
140
+ input_ids = tokens['input_ids'].to(device)
141
+ attention_mask = tokens['attention_mask'].to(device)
142
+ with torch.no_grad():
143
+ outputs = rubert_model(input_ids=input_ids, attention_mask=attention_mask)
144
+ embeddings = outputs.last_hidden_state[:, 0, :].cpu().numpy()
145
+ prediction = logreg_model.predict(embeddings)
146
+ pred_prob = logreg_model.predict_proba(embeddings)
147
+ pred_prob_rounded = np.round(pred_prob, 2).flatten()
148
+ if prediction[0] == 0:
149
+ predicted_class = "POSITIVE"
150
+ else:
151
+ predicted_class = "NEGATIVE"
152
+ end_time_bert = time.time()
153
+ bert_time = end_time_bert - start_time_bert
154
+ st.subheader('Предсказанный класс с помощью модели Rubert-tiny2 + Logistic Regression:')
155
+ st.write(f'**{predicted_class}**, с вероятностью {np.round(pred_prob_rounded[0], 2)}')
156
+ st.write(f'Время выполнения: {bert_time:.4f} секунд')
157
+
158
 
159
+ st.write("# Сравнение характеристик моделей:")
160
+ df = pd.read_csv(str(project_root /'images/full_metrics.csv'))
161
+ st.write(df)
162
 
163
+ st.write("# Информация о датасете:")
 
164
  st.write("Модель обучалась на предсказание 1 класса")
165
  st.write("Размер датасета - 70597 текстов отзывов")
166
  st.write("Проведена предобработка текста")
167
 
168
+ st.write("# Информация об обучении модели логистической регрессии и tf-idf:")
169
+ st.image(str(project_root / 'images/pipeline_logreg.png'))
170
+
171
+
172
  st.write("Метрики:")
173
  st.image(str(project_root / 'images/log_reg_metrics.png'))
174
 
175
  st.write("# Информация об обучении модели LSTM + Word2Vec + BahdanauAttention:")
176
  st.write("Время обучения модели - 10 эпох")
 
 
 
177
 
178
+
179
+ st.write("# Информация об обучении модели Rubert-tiny2 + Logistic Regression:")
180
+ st.write("Использовалась Rubert-tiny2 для получения эмбеддингов и подаче�� их логистической регрессии")
181
+ st.image(str(project_root / 'images/last_mode1_metric.png'), width=1000)