File size: 26,217 Bytes
9c52fcd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/valeriaalesnikova/Desktop/bootcamp/ghjtrn/smart_book_search/.venv/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "from transformers import AutoTokenizer, AutoModel\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.metrics.pairwise import cosine_similarity\n",
    "import faiss\n",
    "from sentence_transformers import util"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Загрузка модели и токенизатора BERT\n",
    "model_name = \"cointegrated/rubert-tiny2\"\n",
    "tokenizer = AutoTokenizer.from_pretrained(model_name)\n",
    "model = AutoModel.from_pretrained(model_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>page_url</th>\n",
       "      <th>image_url</th>\n",
       "      <th>author</th>\n",
       "      <th>title</th>\n",
       "      <th>annotation</th>\n",
       "      <th>cleaned_text</th>\n",
       "      <th>lemmatized_text</th>\n",
       "      <th>cleaned_title</th>\n",
       "      <th>text_length</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>https://www.biblio-globus.ru//product/10957168</td>\n",
       "      <td>https://static1.bgshop.ru/imagehandler.ashx?fi...</td>\n",
       "      <td>Маринина А.</td>\n",
       "      <td>Ричард Третий и Генрих Восьмой глазами Шекспира</td>\n",
       "      <td>Расследование жизни и деяний двух самых опороч...</td>\n",
       "      <td>расследование жизни деяний самых опороченных в...</td>\n",
       "      <td>расследование жизнь деяние самый опорочить воз...</td>\n",
       "      <td>ричард  третий и  генрих  восьмой глазами  ше...</td>\n",
       "      <td>1046</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>https://www.biblio-globus.ru//product/10997075</td>\n",
       "      <td>https://static1.bgshop.ru/imagehandler.ashx?fi...</td>\n",
       "      <td>Михалкова Е.И.</td>\n",
       "      <td>Знак истинного пути</td>\n",
       "      <td>Сыщики Макар Илюшин и Сергей Бабкин расследуют...</td>\n",
       "      <td>сыщики макар илюшин сергей бабкин расследуют п...</td>\n",
       "      <td>сыщик макар илюшин сергей бабкин расследовать ...</td>\n",
       "      <td>знак истинного пути</td>\n",
       "      <td>242</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>https://www.biblio-globus.ru//product/10941892</td>\n",
       "      <td>https://static1.bgshop.ru/imagehandler.ashx?fi...</td>\n",
       "      <td>Маринина  А.</td>\n",
       "      <td>Генрих Шестой глазами Шекспира</td>\n",
       "      <td>Генрих Шестой – самая трагическая фигура на ан...</td>\n",
       "      <td>генрих самая трагическая фигура английском пре...</td>\n",
       "      <td>генрих самый трагический фигура английский пре...</td>\n",
       "      <td>генрих  шестой глазами  шекспира</td>\n",
       "      <td>1005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>https://www.biblio-globus.ru//product/10978116</td>\n",
       "      <td>https://static1.bgshop.ru/imagehandler.ashx?fi...</td>\n",
       "      <td>Маринина А.</td>\n",
       "      <td>Иоанн Безземельный, Эдуард Третий и Ричард Вто...</td>\n",
       "      <td>Истории трех знаменитых королей под одной обло...</td>\n",
       "      <td>истории трех знаменитых королей обложкой посво...</td>\n",
       "      <td>история три знаменитый король обложка посвоему...</td>\n",
       "      <td>иоанн  безземельный   эдуард  третий и  ричар...</td>\n",
       "      <td>1050</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>https://www.biblio-globus.ru//product/10845007</td>\n",
       "      <td>https://static1.bgshop.ru/extraimagehandler.as...</td>\n",
       "      <td>Маринина А.</td>\n",
       "      <td>Шпаргалка для ленивых любителей истории. Корол...</td>\n",
       "      <td>Первая книга в необычном для Александры Марини...</td>\n",
       "      <td>первая необычном александры марининой жанре по...</td>\n",
       "      <td>первый необычный александра маринин жанр попул...</td>\n",
       "      <td>шпаргалка для ленивых любителей истории.  кор...</td>\n",
       "      <td>598</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3590</th>\n",
       "      <td>3935</td>\n",
       "      <td>Преступления продолжаются\\</td>\n",
       "      <td>и количество трупов в виде мумий растет. Элиз...</td>\n",
       "      <td>которая повлекла за собой нечто более зловещее\\</td>\n",
       "      <td>чем она могла себе представить. Ее репортажи ...</td>\n",
       "      <td>и каждая новая догадка обличает богатых и вли...</td>\n",
       "      <td>новая догадка обличает богатых влиятельных гра...</td>\n",
       "      <td>новый догадка обличать богатый влиятельный гра...</td>\n",
       "      <td>чем она могла себе представить.  ее репортажи...</td>\n",
       "      <td>144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3591</th>\n",
       "      <td>3953</td>\n",
       "      <td>https://www.biblio-globus.ru//product/10958255</td>\n",
       "      <td>https://static1.bgshop.ru/imagehandler.ashx?fi...</td>\n",
       "      <td>Кинг С.</td>\n",
       "      <td>Извлечение троих: из цикла \\\"Темная Башня\\\"</td>\n",
       "      <td>Цикл «Темная Башня» — это opus magnum — лучшая...</td>\n",
       "      <td>цикл темная башня лучшая стивена кинга история...</td>\n",
       "      <td>цикл тёмный башня хороший стивен кинг история ...</td>\n",
       "      <td>извлечение троих: из цикла \\\" темная  башня\\\"</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3592</th>\n",
       "      <td>3954</td>\n",
       "      <td>Юный Роланд — последний благородный рыцарь в м...</td>\n",
       "      <td>«сдвинувшемся с места». Ему во что бы то ни с...</td>\n",
       "      <td>краеугольный камень мироздания. Но прежде Рол...</td>\n",
       "      <td>как говорят карты Таро\\</td>\n",
       "      <td>в современную Америку на поиски помощников. В...</td>\n",
       "      <td>современную америку поиски помощников смогут п...</td>\n",
       "      <td>современный америка поиск помощник смочь проти...</td>\n",
       "      <td>как говорят карты  таро\\</td>\n",
       "      <td>92</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3593</th>\n",
       "      <td>3962</td>\n",
       "      <td>Антиквар изучает рукопись\\</td>\n",
       "      <td>а в городе происходят загадочные и порой откр...</td>\n",
       "      <td>оживают обезглавленные мертвецы\\</td>\n",
       "      <td>улицы наполняются толпами зомби. И похоже на то\\</td>\n",
       "      <td>что главной целью нечисти становится именно К...</td>\n",
       "      <td>главной целью нечисти становится кирилл неболь...</td>\n",
       "      <td>главный цель нечисть становиться кирилл неболь...</td>\n",
       "      <td>улицы наполняются толпами зомби.  и похоже на...</td>\n",
       "      <td>181</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3594</th>\n",
       "      <td>3972</td>\n",
       "      <td>Четверо подростков из небольшого городишка реш...</td>\n",
       "      <td>которое хочет уничтожить все живое и возродит...</td>\n",
       "      <td>старше самой Евы. И именно ребятам теперь пре...</td>\n",
       "      <td>несмотря на их возраст и ужасы\\</td>\n",
       "      <td>противостоящие им. На карту поставлено все: ж...</td>\n",
       "      <td>противостоящие карту поставлено жизни души чел...</td>\n",
       "      <td>противостоящий карта поставить жизнь душа чело...</td>\n",
       "      <td>несмотря на их возраст и ужасы\\</td>\n",
       "      <td>89</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3595 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      Unnamed: 0                                           page_url  \\\n",
       "0              0     https://www.biblio-globus.ru//product/10957168   \n",
       "1              1     https://www.biblio-globus.ru//product/10997075   \n",
       "2              2     https://www.biblio-globus.ru//product/10941892   \n",
       "3              3     https://www.biblio-globus.ru//product/10978116   \n",
       "4              4     https://www.biblio-globus.ru//product/10845007   \n",
       "...          ...                                                ...   \n",
       "3590        3935                         Преступления продолжаются\\   \n",
       "3591        3953     https://www.biblio-globus.ru//product/10958255   \n",
       "3592        3954  Юный Роланд — последний благородный рыцарь в м...   \n",
       "3593        3962                         Антиквар изучает рукопись\\   \n",
       "3594        3972  Четверо подростков из небольшого городишка реш...   \n",
       "\n",
       "                                              image_url  \\\n",
       "0     https://static1.bgshop.ru/imagehandler.ashx?fi...   \n",
       "1     https://static1.bgshop.ru/imagehandler.ashx?fi...   \n",
       "2     https://static1.bgshop.ru/imagehandler.ashx?fi...   \n",
       "3     https://static1.bgshop.ru/imagehandler.ashx?fi...   \n",
       "4     https://static1.bgshop.ru/extraimagehandler.as...   \n",
       "...                                                 ...   \n",
       "3590   и количество трупов в виде мумий растет. Элиз...   \n",
       "3591  https://static1.bgshop.ru/imagehandler.ashx?fi...   \n",
       "3592   «сдвинувшемся с места». Ему во что бы то ни с...   \n",
       "3593   а в городе происходят загадочные и порой откр...   \n",
       "3594   которое хочет уничтожить все живое и возродит...   \n",
       "\n",
       "                                                 author  \\\n",
       "0                                           Маринина А.   \n",
       "1                                        Михалкова Е.И.   \n",
       "2                                          Маринина  А.   \n",
       "3                                           Маринина А.   \n",
       "4                                           Маринина А.   \n",
       "...                                                 ...   \n",
       "3590    которая повлекла за собой нечто более зловещее\\   \n",
       "3591                                            Кинг С.   \n",
       "3592   краеугольный камень мироздания. Но прежде Рол...   \n",
       "3593                   оживают обезглавленные мертвецы\\   \n",
       "3594   старше самой Евы. И именно ребятам теперь пре...   \n",
       "\n",
       "                                                  title  \\\n",
       "0       Ричард Третий и Генрих Восьмой глазами Шекспира   \n",
       "1                                   Знак истинного пути   \n",
       "2                        Генрих Шестой глазами Шекспира   \n",
       "3     Иоанн Безземельный, Эдуард Третий и Ричард Вто...   \n",
       "4     Шпаргалка для ленивых любителей истории. Корол...   \n",
       "...                                                 ...   \n",
       "3590   чем она могла себе представить. Ее репортажи ...   \n",
       "3591        Извлечение троих: из цикла \\\"Темная Башня\\\"   \n",
       "3592                            как говорят карты Таро\\   \n",
       "3593   улицы наполняются толпами зомби. И похоже на то\\   \n",
       "3594                    несмотря на их возраст и ужасы\\   \n",
       "\n",
       "                                             annotation  \\\n",
       "0     Расследование жизни и деяний двух самых опороч...   \n",
       "1     Сыщики Макар Илюшин и Сергей Бабкин расследуют...   \n",
       "2     Генрих Шестой – самая трагическая фигура на ан...   \n",
       "3     Истории трех знаменитых королей под одной обло...   \n",
       "4     Первая книга в необычном для Александры Марини...   \n",
       "...                                                 ...   \n",
       "3590   и каждая новая догадка обличает богатых и вли...   \n",
       "3591  Цикл «Темная Башня» — это opus magnum — лучшая...   \n",
       "3592   в современную Америку на поиски помощников. В...   \n",
       "3593   что главной целью нечисти становится именно К...   \n",
       "3594   противостоящие им. На карту поставлено все: ж...   \n",
       "\n",
       "                                           cleaned_text  \\\n",
       "0     расследование жизни деяний самых опороченных в...   \n",
       "1     сыщики макар илюшин сергей бабкин расследуют п...   \n",
       "2     генрих самая трагическая фигура английском пре...   \n",
       "3     истории трех знаменитых королей обложкой посво...   \n",
       "4     первая необычном александры марининой жанре по...   \n",
       "...                                                 ...   \n",
       "3590  новая догадка обличает богатых влиятельных гра...   \n",
       "3591  цикл темная башня лучшая стивена кинга история...   \n",
       "3592  современную америку поиски помощников смогут п...   \n",
       "3593  главной целью нечисти становится кирилл неболь...   \n",
       "3594  противостоящие карту поставлено жизни души чел...   \n",
       "\n",
       "                                        lemmatized_text  \\\n",
       "0     расследование жизнь деяние самый опорочить воз...   \n",
       "1     сыщик макар илюшин сергей бабкин расследовать ...   \n",
       "2     генрих самый трагический фигура английский пре...   \n",
       "3     история три знаменитый король обложка посвоему...   \n",
       "4     первый необычный александра маринин жанр попул...   \n",
       "...                                                 ...   \n",
       "3590  новый догадка обличать богатый влиятельный гра...   \n",
       "3591  цикл тёмный башня хороший стивен кинг история ...   \n",
       "3592  современный америка поиск помощник смочь проти...   \n",
       "3593  главный цель нечисть становиться кирилл неболь...   \n",
       "3594  противостоящий карта поставить жизнь душа чело...   \n",
       "\n",
       "                                          cleaned_title  text_length  \n",
       "0      ричард  третий и  генрих  восьмой глазами  ше...         1046  \n",
       "1                                   знак истинного пути          242  \n",
       "2                      генрих  шестой глазами  шекспира         1005  \n",
       "3      иоанн  безземельный   эдуард  третий и  ричар...         1050  \n",
       "4      шпаргалка для ленивых любителей истории.  кор...          598  \n",
       "...                                                 ...          ...  \n",
       "3590   чем она могла себе представить.  ее репортажи...          144  \n",
       "3591      извлечение троих: из цикла \\\" темная  башня\\\"           85  \n",
       "3592                           как говорят карты  таро\\           92  \n",
       "3593   улицы наполняются толпами зомби.  и похоже на...          181  \n",
       "3594                    несмотря на их возраст и ужасы\\           89  \n",
       "\n",
       "[3595 rows x 10 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "books = pd.read_csv('/Users/valeriaalesnikova/Desktop/bootcamp/ghjtrn/smart_book_search/data/data_withot_loveread.csv')\n",
    "books"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Максимальная длина текста\n",
    "MAX_LEN = 300"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Функция для встраивания текста с использованием BERT\n",
    "def embed_bert_cls(text, model=model, tokenizer=tokenizer):\n",
    "    t = tokenizer(text,\n",
    "                  padding=True,\n",
    "                  truncation=True,\n",
    "                  return_tensors='pt',\n",
    "                  max_length=MAX_LEN)\n",
    "    with torch.no_grad():\n",
    "        model_output = model(**{k: v.to(model.device) for k, v in t.items()})\n",
    "    embeddings = model_output.last_hidden_state[:, 0, :]\n",
    "    embeddings = torch.nn.functional.normalize(embeddings)\n",
    "    return embeddings[0].cpu().squeeze()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Функция для обработки текста, чтобы все значения были строками\n",
    "def preprocess_text(text):\n",
    "    if isinstance(text, str):\n",
    "        return text\n",
    "    elif pd.isna(text):\n",
    "        return \"\"\n",
    "    else:\n",
    "        return str(text)\n",
    "\n",
    "# Применение функции к колонке 'annotation'\n",
    "books['lemmatized_text'] = books['lemmatized_text'].apply(preprocess_text)\n",
    "\n",
    "# Вычисление векторов для всех текстов в DataFrame\n",
    "embeddings = []\n",
    "for text in books['lemmatized_text']:  # Предполагаем, что тексты находятся в колонке 'annotation'\n",
    "    embedding = embed_bert_cls(text)\n",
    "    embeddings.append(embedding.numpy())\n",
    "\n",
    "# Преобразование списка векторов в массив numpy\n",
    "embeddings_array = np.stack(embeddings)\n",
    "\n",
    "# Сохранение векторов в текстовый файл\n",
    "np.savetxt('embeddings.txt', embeddings_array)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Венчание со страхом\n",
      "Фартовый город\n",
      "Ловцы черных душ. Дело глазника\n",
      "Убийство на улице Роз\n",
      "Апология здравого смысла\n"
     ]
    }
   ],
   "source": [
    "# Загрузка предварительно вычисленных векторов\n",
    "embeddings = np.loadtxt('embeddings.txt')\n",
    "embeddings_tensor = [torch.tensor(embedding) for embedding in embeddings]\n",
    "\n",
    "# Создание индекса Faiss\n",
    "embeddings_matrix = np.stack(embeddings)\n",
    "index = faiss.IndexFlatIP(embeddings_matrix.shape[1])\n",
    "index.add(embeddings_matrix)\n",
    "\n",
    "# Текст запроса\n",
    "text = 'Между сыщиком и преступником начинается жесткая игра'\n",
    "\n",
    "# Встраивание запроса и поиск ближайших векторов с использованием Faiss\n",
    "query_embedding = embed_bert_cls(text)\n",
    "query_embedding = query_embedding.numpy().astype('float32')\n",
    "k, indices = index.search(np.expand_dims(query_embedding, axis=0), 5)\n",
    "\n",
    "# Вывод результатов\n",
    "for i in indices[0]:\n",
    "    print(books['title'][i])\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}