2024-05-25 17:38:24 +04:00
|
|
|
|
import pickle
|
|
|
|
|
import numpy as np
|
|
|
|
|
import tensorflow as tf
|
|
|
|
|
from keras.src.legacy.preprocessing.text import Tokenizer
|
|
|
|
|
from keras.src.utils import pad_sequences
|
|
|
|
|
|
|
|
|
|
# Загрузка модели
|
|
|
|
|
model = tf.keras.models.load_model('best_model_lstm_negative.keras')
|
|
|
|
|
|
|
|
|
|
# Загрузка токенизатора
|
|
|
|
|
with open('tokenizer_lstm_lstm_negative.pickle', 'rb') as handle:
|
|
|
|
|
tokenizer = pickle.load(handle)
|
|
|
|
|
|
2024-05-27 23:52:33 +04:00
|
|
|
|
# Загрузка названий классов
|
|
|
|
|
with open('class_names_lstm_negative.txt', 'r', encoding='utf-8') as file:
|
|
|
|
|
class_names = [line.strip() for line in file.readlines()]
|
|
|
|
|
|
2024-05-25 17:38:24 +04:00
|
|
|
|
def preprocess_text(text: str):
|
|
|
|
|
# Токенизация текста
|
|
|
|
|
sequences = tokenizer.texts_to_sequences([text])
|
|
|
|
|
# Преобразование последовательностей в фиксированной длины
|
|
|
|
|
padded_sequences = pad_sequences(sequences, maxlen=90) # 90 - длина последовательности, используемая при обучении
|
|
|
|
|
return padded_sequences
|
|
|
|
|
|
|
|
|
|
def predict_answer(question: str) -> str:
|
|
|
|
|
# Предобработка вопроса
|
|
|
|
|
print("Вопрос:", question)
|
|
|
|
|
input_data = preprocess_text(question)
|
|
|
|
|
print("Предобработанные данные:", input_data)
|
|
|
|
|
# Предсказание
|
|
|
|
|
prediction = model.predict(input_data)
|
|
|
|
|
print("Предсказание:", prediction)
|
2024-05-27 23:52:33 +04:00
|
|
|
|
# Определение индекса класса с наибольшей вероятностью
|
|
|
|
|
predicted_index = np.argmax(prediction[0])
|
|
|
|
|
# Получение имени класса
|
|
|
|
|
predicted_class = class_names[predicted_index]
|
|
|
|
|
print("Предсказанный класс:", predicted_class)
|
|
|
|
|
return predicted_class # Возвращаем имя предсказанного класса
|