Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| st.set_page_config(page_title="FindMyBook", page_icon="📚", menu_items=None, initial_sidebar_state="auto") | |
| import matplotlib.pyplot as plt | |
| import pandas as pd | |
| import numpy as np | |
| import csv | |
| from joblib import load | |
| from transformers import AutoTokenizer, AutoModel | |
| from faiss_file import model, tokenizer, embeddings_dataset, embed_bert_cls, recommend | |
| # Модель, токенайзер, датасет, kmeans, функция рекомендаций | |
| device = 'cpu' | |
| #tokenizer_k = AutoTokenizer.from_pretrained("cointegrated/rubert-tiny") | |
| #model_k = AutoModel.from_pretrained("cointegrated/rubert-tiny") | |
| kmeans = load('kmeans.joblib') | |
| emb = load('final_emb.joblib') | |
| def recomendation(input): | |
| user_input = embed_bert_cls(input, model, tokenizer)#embed_bert_cls(input, model_k, tokenizer_k) | |
| label = kmeans.predict(user_input.reshape(1, -1))[0] | |
| sample_df = emb[emb['labels'] == label].copy() | |
| sample_df['cosine'] = sample_df['embeddings'].apply(lambda x: np.dot(x, user_input) / (np.linalg.norm(x) * np.linalg.norm(user_input))) | |
| return sample_df.sort_values('cosine', ascending=False) | |
| st.title('Умный поиск книг') | |
| with st.sidebar: | |
| st.markdown('Добро пожаловать в мир **FindMyBook** - самого умного поисковика книг! Это как твой личный библиотекарь, который знает все о тебе и твоих предпочтениях в литературе! Это не просто обычный поисковик, который ищет книги по авторам или названиям, это настоящий литературный детектив, который проникает в глубь содержания книг и помогает найти именно те, которые оставят неизгладимое впечатление.') | |
| st.markdown('**FindMyBook** работает на основе передовых алгоритмов искусственного интеллекта, которые позволяют ему анализировать содержание книг и находить связи между ними. Этот поисковик сможет найти книгу, которая понравится именно тебе, учитывая твои предпочтения и интересы.') | |
| st.markdown('Не нужно тратить время на бесконечный поиск книг в огромных онлайн-библиотеках. Просто введи тему, которая тебя интересует, и **FindMyBook** уже начнет искать книги, которые подходят именно тебе!') | |
| user_prompt = st.text_area(label='Введите запрос:', placeholder="Хочу прочитать о...", height=200) | |
| books_per_page = st.number_input('Количество рекомендаций:', min_value=1, max_value=5, value=3) | |
| button = st.button("Найти") | |
| tab1, tab2 = st.tabs(["Faiss Search", "K-Mean"]) | |
| with tab1: | |
| if button and len(user_prompt) > 1: | |
| book_recs = recommend(user_prompt, books_per_page) | |
| for i in range(books_per_page): | |
| col1, col2 = st.columns([2,7]) | |
| with col1: | |
| image = book_recs['image_url'].iloc[i] | |
| st.image(image) | |
| with col2: | |
| title = book_recs['title'].iloc[i] | |
| try: | |
| author = book_recs['author'].iloc[i].rstrip() | |
| except: | |
| author = book_recs['author'].iloc[i] | |
| annotation = book_recs['annotation'].iloc[i] | |
| st.subheader(title) | |
| st.markdown(f'_{author}_') | |
| st.caption(annotation) | |
| st.markdown(f"[Подробнее...]({book_recs['page_url'].iloc[i]})") | |
| #st.divider() | |
| with tab2: | |
| #book_recs = recommend(user_prompt, books_per_page) | |
| if button and len(user_prompt) > 1: | |
| book_recs = recomendation(user_prompt) | |
| for i in range(books_per_page): | |
| col1, col2 = st.columns([2,7]) | |
| with col1: | |
| image = book_recs['image_url'].iloc[i] | |
| st.image(image) | |
| with col2: | |
| title = book_recs['title'].iloc[i] | |
| try: | |
| author = book_recs['author'].iloc[i].rstrip() | |
| except: | |
| author = book_recs['author'].iloc[i] | |
| annotation = book_recs['annotation'].iloc[i] | |
| st.subheader(title) | |
| st.markdown(f'_{author}_') | |
| st.caption(annotation) | |
| st.markdown(f"[Подробнее...]({book_recs['page_url'].iloc[i]})") | |
| #st.divider() | |