MARI-posa commited on
Commit
e79c988
1 Parent(s): 8e3efa7

Update stri.py

Browse files
Files changed (1) hide show
  1. stri.py +22 -25
stri.py CHANGED
@@ -22,55 +22,52 @@ books.drop_duplicates(subset='title', keep='first', inplace=True)
22
  books.reset_index(drop=True)
23
 
24
 
25
-
26
  def data_preprocessing(text: str) -> str:
27
- text = re.sub(r'http\S+', " ", text) # удаляем ссылки
28
- text = re.sub(r'@\w+',' ',text) # удаляем упоминания пользователей
29
- text = re.sub(r'#\w+', ' ', text) # удаляем хэштеги
30
- # text = re.sub(r'\d+', ' ', text) # удаляем числа
31
- # text = text.translate(str.maketrans('', '', string.punctuation))
32
- text = re.sub(r'<.*?>',' ', text) # html tags
33
- return
34
-
35
- for i in ['author', 'title', 'annotation']:
36
  books[i] = books[i].apply(data_preprocessing)
37
 
38
  annot = books['annotation']
39
 
40
  # Получение эмбеддингов аннотаций каждой книги в датасете
41
  max_len = 128
42
- token_annot = annot.apply(lambda x: tokenizer.encode(x, add_special_tokens=True, \
43
- truncation=True, max_length=max_len))
44
 
45
- padded = np.array([i + [0]*(max_len-len(i)) for i in token_annot.values]) # заполним недостающую длину нулями
46
- attention_mask = np.where(padded != 0, 1, 0) # создадим маску, отметим где есть значения а где пустота
47
  # Переведем numpy массивы в тензоры PyTorch
48
  input_ids = torch.tensor(padded, dtype=torch.long)
49
  attention_mask = torch.tensor(attention_mask, dtype=torch.long)
50
 
51
-
52
  book_embeddings = []
53
  for inputs, attention_masks in zip(input_ids, attention_mask):
54
- with torch.inference_mode():
55
  book_embedding = model(inputs.unsqueeze(0), attention_mask=attention_masks.unsqueeze(0))
56
- book_embedding = book_embedding[0][:,0,:] #.detach().cpu().numpy()
57
  book_embeddings.append(np.squeeze(book_embedding))
58
 
59
  # Определение запроса пользователя
60
  query = st.text_input("Введите запрос")
61
- query_tokens = tokenizer.encode(query, add_special_tokens=True, \
62
- truncation=True, max_length=max_len)
63
 
64
- query_padded = np.array(query_tokens + [0]*(max_len-len(query_tokens)))
65
  query_mask = np.where(query_padded != 0, 1, 0)
66
 
67
  # Переведем numpy массивы в тензоры PyTorch
68
  query_padded = torch.tensor(query_padded, dtype=torch.long)
69
  query_mask = torch.tensor(query_mask, dtype=torch.long)
70
 
71
- with torch.inference_mode():
72
- query_embedding = model(query_padded.unsqueeze(0), query_mask.unsqueeze(0)) #[0].squeeze()
73
- query_embedding = query_embedding[0][:,0,:] #.detach().cpu().numpy()
74
 
75
  # Вычисление косинусного расстояния между эмбеддингом запроса и каждой аннотацией
76
  cosine_similarities = torch.nn.functional.cosine_similarity(
@@ -80,7 +77,7 @@ cosine_similarities = torch.nn.functional.cosine_similarity(
80
 
81
  cosine_similarities = cosine_similarities.numpy()
82
 
83
- indices = np.argsort(cosine_similarities)[::-1] # Сортировка по убыванию
84
 
85
  for i in indices[:10]:
86
- st.write(books['title'][i])
 
22
  books.reset_index(drop=True)
23
 
24
 
 
25
  def data_preprocessing(text: str) -> str:
26
+ text = re.sub(r'http\S+', " ", text) # удаляем ссылки
27
+ text = re.sub(r'@\w+', ' ', text) # удаляем упоминания пользователей
28
+ text = re.sub(r'#\w+', ' ', text) # удаляем хэштеги
29
+ text = re.sub(r'<.*?>', ' ', text) # html tags
30
+ return text
31
+
32
+
33
+ for i in ['author', 'title', 'annotation']:
 
34
  books[i] = books[i].apply(data_preprocessing)
35
 
36
  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(
 
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])