MARI-posa commited on
Commit
7f410f4
1 Parent(s): a3d3d87

Update stri.py

Browse files
Files changed (1) hide show
  1. stri.py +31 -40
stri.py CHANGED
@@ -4,6 +4,7 @@ import numpy as np
4
  import pandas as pd
5
  from transformers import AutoTokenizer, AutoModel
6
  import re
 
7
 
8
  st.title("Книжные рекомендации")
9
 
@@ -37,47 +38,37 @@ annot = books['annotation']
37
 
38
  # Получение эмбеддингов аннотаций каждой книги в датасете
39
  max_len = 128
40
- token_annot = annot.apply(lambda x: tokenizer.encode(x, add_special_tokens=True,
41
- truncation=True, max_length=max_len))
42
-
43
- padded = np.array([i + [0] * (max_len - len(i)) for i in token_annot.values]) # заполним недостающую длину нулями
44
- attention_mask = np.where(padded != 0, 1, 0) # создадим маску, отметим где есть значения а где пустота
45
- # Переведем numpy массивы в тензоры PyTorch
46
- input_ids = torch.tensor(padded, dtype=torch.long)
47
- attention_mask = torch.tensor(attention_mask, dtype=torch.long)
48
-
49
- book_embeddings = []
50
- for inputs, attention_masks in zip(input_ids, attention_mask):
51
- with torch.no_grad():
52
- book_embedding = model(inputs.unsqueeze(0), attention_mask=attention_masks.unsqueeze(0))
53
- book_embedding = book_embedding[0][:, 0, :]#.detach().cpu().numpy()
54
- book_embeddings.append(np.squeeze(book_embedding))
55
 
56
  # Определение запроса пользователя
57
  query = st.text_input("Введите запрос")
58
- query_tokens = tokenizer.encode(query, add_special_tokens=True,
59
- truncation=True, max_length=max_len)
60
-
61
- query_padded = np.array(query_tokens + [0] * (max_len - len(query_tokens)))
62
- query_mask = np.where(query_padded != 0, 1, 0)
63
-
64
- # Переведем numpy массивы в тензоры PyTorch
65
- query_padded = torch.tensor(query_padded, dtype=torch.long)
66
- query_mask = torch.tensor(query_mask, dtype=torch.long)
67
 
68
- with torch.no_grad():
69
- query_embedding = model(query_padded.unsqueeze(0), query_mask.unsqueeze(0))
70
- query_embedding = query_embedding[0][:, 0, :].detach().cpu().numpy()
71
-
72
- # Вычисление косинусного расстояния между эмбеддингом запроса и каждой аннотацией
73
- cosine_similarities = torch.nn.functional.cosine_similarity(
74
- query_embedding.squeeze(0),
75
- torch.stack(book_embeddings)
76
- )
77
-
78
- cosine_similarities = cosine_similarities.numpy()
79
-
80
- indices = np.argsort(cosine_similarities)[::-1] # Сортировка по убыванию
81
-
82
- for i in indices[:10]:
83
- st.write(books['title'][i])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  import pandas as pd
5
  from transformers import AutoTokenizer, AutoModel
6
  import re
7
+ import pickle
8
 
9
  st.title("Книжные рекомендации")
10
 
 
38
 
39
  # Получение эмбеддингов аннотаций каждой книги в датасете
40
  max_len = 128
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
 
42
  # Определение запроса пользователя
43
  query = st.text_input("Введите запрос")
 
 
 
 
 
 
 
 
 
44
 
45
+ if st.button('**Generating recommendations**'):
46
+ with open("book_embeddings.pkl", "rb") as f:
47
+ book_embeddings = pickle.load(f)
48
+
49
+ query_tokens = tokenizer.encode(query, add_special_tokens=True,
50
+ truncation=True, max_length=max_len)
51
+
52
+ query_padded = np.array(query_tokens + [0] * (max_len - len(query_tokens)))
53
+ query_mask = np.where(query_padded != 0, 1, 0)
54
+
55
+ # Переведем numpy массивы в тензоры PyTorch
56
+ query_padded = torch.tensor(query_padded, dtype=torch.long)
57
+ query_mask = torch.tensor(query_mask, dtype=torch.long)
58
+
59
+ with torch.no_grad():
60
+ query_embedding = model(query_padded.unsqueeze(0), query_mask.unsqueeze(0))
61
+ query_embedding = query_embedding[0][:, 0, :]
62
+
63
+ # Вычисление косинусного расстояния между эмбеддингом запроса и каждой аннотацией
64
+ cosine_similarities = torch.nn.functional.cosine_similarity(
65
+ query_embedding.squeeze(0),
66
+ torch.stack(book_embeddings)
67
+ )
68
+
69
+ cosine_similarities = cosine_similarities.numpy()
70
+
71
+ indices = np.argsort(cosine_similarities)[::-1] # Сортировка по убыванию
72
+
73
+ for i in indices[:10]:
74
+ st.write(books['title'][i])