Spaces:
Runtime error
Runtime error
from joblib import load | |
### pip install faiss-cpu | |
import faiss | |
### pip install datasets | |
from datasets import Dataset | |
import torch | |
import pandas as pd | |
import streamlit as st | |
device = 'cpu' | |
### подгрузка всех компонентов - модель, токенайзер и датасет с эмбеддингами | |
embeddings_dataset = load('./embeddings_dataset.joblib') | |
tokenizer = load('./tokenizer.joblib') | |
model = load('./model.joblib') | |
### функция возвращающая от БЕРТа только [CLS] опиывающий общий смысл всего предложения | |
def embed_bert_cls(text, model, tokenizer): | |
t = tokenizer(text, padding=True, truncation=True, return_tensors='pt') | |
with torch.no_grad(): | |
model_output = model(**{k: v.to(device) for k, v in t.items()}) | |
embeddings = model_output.last_hidden_state[:, 0, :] | |
embeddings = torch.nn.functional.normalize(embeddings) | |
return embeddings[0].cpu().numpy() | |
### функция ниже отдает готовый датасет с рекомендациями книг | |
def recommend(input_string,n_neighbors=5): | |
### input_string - то, что вводит пользователь в аннотации, эмбеддинг пользовательского текста | |
question_embedding = embed_bert_cls([input_string], model, tokenizer) | |
### n_neighbors - число предлагаемых системой книг, вводит пользователь, | |
### поиск похожих книг по запросу | |
scores, samples = embeddings_dataset.get_nearest_examples( | |
"embeddings", question_embedding, k=n_neighbors | |
) | |
### для корректной работы требуется формат таблиц huggingface, поэтому в конце | |
### происходит перевод в пандас для удобства | |
samples_df = pd.DataFrame.from_dict(samples) | |
samples_df["scores"] = scores | |
samples_df.sort_values("scores", ascending=False, inplace=True) | |
return samples_df | |
### конечный датасет: samples_df | |
user_input = st.text_input('Your text here:', ) | |
number = st.number_input('Insert a number', min_value = 1, max_value = 5, value = 3) | |
if len(user_input) > 1: | |
st.write(recommend(user_input, number)) |