OverSide88 commited on
Commit
9c52fcd
1 Parent(s): 3d176d0

Upload rubert.ipynb

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