Spaces:
Runtime error
Runtime error
import streamlit as st | |
import torch | |
import numpy as np | |
import pandas as pd | |
from transformers import AutoTokenizer, AutoModel | |
st.title("Книжные рекомендации") | |
# Загрузка модели и токенизатора | |
model_name = "cointegrated/rubert-tiny2" | |
tokenizer = AutoTokenizer.from_pretrained(model_name) | |
model = AutoModel.from_pretrained(model_name, output_hidden_states=True) | |
# Загрузка датасета и аннотаций к книгам | |
books = pd.read_csv('book_train.csv') | |
annot = books['annotation'] | |
# Предобработка аннотаций и получение эмбеддингов | |
embeddings = [] | |
for annotation in annot: | |
annotation_tokens = tokenizer.encode_plus( | |
annotation, | |
add_special_tokens=True, | |
max_length=128, | |
pad_to_max_length=True, | |
return_tensors='pt' | |
) | |
with torch.no_grad(): | |
outputs = model(**annotation_tokens) | |
hidden_states = outputs.hidden_states | |
last_hidden_state = hidden_states[-2] | |
embeddings.append(torch.mean(last_hidden_state, dim=1).squeeze()) | |
# Получение эмбеддинга запроса от пользователя | |
query = st.text_input("Введите запрос") | |
query_tokens = tokenizer.encode_plus( | |
query, | |
add_special_tokens=True, | |
max_length=128, | |
pad_to_max_length=True, | |
return_tensors='pt' | |
) | |
# Проверка, был ли введен запрос | |
if query: | |
with torch.no_grad(): | |
query_outputs = model(**query_tokens) | |
query_hidden_states = query_outputs.hidden_states | |
query_last_hidden_state = query_hidden_states[-2] | |
query_embedding = torch.mean(query_last_hidden_state, dim=1).squeeze() | |
# Вычисление косинусного расстояния между эмбеддингом запроса и каждой аннотацией | |
cosine_similarities = torch.nn.functional.cosine_similarity( | |
query_embedding.unsqueeze(0), | |
torch.stack(embeddings) | |
) | |
cosine_similarities = cosine_similarities.numpy() | |
indices = np.argsort(cosine_similarities)[::-1] | |
st.header("Рекомендации") | |
for i in indices[:10]: | |
st.write(books['title'][i]) | |