python_for_analytics
/
2.1_LEC_numpy_and_Word2vec.ipynb
921 строка · 65.9 Кб
1{
2"cells": [
3{
4"cell_type": "markdown",
5"metadata": {},
6"source": [
7"# Немного про скорость\n",
8"- numpy\n",
9"- python\n",
10"- pandas"
11]
12},
13{
14"cell_type": "code",
15"execution_count": 1,
16"metadata": {},
17"outputs": [],
18"source": [
19"import numpy as np\n",
20"from random import random"
21]
22},
23{
24"cell_type": "markdown",
25"metadata": {},
26"source": [
27"### Задача 1\n",
28"Просто посчитать сумму чисел"
29]
30},
31{
32"cell_type": "code",
33"execution_count": 2,
34"metadata": {},
35"outputs": [],
36"source": [
37"data = list(range(10**6))"
38]
39},
40{
41"cell_type": "code",
42"execution_count": 3,
43"metadata": {},
44"outputs": [
45{
46"data": {
47"text/plain": [
48"[0, 1, 2, 3, 4]"
49]
50},
51"execution_count": 3,
52"metadata": {},
53"output_type": "execute_result"
54}
55],
56"source": [
57"data[:5]"
58]
59},
60{
61"cell_type": "markdown",
62"metadata": {},
63"source": [
64"Однократное вычисление"
65]
66},
67{
68"cell_type": "code",
69"execution_count": 4,
70"metadata": {
71"scrolled": true
72},
73"outputs": [
74{
75"name": "stdout",
76"output_type": "stream",
77"text": [
78"CPU times: user 97.1 ms, sys: 2.04 ms, total: 99.1 ms\n",
79"Wall time: 97.8 ms\n"
80]
81},
82{
83"data": {
84"text/plain": [
85"499999500000"
86]
87},
88"execution_count": 4,
89"metadata": {},
90"output_type": "execute_result"
91}
92],
93"source": [
94"%%time\n",
95"\n",
96"total_sum = 0\n",
97"\n",
98"for num in data:\n",
99" total_sum += num\n",
100" \n",
101"total_sum"
102]
103},
104{
105"cell_type": "code",
106"execution_count": 5,
107"metadata": {
108"scrolled": true
109},
110"outputs": [
111{
112"name": "stdout",
113"output_type": "stream",
114"text": [
115"CPU times: user 5.85 ms, sys: 58 µs, total: 5.9 ms\n",
116"Wall time: 5.92 ms\n"
117]
118},
119{
120"data": {
121"text/plain": [
122"499999500000"
123]
124},
125"execution_count": 5,
126"metadata": {},
127"output_type": "execute_result"
128}
129],
130"source": [
131"%%time\n",
132"\n",
133"sum(data)"
134]
135},
136{
137"cell_type": "markdown",
138"metadata": {},
139"source": [
140"Тест скорости"
141]
142},
143{
144"cell_type": "code",
145"execution_count": 6,
146"metadata": {
147"scrolled": false
148},
149"outputs": [
150{
151"name": "stdout",
152"output_type": "stream",
153"text": [
154"CPU times: user 5.49 s, sys: 24.4 ms, total: 5.52 s\n",
155"Wall time: 5.55 s\n"
156]
157}
158],
159"source": [
160"%%time\n",
161"\n",
162"for _ in range(10**3): # _ - это намек, что переменная в цикле НЕ используется\n",
163" result = sum(data)"
164]
165},
166{
167"cell_type": "code",
168"execution_count": 11,
169"metadata": {},
170"outputs": [
171{
172"data": {
173"text/plain": [
174"677"
175]
176},
177"execution_count": 11,
178"metadata": {},
179"output_type": "execute_result"
180}
181],
182"source": [
183"_"
184]
185},
186{
187"cell_type": "markdown",
188"metadata": {},
189"source": [
190"Еще вариант"
191]
192},
193{
194"cell_type": "code",
195"execution_count": 7,
196"metadata": {},
197"outputs": [
198{
199"name": "stdout",
200"output_type": "stream",
201"text": [
202"5.49 ms ± 111 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
203]
204}
205],
206"source": [
207"%%timeit\n",
208"\n",
209"sum(data)"
210]
211},
212{
213"cell_type": "markdown",
214"metadata": {},
215"source": [
216"Пробуем с массивом numpy"
217]
218},
219{
220"cell_type": "code",
221"execution_count": 8,
222"metadata": {},
223"outputs": [
224{
225"data": {
226"text/plain": [
227"array([0, 1, 2, 3, 4])"
228]
229},
230"execution_count": 8,
231"metadata": {},
232"output_type": "execute_result"
233}
234],
235"source": [
236"data = np.arange(10**6)\n",
237"data[:5]"
238]
239},
240{
241"cell_type": "markdown",
242"metadata": {},
243"source": [
244"# Профилировщик\n",
245"- PyCharm\n",
246"- VS code"
247]
248},
249{
250"cell_type": "code",
251"execution_count": 9,
252"metadata": {
253"scrolled": true
254},
255"outputs": [
256{
257"name": "stdout",
258"output_type": "stream",
259"text": [
260"CPU times: user 545 ms, sys: 3.46 ms, total: 549 ms\n",
261"Wall time: 549 ms\n"
262]
263}
264],
265"source": [
266"%%time\n",
267"\n",
268"for _ in range(10**3):\n",
269" result = np.sum(data)"
270]
271},
272{
273"cell_type": "code",
274"execution_count": 10,
275"metadata": {},
276"outputs": [
277{
278"ename": "KeyboardInterrupt",
279"evalue": "",
280"output_type": "error",
281"traceback": [
282"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
283"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
284"\u001b[0;32m<timed exec>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n",
285"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
286]
287}
288],
289"source": [
290"%%time\n",
291"\n",
292"for _ in range(10**3):\n",
293" result = sum(data)"
294]
295},
296{
297"attachments": {
298"rope.png": {
299"image/png": "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ICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6VXNlckNvbW1lbnQ+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zNTg0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjIyNDA8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KOK7mJQAAQABJREFUeAHs3QewHld1OPBjSZbVLFvdsiUsy5KQu9y75YorxtjYoWSAAGESCD0DAc9/YIBQYggtNk6CCSGTwQTj3nuTe5PkJhdJliyr997/Okue82Qkve/bV1f63ZmHnt777u7e390xOnvunrvTxk0tNAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFRYoFOFr92lEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoBCQ+HQjECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQeQGJz8pPoQEQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICDx6R4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDyAhKflZ9CAyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQOLTPUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQOUFJD4rP4UGQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAxKd7gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBygtIfFZ+Cg2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAGJT/cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKVF5D4rPwUGgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhKf7gECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCovIPFZ+Sk0AAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJD7dAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVF5A4rPyU2gABAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhIfLoHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCovIDEZ+Wn0AAIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJD4dA8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFB5AYnPyk+hARAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIPHpHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoPICEp+Vn0IDIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBA4tM9QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA5QUkPis/hQZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIDEp3uAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHKC0h8Vn4KDYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAYlP9wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABApUXkPis/BQaAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECEp/uAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEKi8g8Vn5KTQAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQkPt0DBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUXkDis/JTaAAECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEh8ugcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKi8gMRn5afQAAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQkPh0DxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUHkBic/KT6EBECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAg8ekeIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg8gISn5WfQgMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEDi0z1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDlBSQ+Kz+FBkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgMSne4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcoLSHxWfgoNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABiU/3AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEClReQ+Kz8FBoAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQISn+4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQqLyDxWfkpNAACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCQ+3QMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFReQOKz8lNoAAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQISHy6BwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqLyAxGflp9AACBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCQ+HQPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQeQGJz8pPoQEQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICDx6R4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDyAhKflZ9CAyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQOLTPUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQOUFJD4rP4UGQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAxKd7gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBygtIfFZ+Cg2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAGJT/cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKVF5D4rPwUGgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhKf7gECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCovIPFZ+Sk0AAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJD7dAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVF5A4rPyU2gABAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhIfLoHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCovIDEZ+Wn0AAIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJD4dA8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFB5AYnPyk+hARAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIPHpHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoPICEp+Vn0IDIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBA4tM9QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA5QUkPis/hQZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIDEp3uAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHKC0h8Vn4KDYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAYlP9wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABApUXkPis/BQaAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECEp/uAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEKi8g8Vn5KTQAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQkPt0DBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUXkDis/JTaAAECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEh8ugcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKi8gMRn5afQAAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQkPh0DxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUHkBic/KT6EBECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAg8ekeIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg8gISn5WfQgMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEDi0z1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDlBSQ+Kz+FBkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgMSne4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcoLSHxWfgoNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABiU/3AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEClReQ+Kz8FBoAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQISn+4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQqLyDxWfkpNAACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCQ+3QMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFReQOKz8lNoAAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQISHy6BwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqLyAxGflp9AACBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCQ+HQPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQeQGJz8pPoQEQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICDx6R4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDyAhKflZ9CAyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQOLTPUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQOUFJD4rP4UGQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAxKd7gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBygtIfFZ+Cg2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAGJT/cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKVF5D4rPwUGgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhKf7gECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCovIPFZ+Sk0AAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJD7dAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVF5A4rPyU2gABAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhIfLoHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCovIDEZ+Wn0AAIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJD4dA8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFB5AYnPyk+hARAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIPHpHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoPICEp+Vn0IDIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBA4tM9QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA5QUkPis/hQZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIDEp3uAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHKC0h8Vn4KDYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAYlP9wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABApUXkPis/BQaAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECEp/uAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEKi8g8Vn5KTQAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQkPt0DBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUXkDis/JTaAAECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEh8ugcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKi8gMRn5afQAAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQkPh0DxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUHkBic/KT6EBECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAg8ekeIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg8gISn5WfQgMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEDi0z1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDlBSQ+Kz+FBkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgMSne4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcoLSHxWfgoNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABiU/3AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEClReQ+Kz8FBoAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQISn+4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQqLyDxWfkpNAACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCQ+3QMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFReQOKz8lNoAAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQISHy6BwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqLyAxGflp9AACBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCQ+HQPECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQeQGJz8pPoQEQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICDx6R4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDyAhKflZ9CAyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQOLTPUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQOUFJD4rP4UGQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAxKd7gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBygtIfFZ+Cg2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAGJT/cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKVF5D4rPwUGgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhKf7gECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCovIPFZ+Sk0AAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJD7dAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVF5A4rPyU2gABAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhIfLoHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCovIDEZ+Wn0AAIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJD4dA8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFB5AYnPyk+hARAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIPHpHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoPICEp+Vn0IDIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBA4tM9QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA5QUkPis/hQZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIDEp3uAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHKC0h8Vn4KDYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAYlP9wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABApUXkPis/BQaAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECEp/uAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEKi8g8Vn5KTQAAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQkPt0DBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUXkDis/JTaAAECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEh8ugcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKi8gMRn5afQAAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQkPh0DxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUHkBic/KT6EBECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAg8ekeIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg8gISn5WfQgMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEDi0z1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDlBSQ+Kz+FBkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgMSne4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcoLSHxWfgoNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABiU/3AAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEClReQ+Kz8FBoAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQISn+4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQqLyDxWfkpNAACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCQ+3QMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFReQOKz8lNoAAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIdEFAgAABAgRaW2DFihUxf/78WLBgQSxdujTWr18fXbp0iV133TX69+8fffr0ie7du7f2ZTg+AQIECBAgQIAAAQIESgmsWrWqiGfmzZtXxDTr1q2LTp06FTFNv379Ir969OhR6tg6ESBAgAABAgQItJyAxGfLWToSAQIECDQSyOTmjBkzYvz48TFx4sSYMmVKNDwkyN/tvPPOxUOCgQMHxujRo2Ps2LExZsyYRkfwLQECBAgQIECAAAECBNpPoHFM8/LLL8frr78ec+bMeTvx2blz57cXc44YMaKIaY455pj2u2BnJkCAAAECBAgQCIlPNwEBAgQItKjAhg0bYvbs2XH//ffHvffeG88++2y89tprxcOB/N07W66SzsRn3759JT7fiePvBAgQIECAAAECBAi0ucCWYprJkyfH4sWLY0sxzU477RSDBw+Onj17hsRnm0+XExIgQIAAAQIENhOQ+NyMw18IECBAoDkCa9eujWeeeSauvvrquPPOO2PSpElFWdttHXPjxo1F2dt99tlnWx/zOwIECBAgQIAAAQIECLS6QNmYJuOaUaNGtfr1OQEBAgQIECBAgMC2BSQ+t+3jtwQIECBQo8Dq1auLNzwvv/zy4m3P5cuX19Rzl112KR4QHHjggTV93ocIECBAgAABAgQIECDQGgJlY5ouXbrE8OHD4/DDD2+Ny3JMAgQIECBAgACBOgQkPuvA8lECBAgQ2LJAPiC477774nvf+16MGzcucrVzrW333XePo446Knbbbbdau/gcAQIECBAgQIAAAQIEWlSgOTFNt27d4vjjjy+272jRi3IwAgQIECBAgACBugUkPusm04EAAQIEGgusW7cuJkyYEJdddlk8/PDDjX/V5Pe5F84ee+xRPCTI7zUCBAgQIECAAAECBAi0tUDu21k2pslrzUWcZ5xxRohp2nrmnI8AAQIECBAg8OcCnf78R35CgAABAgRqE8g3O+fMmRNXXnllUd62tl7/96lcGZ374BxwwAH/90PfESBAgAABAgQIECBAoA0FFi1aVDqmyTK3++67bxx22GFteMVORYAAAQIECBAgsDUBic+tyfg5AQIECDQpsGrVqrjnnnvi2muvjVwlXW/r06dPHHfcccrc1gvn8wQIECBAgAABAgQItIhAVrDJbTvKxjTdu3ePsWPHKnPbIrPhIAQIECBAgACB5gtIfDbf0BEIECCwQwrk254zZ86M//iP/4hcIV1vyzJQe+65Z1Hmtt6+Pk+AAAECBAgQIECAAIGWEJg3b17827/9W6mYJs+fizmzzK1GgAABAgQIECDQMQQkPjvGPLgKAgQIVE4g3/bMPT0fe+yxUtfeo0ePosTt6NGjS/XXiQABAgQIECBAgAABAs0RyLc9M6bJrzJt5513jv322y8OOeSQMt31IUCAAAECBAgQaAUBic9WQHVIAgQI7AgC+ZbnNddcEytXriw13H79+hVlbnv16lWqv04ECBAgQIAAAQIECBBojsDy5cvj6quvjhUrVpQ6TC7mPOWUU6J3796l+utEgAABAgQIECDQ8gISny1v6ogECBDY7gXWrl0bL730UowbN67UWDt16hRDhgyJE044oVR/nQgQIECAAAECBAgQINAcgQ0bNsSkSZPi/vvvL3WY3LojF3O+5z3vKdVfJwIECBAgQIAAgdYRkPhsHVdHJUCAwHYtkCuib7/99liwYEGpceZbnlkOavjw4aX660SAAAECBAgQIECAAIHmCORizptvvjnmz59f6jBdu3YtYhpbd5Ti04kAAQIECBAg0GoCEp+tRuvABAgQ2D4FcmX0rFmz4tZbby09wP79+8dJJ50U3bp1K30MHQkQIECAAAECBAgQIFBGYOPGjTFv3ry44YYbynQv+mSZ2zPPPDO6d+9e+hg6EiBAgAABAgQItLyAxGfLmzoiAQIEtmuB1atXx6OPPhqvvfZaqXF26dIlhg0bFkcffXSp/joRIECAAAECBAgQIECgOQLr16+PRx55pCh1W+Y4uXXHHnvsUezvWaa/PgQIECBAgAABAq0nIPHZeraOTIAAge1SYMmSJXHLLbdEJkDLtN69e8cRRxxR7PFZpr8+BAgQIECAAAECBAgQaI7AypUr4/rrry8d0+yyyy7FQs5c0KkRIECAAAECBAh0LAGJz441H66GAAECHVpg3bp1MXny5HjooYdKX+egQYNi7NixsfPOO5c+ho4ECBAgQIAAAQIECBAoI5Bbd0ydOjXuu+++Mt2LPr169Yqzzz47cp9PjQABAgQIECBAoGMJSHx2rPlwNQQIEOjQArky+p577ok5c+aUus58MDBixIjijc9SB9CJAAECBAgQIECAAAECzRDIxZx33nlnzJo1q9RROnfuHHvvvXeccMIJpfrrRIAAAQIECBAg0LoCEp+t6+voBAgQ2G4ENm7cGPPnzy/K3Ob3ZVqfPn3i2GOPjf79+5fprg8BAgQIECBAgAABAgSaJbB48eKizG3ZmKZbt25x0kknFXt8NutCdCZAgAABAgQIEGgVAYnPVmF1UAIECGx/AmvXro3x48fHxIkTSw1up512isGDBxcPCTp18n8/pRB1IkCAAAECBAgQIECgtMD69etjwoQJ8dxzz5U+xu677x5nnXVWiGlKE+pIgAABAgQIEGhVAU+eW5XXwQkQILD9CCxfvjxuu+22yD/LtO7du8f+++8fBx10UJnu+hAgQIAAAQIECBAgQKBZArmY88Ybb4xly5aVOs7OO+8co0aNiiOPPLJUf50IECBAgAABAgRaX0Dis/WNnYEAAQKVF9iwYUO89dZbxf6eZQfTr1+/OPHEE6N3795lD6EfAQIECBAgQIAAAQIESglkadvZs2fHHXfcUap/dsrFnGeccUbkW58aAQIECBAgQIBAxxSQ+OyY8+KqCBAg0KEEVq1aFY888ki88cYbpa6rc+fOMXTo0KLMbakD6ESAAAECBAgQIECAAIFmCKxbty7GjRsXkydPLnWU3LpjwIABRZnbUgfQiQABAgQIECBAoE0EJD7bhNlJCBAgUG2BpUuXxs033xxZGqpM69WrV4wZMyaGDx9eprs+BAgQIECAAAECBAgQaJZALua87rrrSsc0Xbt2LWKa0aNHN+s6dCZAgAABAgQIEGhdAYnP1vV1dAIECFReIFdGv/766/Hoo4+WHkuujD7llFOiW7dupY+hIwECBAgQIECAAAECBMoI5NYdU6ZMiYceeqhM96JPz54945xzzinK3ZY+iI4ECBAgQIAAAQKtLiDx2erETkCAAIFqC6xcubLY23PevHmlBtKpU6fiTc9jjjmmVH+dCBAgQIAAAQIECBAg0ByBXMx55513xpw5c0od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AgQIECBAgACBNhLIqi633HJL6bP17Nmzw8U0uT1Hlrddvny5mKb0zOpIgAABAgQI7IgCEp874qwbMwECBP5XIFdGT5gwoSgLVQala9euceihh8aYMWPKdG9Wn3xDNffrvPfee4tStq+99lrMmTMnli1bVvMeN7VeQO/evWPYsGESn7WC+RwBAgQIECBAgACBNhLIhZBZDvb5558vdcbcumNHiGnybc8s52sxZ6nbRCcCBAgQIECgQgISnxWaLJdKgACBlhbIPWPybc8sd1um5cro8847L3r06FGme9198g3OV199tdi3s6Hs09y5c2PRokWRZW5bq+UDgv322y922WWX1jqF4xIgQIAAAQIECBAgUEIgF3PeeuutkbFNmZZlbt///ve3WUyTidrJkyfH3Xff/XYp27aKaUaPHh3dunUrw6QPAQIECBAgQKAyAhKflZkqF0qAAIGWFcgytxlg5/6eZVqWfx06dGicccYZZbrX3CcfDMycOTMee+yxt0vZzpgxI+bNm1c6YVvzyTd9sEuXLsUbrYccckjstNNO9XT1WQIECBAgQIAAAQIEWlkgt+64/fbbS50l/30/ePDgOOecc0r1r7VTQ+z15JNPFvFX/vnGG2+0WUyT4zzssMPi4IMPFtPUOmk+R4AAAQIECFRWQOKzslPnwgkQINA8gXxD8plnnilWG5c5Uvfu3eOkk06KIUOGlOneZJ/GpWwfffTRyFK2mexsjVK227qYfffdN04++eRWG+e2zu13BAgQIECAAAECBAhsXSAXSWZMk1VhyrRc5HjKKafEu971rjLdm+yzatWqogxvbs/x8MMPxyuvvFIsPs1YJ6+9rVrfvn1j7NixxcLVtjqn8xAgQIAAAQIE2ktA4rO95J2XAAEC7SzQUOY2y8eWabnvZZaEyocFLdUyGZsJzixjm1+5/2ju27l48eJWLWW7tevPUr75Rms+DMkSWBoBAgQIECBAgAABAh1HIMvc3nLLLVE2psnFnJdcckmLxjSZ0My3OTOeeeCBB4rE7OzZs4vtOcpeZ3PEM47JNz1zMaeYpjmS+hIgQIAAAQJVEWi5p9VVGbHrJECAAIHYsGFDzJo1K+6///5SGhkwZ+nXI444olT/xp3yWjK5+fjjj0euhH7qqafizTffLN7uLLtPT+Pjl/0+S/meeOKJxYOQPffcs+xh9CNAgAAB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4+67726Vtz47WkyTC1tHjhwZp59+estiOxoBAgQIECBAgEClBCQ+KzVdLpYAgZYQyL1wTj755Mhk37Zavu35ox/9KBYsWLCtj5X63RVXXBFTpkwp1bc1OvXs2TPOP//86NevX2sc3jEJECBAgAABAgQIEGhBgXpimn/5l3+JTFJu3LixBa8goqPFNDvvvHNcdNFFkfufagQIECBAgAABAjuugMTnjjv3Rk5ghxY49dRTY8CAAZEPDLbVnnjiibjssssi9/xsqZblpn71q1+1+KrrHEufPn2ia9eudV1qrozO8r+Z+GzKo64D+zABAgQIECBAgAABAq0mUGtM8/TTT8dPfvKTWLFiRYtdS2vFNHmBffv2rTumyThm0KBBReJTTNNi0+xABAgQIECAAIFKCkh8VnLaXDQBAs0VGDp0aJxxxhlNvvW5evXquOqqq+KXv/xli6yQfvjhh+PSSy+NWbNmNXcIRf8M6t/1rncVScvvfve78c1vfjNypXM9rXv37nHmmWfGPvvsU083nyVAgAABAgQIECBAoB0F6olp/uu//quIaTK+aW5r6ZgmrycXYp5zzjmRMc33v//9umOarOZz9tlnx4gRI5o7PP0JECBAgAABAgQqLrDtOo8VH5zLJ0CAwNYEMjn48Y9/PG688caYO3fu1j5W/Dx//8Mf/jCWLVsWn/3sZyP3CC3TbrjhhvjOd74TEyZMKNO96JOJzlwBve+++8aYMWPikEMOiQMPPDD22GOP6N27d1x33XWxatWqmo+fx8tSUJdcckndDxdqPokPEiBAgAABAgQIECDQ4gL1xDTz5s2Ln/70p7F8+fIipilbDrYlYpqEyEo1w4cPL2KajGsyphk8eHCx9cYtt9xSV0yTx9ttt93iL//yL8U0iaERIECAAAECBHZwAYnPHfwGMHwCO7LA4YcfHhdeeGH8+te/jrVr126T4s0334yf/exn8dJLL8Vf//Vfx7HHHhudO3feZp+GX77++uvx29/+Nn73u99Ffr9hw4aGX23zz0xK5gOBPffcM3I1d65eHjlyZPHnkCFDiuA+A/xevXoV15Klq+6+++66yvJ269YtTjrppOKBwzYvxi8JECBAgAABAgQIEOhwAvXENDNmzCje+nzllVfiE5/4RJx44ok1l5SdMmVK/OY3v6k7pkmwjGkyqZkxTS7gHDVqVBHT5N8zntl9993fjmny87fddltdMU2+7Tl27NhIC40AAQIECBAgQIDATps2t2/Z3e2ZEiBAoEICEydOjA9+8INFQrOW/xz27Nkzhg0bFqecckrknjqHHXZYsZdMJhAbWu4HunDhwpg0aVLcd999ceeddxbHz1XWtbRMeOYDgQ996ENx9NFHF2WfshxtJjjzq0ePHn+2kjmvffLkyUXAnw80am2ZQM1Svu95z3tq7eJzBAgQIECAAAECBAh0IIEyMU1ul5HJwoaYJhdbZszR0DKmWbRoUWSS9IEHHoi77rqrqFxTa0yTx8lzfOQjH4njjjtus5gmK+hsKabJPnPmzCkSmLnwtNaWidUs5XvuuefW2sXnCBAgQIAAAQIEtmMBic/teHINjQCBpgXWrVtXBMlf/OIXY8mSJU13+N9PZFnZQYMGxcCBA4uVy/lnBu95vEx6ZqCeCcgM3PPhQK1veXbq1CmOOuqo+Pa3v12Usc0gvpY9O/O8WeY2k6X5kKKW1rVr12IfnP/+7/+OTOhqBAgQIECAAAECBAhUT6A5Mc2AAQOKuCYXRGZ8kzFNQ9Iz45n8mj17dhHT1BpnpGBuyfGDH/wgDj300GKrjlpimux36623xvnnn19zTJNVeE4++eS4/vrri0WieQyNAAECBAgQIEBgxxZQ6nbHnn+jJ7DDC2RZpCx3m6ukL7/88lizZk1NJpkkza/XXnst8m3PTCJm0J1vXmbZ3NxnMx9A1NMa3vT83ve+F8cff3zNZafyHHmuXIldz8OIXNGdq68lPeuZJZ8lQIAAAQIECBAg0LEEmhvTZOWYhpgmF2Jmy/hi5cqVdcc02XevvfaKyy67rHijNOOketo999xTV0yTY8+tO7IyjkaAAAECBAgQIEAgBSQ+3QcECOzwArmvzJe+9KViJfMf/vCHJvf7bAyWic58IJBfzWmZ9Nxjjz2KNz3rTXrmeXN/z8cee6yuS8iHBLmyWyNAgAABAgQIECBAoNoCHSGmScHcr/P73/9+qaRnLkJ9+OGH65qITNRmSV2NAAECBAgQIECAQIPAn5byNfzNnwQIENhBBYYOHRrf+ta34qKLLopMCLZ1Gzx4cHznO98p9qWpd1V0ltGdNm1avPrqq3VddvbLhKlGgAABAgQIECBAgED1Bdo7punbt29k9ZoLLrigruo1DfLTp0+Pl19+ueGvNf2ZC1GXL19e02d9iAABAgQIECBAYMcQkPjcMebZKAkQqEFgxIgRRfLxk5/8ZGQZ2LZqw4YNK0pBfeADH4hdd9217tNmedsXX3wxli5dWlff1atXx7PPPltXHx8mQIAAAQIECBAgQKDjCrRnTPPjH/84PvzhD5eKaVI0tx+pN6bJWOjJJ5/suBPiyggQIECAAAECBNpcQOKzzcmdkACBjiqQ5WbzQcE3vvGN4u3PLD3b2u20006LK6+8Ms4///zI8lRlWgb7zz33XLG/aD39cx/SBx98MF544YV6uvksAQIECBAgQIAAAQIdVOCdMc3ee+8d+bPWbA0xTS7kLBvT5PU9/fTTdcc0uRfpAw88EBMmTGjNITo2AQIECBAgQIBAhQQ6byrt+K0KXa9LJUCAQKsLZLA+evToGDNmTFE2acqUKZHJxZZsuQ/N5z//+fjqV78ahx12WLPeMM03N6+44oq6S91mWahly5bFokWL4phjjolevXq15BAdiwABAgQIECBAgACBdhJoHNPk3plTp06NtWvXtujVtGRMkxf2s5/9LCZNmlT3NWap27lz58bxxx9f+m3Tuk+qAwECBAgQIECAQIcV2GnTg++NHfbqXBgBAgTaUaDhAUG+FXnNNdfEuHHjikRhcy4py9qed955ceGFF8YBBxwQAwcObM7hir7z5s2Lk046KV566aW6j5Wrv/v06RPvfe974zOf+Uwcfvjh0blz57qPowMBAgQIECBAgAABAh1PIGOaadOmxcMPPxx//OMfiz9z4WNzWmvENLmYM2ORstVoevfuHeecc0587nOfi6OPPlpM05wJ1pcAAQIECBAgUHEBic+KT6DLJ0Cg9QVyn5kZM2bE+PHj46GHHopHH300XnvttViyZEmTJ88k4qBBg+Lggw+OE088MU444YQYPnx4ZBndLl26NNm/qQ9s2LCheDiQx63lerZ0vEx+9uzZM0aNGlVcX5aqytXS/fr129LH/YwAAQIECBAgQIAAgYoJZEwzc+bMoiRsJkEfeeSRIqZZuHBhkyPJmCYXbB5yyCGtEtPkBeQbqXn8sjFNHqNHjx4xcuTIOO644+L0008vFof2798/f6URIECAAAECBAjsQAISnzvQZBsqAQLNE8g9MfPtyvnz5xeB+eTJk4vV07NmzYrFixdHrlLu1KlTEXD37ds39tprr8g9dTL4Hjx4cGTQ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EOg8gR07b8hGTIAAgTIEIlR84YUX0sqVKxsLjqc777jjjnTYYYdVT3k2fuAvDti6VO5ll12WLrroor846r9/Xr9+ffWeni+++OK/f/QbAQIECBAgQIAAAQIE/l/g+eefTytWrGj0iMDyrrvuSkceeWS35jTxRfHKj0svvTRdcskljd8bK9m8+OKLyZymkcoBBAgQIECAAIGOEBB8dkSbDJIAgRIF4j01zz77bOMdyvF05pVXXlm9MyeevuzuFuHnqFGjqveETpw4sfZ08Q7Sr7/+OsWd1DYCBAgQIECAAAECBAj8ViCepHz66acb5zTxmXgq9MQTT6xWlPntObb19wg/r7/++urpz7pzxBi///57c5o6JPsIECBAgAABAh0kIPjsoGYZKgEC5QjE5Hv58uVpzpw5tUXHUk4TJkxI8YRmv379ao/9OzvjvLHM1OWXX57i97rtp59+cpGgDsg+AgQIECBAgAABAoUKxDK37777bmP18V7Pq666qkfnNHFD5+jRo9M111zTOKeJm07dzNnYJgcQIECAAAECBDpCoP5qdkeUYJAECBDIT2DLli1pwYIFadWqVbXFRdh5wQUXpBEjRtQety07Bw0alKZMmZLGjRtX+/G4SDB//vyW3tlTeyI7CRAgQIAAAQIECBDISiDmCT/88ENjTRdffHGK13f09Na3b980derUNH78+NpTx/zLnKaWyE4CBAgQIECAQMcICD47plUGSoBASQJbg8948rNuGzJkSDr11FNT3M3c01ucMy4+xHJTdVuMNd5DGk+o2ggQIECAAAECBAgQILBVYN68ealpTjNw4MB0xhlntGVOE+OIJW9POeWUrUP6039jjOY0f0rjjwQIECBAgACBjhMQfHZcywyYAIESBOLdmYsXL64tdetytE1PZNaepGHngAED0uTJkxuOSmn9+vWCz0YlBxAgQIAAAQIECBAoS2DhwoWNBccrNg488MDG47b1gD59+qTjjz++8ePmNI1EDiBAgAABAgQIdISA4LMj2mSQBAiUJhDB57fffltb9k477ZTGjh2b+vfvX3tcd3bGRYJ99tknxbK3ddvmzZsbx1v3efsIECBAgAABAgQIEMhP4Ouvv24s6oADDmjrnCZuGN13333T4MGDa8diTlPLYycBAgQIECBAoGMEBJ8d0yoDJUCgNIE1a9bUlhxL0bbj3Z6/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hx9+SOvXr/+f08cd0PGe0D333LNaxvaYY46pnvKMd9/Ee0QFnv/D5T8IECBAgAABAgQIEGizQMxp1q1bl1atWpXeeeedxjnNjjvuWM1pRo4cWc1p4r2h8TN+/Pg0ePDgJPBsc8OcngABAgQIECDQCwUEn72wKYZEgACB7grEErgRdG7YsKG6aPDNN99U/8ZFhC1btqR4r00sXzt8+PA0YsSI6qJA/K1///4p3oFjI0CAAAECBAgQIECAwPYUaGVOEzdyxio1MaeJmzdjPhPzGnOa7dk5302AAAECBAgQ2L4Cgs/t6+/bCRAg0HaBWPI2ws64ezp+YotlbeMnnvr07s62t8AXECBAgAABAgQIECDQDYE/m9PE6eKJT3OabsD6KAECBAgQIEAgQwHBZ4ZNVRIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB0gR2LK1g9RIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkJ+A4DO/nqqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHECgs/iWq5gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkJCD7z66mKCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQnIPgsruUKJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJCfgOAzv56qiAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxAoLP4lquYAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL5CQg+8+upiggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUJyD4LK7lCiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQn4DgM7+eqogAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAcQKCz+JarmACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC+QkIPvPrqYoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFCcg+Cyu5QomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkJ+A4DO/nqqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHECgs/iWq5gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkJCD7z66mKCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQnIPgsruUKJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJCfgOAzv56qiAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxAoLP4lquYAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL5CQg+8+upiggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUJyD4LK7lCiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQn4DgM7+eqogAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAcQKCz+JarmACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC+QkIPvPrqYoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFCcg+Cyu5QomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkJ+A4DO/nqqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHECgs/iWq5gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkJCD7z66mKCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQnIPgsruUKJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJCfgOAzv56qiAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxAoLP4lquYAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL5CQg+8+upiggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUJyD4LK7lCiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQn4DgM7+eqogAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAcQKCz+JarmACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC+QkIPvPrqYoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFCcg+Cyu5QomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkJ+A4DO/nqqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHECgs/iWq5gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkJCD7z66mKCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQnIPgsruUKJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJCfgOAzv56qiAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxAoLP4lquYAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL5CQg+8+upiggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUJyD4LK7lCiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQn4DgM7+eqogAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAcQKCz+JarmACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC+QkIPvPrqYoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFCcg+Cyu5QomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkJ+A4DO/nqqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHECgs/iWq5gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkJCD7z66mKCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQnIPgsruUKJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJCfgOAzv56qiAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxAoLP4lquYAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL5CQg+8+upiggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUJyD4LK7lCiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQn4DgM7+eqogAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAcQKCz+JarmACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC+QkIPvPrqYoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFCcg+Cyu5QomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkJ+A4DO/nqqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHECgs/iWq5gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkJCD7z66mKCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQnIPgsruUKJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJCfgOAzv56qiAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxAoLP4lquYAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL5CQg+8+upiggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUJyD4LK7lCiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQn4DgM7+eqogAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAcQKCz+JarmACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC+QkIPvPrqYoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFCcg+Cyu5QomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkJ+A4DO/nqqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHECgs/iWq5gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkJCD7z66mKCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQnIPgsruUKJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJCfgOAzv56qiAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxAoLP4lquYAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL5CQg+8+upiggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUJyD4LK7lCiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQn4DgM7+eqogAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAcQKCz+JarmACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC+QkIPvPrqYoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFCcg+Cyu5QomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkJ+A4DO/nqqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHECgs/iWq5gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkJCD7z66mKCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQnIPgsruUKJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJCfgOAzv56qiAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxAoLP4lquYAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL5CQg+8+upiggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUJyD4LK7lCiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQn4DgM7+eqogAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAcQKCz+JarmACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC+QkIPvPrqYoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFCcg+Cyu5QomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkJ+A4DO/nqqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHECgs/iWq5gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkJCD7z66mKCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQnIPgsruUKJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJCfgOAzv56qiAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBxAoLP4lquYAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL5CQg+8+upiggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUJyD4LK7lCiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQn4DgM7+eqogAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAcQKCz+JarmACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC+QkIPvPrqYoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFCcg+Cyu5QomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkJ+A4DO/nqqIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHECgs/iWq5gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkJCD7z66mKCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQn8B+tQWzH6jftGAAAAABJRU5ErkJggg=="
300}
301},
302"cell_type": "markdown",
303"metadata": {},
304"source": [
305"### Задача 2\n",
306"Веревку длиной 1 метр разрезают в двух случайных местах. С какой вероятностью длина самого большого отрезка окажется более 50 сантиметров?\n",
307"![rope.png](attachment:rope.png)"
308]
309},
310{
311"cell_type": "code",
312"execution_count": 14,
313"metadata": {},
314"outputs": [],
315"source": [
316"from random import random"
317]
318},
319{
320"cell_type": "code",
321"execution_count": 22,
322"metadata": {},
323"outputs": [
324{
325"data": {
326"text/plain": [
327"(0.5976711992032095, 0.9661842897029447)"
328]
329},
330"execution_count": 22,
331"metadata": {},
332"output_type": "execute_result"
333}
334],
335"source": [
336"first = random()\n",
337"second = random()\n",
338"\n",
339"first, second"
340]
341},
342{
343"cell_type": "code",
344"execution_count": null,
345"metadata": {},
346"outputs": [],
347"source": [
348"left_cut = min(first, second)\n",
349"right_cut = max(first, second)"
350]
351},
352{
353"cell_type": "code",
354"execution_count": null,
355"metadata": {},
356"outputs": [],
357"source": [
358"if left_cut > 0.5\n",
359"if right_cut - left_cut > 0.5\n",
360"if right_cut < 0.5"
361]
362},
363{
364"cell_type": "code",
365"execution_count": null,
366"metadata": {},
367"outputs": [],
368"source": []
369},
370{
371"cell_type": "code",
372"execution_count": 32,
373"metadata": {
374"scrolled": true
375},
376"outputs": [
377{
378"name": "stdout",
379"output_type": "stream",
380"text": [
381"0.7501787\n",
382"CPU times: user 5.91 s, sys: 35.4 ms, total: 5.95 s\n",
383"Wall time: 5.96 s\n"
384]
385}
386],
387"source": [
388"%%time\n",
389"\n",
390"N_ATTEMPTS = 10**7\n",
391"success_count = 0\n",
392"\n",
393"for _ in range(N_ATTEMPTS):\n",
394" first_cut = random()\n",
395" second_cut = random()\n",
396" \n",
397" left_cut = min(first_cut, second_cut) # позиция левого надреза\n",
398" right_cut = max(first_cut, second_cut) # позиция правого надреза\n",
399" \n",
400" if (\n",
401" left_cut >= 0.5 or # левый кусок больше 50см\n",
402" right_cut - left_cut >= 0.5 or # кусок между надрезами больше 50см\n",
403" 1-right_cut >= 0.5 # правый кусок больше 50см\n",
404" ):\n",
405" success_count += 1\n",
406" \n",
407"print(success_count / N_ATTEMPTS)"
408]
409},
410{
411"cell_type": "markdown",
412"metadata": {},
413"source": [
414"Пробуем с помощью numpy"
415]
416},
417{
418"cell_type": "code",
419"execution_count": 24,
420"metadata": {},
421"outputs": [
422{
423"data": {
424"text/plain": [
425"array([0.75778293, 0.8903409 , 0.37658031, 0.77807423, 0.58180176,\n",
426" 0.71740072, 0.27533437, 0.76562725, 0.57958218, 0.77943997])"
427]
428},
429"execution_count": 24,
430"metadata": {},
431"output_type": "execute_result"
432}
433],
434"source": [
435"np.random.random(10)"
436]
437},
438{
439"cell_type": "code",
440"execution_count": 28,
441"metadata": {},
442"outputs": [
443{
444"data": {
445"text/plain": [
446"array([0.13294801, 0.77226362, 0.85692282, 0.29534272, 0.36666038,\n",
447" 0.37564865, 0.97125546, 0.43806988, 0.29694839, 0.83192201])"
448]
449},
450"execution_count": 28,
451"metadata": {},
452"output_type": "execute_result"
453}
454],
455"source": [
456"first_cut = np.random.random(10)\n",
457"first_cut"
458]
459},
460{
461"cell_type": "code",
462"execution_count": 29,
463"metadata": {},
464"outputs": [
465{
466"data": {
467"text/plain": [
468"array([0, 1, 1, 0, 0, 0, 1, 0, 0, 1])"
469]
470},
471"execution_count": 29,
472"metadata": {},
473"output_type": "execute_result"
474}
475],
476"source": [
477"# np.where(условие, что подставить, когда условие выполнено, когда условие НЕ выполнено)\n",
478"\n",
479"np.where(first_cut > 0.5, 1, 0)"
480]
481},
482{
483"cell_type": "code",
484"execution_count": 26,
485"metadata": {},
486"outputs": [],
487"source": [
488"first_cut = np.random.random(10**7)"
489]
490},
491{
492"cell_type": "code",
493"execution_count": 27,
494"metadata": {},
495"outputs": [
496{
497"data": {
498"text/plain": [
499"80000096"
500]
501},
502"execution_count": 27,
503"metadata": {},
504"output_type": "execute_result"
505}
506],
507"source": [
508"first_cut.__sizeof__()"
509]
510},
511{
512"cell_type": "code",
513"execution_count": 30,
514"metadata": {},
515"outputs": [
516{
517"name": "stdout",
518"output_type": "stream",
519"text": [
520"CPU times: user 1.6 s, sys: 90.3 ms, total: 1.69 s\n",
521"Wall time: 1.69 s\n"
522]
523},
524{
525"data": {
526"text/plain": [
527"0.7499787"
528]
529},
530"execution_count": 30,
531"metadata": {},
532"output_type": "execute_result"
533}
534],
535"source": [
536"%%time\n",
537"\n",
538"first_cut = np.random.random(10**7)\n",
539"second_cut = np.random.random(10**7)\n",
540"\n",
541"sum(np.where(\n",
542" ((first_cut < 0.5) & (second_cut < 0.5)) | # | or, & and\n",
543" ((first_cut > 0.5) & (second_cut > 0.5)) |\n",
544" (abs(first_cut - second_cut) > 0.5), \n",
545" 1, 0)) / 10**7"
546]
547},
548{
549"cell_type": "code",
550"execution_count": null,
551"metadata": {},
552"outputs": [],
553"source": [
554"# multiprocessing Thread\n",
555"# asyncio - асинхронные вычисления"
556]
557},
558{
559"cell_type": "code",
560"execution_count": null,
561"metadata": {},
562"outputs": [],
563"source": []
564},
565{
566"cell_type": "code",
567"execution_count": null,
568"metadata": {},
569"outputs": [],
570"source": []
571},
572{
573"cell_type": "markdown",
574"metadata": {},
575"source": [
576"# Метрики схожести текстов"
577]
578},
579{
580"cell_type": "markdown",
581"metadata": {},
582"source": [
583"Расстояние Хемминга - число различающихся символов (у строк одинакового размера)"
584]
585},
586{
587"cell_type": "code",
588"execution_count": 33,
589"metadata": {},
590"outputs": [],
591"source": [
592"signal_1 = '010010100101010101101011101010100101'\n",
593"signal_2 = '010110100101011101110011101010100101'"
594]
595},
596{
597"cell_type": "code",
598"execution_count": 34,
599"metadata": {},
600"outputs": [
601{
602"name": "stdout",
603"output_type": "stream",
604"text": [
605"4\n"
606]
607}
608],
609"source": [
610"hamming_dist = 0\n",
611"\n",
612"for i, number in enumerate(signal_1):\n",
613" if number != signal_2[i]:\n",
614" hamming_dist += 1\n",
615" \n",
616"print(hamming_dist)"
617]
618},
619{
620"cell_type": "markdown",
621"metadata": {},
622"source": [
623"Расстояние Левенштейна"
624]
625},
626{
627"cell_type": "code",
628"execution_count": 35,
629"metadata": {},
630"outputs": [],
631"source": [
632"import Levenshtein"
633]
634},
635{
636"cell_type": "code",
637"execution_count": 36,
638"metadata": {},
639"outputs": [
640{
641"data": {
642"text/plain": [
643"4"
644]
645},
646"execution_count": 36,
647"metadata": {},
648"output_type": "execute_result"
649}
650],
651"source": [
652"Levenshtein.distance('иванов', 'петров')"
653]
654},
655{
656"cell_type": "code",
657"execution_count": 37,
658"metadata": {},
659"outputs": [],
660"source": [
661"voice_transcription = 'Романова' # результат расшифровки голоса"
662]
663},
664{
665"cell_type": "code",
666"execution_count": 38,
667"metadata": {},
668"outputs": [],
669"source": [
670"team = ['Мединская', 'Лучникова', 'Шереметьева', 'Разгуляева', 'Романовская'] # список настоящих фамилий"
671]
672},
673{
674"cell_type": "code",
675"execution_count": 39,
676"metadata": {},
677"outputs": [
678{
679"data": {
680"text/plain": [
681"[('Романовская', 3),\n",
682" ('Лучникова', 6),\n",
683" ('Мединская', 7),\n",
684" ('Разгуляева', 7),\n",
685" ('Шереметьева', 8)]"
686]
687},
688"execution_count": 39,
689"metadata": {},
690"output_type": "execute_result"
691}
692],
693"source": [
694"sorted([(name, Levenshtein.distance(name, voice_transcription)) for name in team], key=lambda x: x[1])"
695]
696},
697{
698"cell_type": "code",
699"execution_count": null,
700"metadata": {},
701"outputs": [],
702"source": []
703},
704{
705"cell_type": "code",
706"execution_count": null,
707"metadata": {},
708"outputs": [],
709"source": []
710},
711{
712"cell_type": "markdown",
713"metadata": {},
714"source": [
715"# Word2vec"
716]
717},
718{
719"cell_type": "markdown",
720"metadata": {},
721"source": [
722"- google --> пщщпду\n",
723"- однушка --> однокомнатная квартира\n",
724"\n",
725"[Пример](https://ai.intelligentonlinetools.com/ml/k-means-clustering-example-word2vec/) использования"
726]
727},
728{
729"cell_type": "code",
730"execution_count": 40,
731"metadata": {},
732"outputs": [],
733"source": [
734"import word2vec"
735]
736},
737{
738"cell_type": "code",
739"execution_count": null,
740"metadata": {
741"scrolled": true
742},
743"outputs": [],
744"source": [
745"# построение модели\n",
746"# word2vec.word2vec('keywords_only.csv', 'keywords.bin', size=100, binary=True, verbose=True)"
747]
748},
749{
750"cell_type": "code",
751"execution_count": 41,
752"metadata": {},
753"outputs": [],
754"source": [
755"model = word2vec.load('keywords.bin')"
756]
757},
758{
759"cell_type": "code",
760"execution_count": 42,
761"metadata": {
762"scrolled": true
763},
764"outputs": [
765{
766"data": {
767"text/plain": [
768"(5110, 100)"
769]
770},
771"execution_count": 42,
772"metadata": {},
773"output_type": "execute_result"
774}
775],
776"source": [
777"model.vectors.shape"
778]
779},
780{
781"cell_type": "code",
782"execution_count": 43,
783"metadata": {},
784"outputs": [
785{
786"data": {
787"text/plain": [
788"[('доллар', 'курс', 0.9418648979417067),\n",
789" ('доллар', 'новости', 0.961252865976364),\n",
790" ('доллар', 'exist', 0.7393588306142083),\n",
791" ('курс', 'новости', 0.9320686871264429),\n",
792" ('курс', 'exist', 0.8172263099993266),\n",
793" ('новости', 'exist', 0.7475044615162911)]"
794]
795},
796"execution_count": 43,
797"metadata": {},
798"output_type": "execute_result"
799}
800],
801"source": [
802"model.distance('доллар', 'курс', 'новости', 'exist')"
803]
804},
805{
806"cell_type": "code",
807"execution_count": 44,
808"metadata": {
809"scrolled": true
810},
811"outputs": [
812{
813"data": {
814"text/plain": [
815"[('фейсбук', 0.9973144427134036),\n",
816" ('реклама', 0.9967488335032968),\n",
817" ('контакт', 0.9937352354865503),\n",
818" ('gmail', 0.9913932694292359),\n",
819" ('одноклассники', 0.9911915278087111),\n",
820" ('мою', 0.988450608859537),\n",
821" ('odnoklassniki', 0.9882130270998799),\n",
822" ('майл', 0.9866659658020683),\n",
823" ('госуслуги', 0.9865898596239959),\n",
824" ('vk', 0.985478288550912)]"
825]
826},
827"execution_count": 44,
828"metadata": {},
829"output_type": "execute_result"
830}
831],
832"source": [
833"indexes, metrics = model.similar('вконтакте')\n",
834"model.generate_response(indexes, metrics).tolist()"
835]
836},
837{
838"cell_type": "code",
839"execution_count": 45,
840"metadata": {},
841"outputs": [
842{
843"data": {
844"text/plain": [
845"[('дикого', 0.9660463414472039),\n",
846" ('дочь', 0.9654834067319502),\n",
847" ('перси', 0.9645626335378448),\n",
848" ('запада', 0.9634953006784215),\n",
849" ('одна', 0.9626509379556154),\n",
850" ('синий', 0.9625325953575207),\n",
851" ('папины', 0.9622590861211784),\n",
852" ('поли', 0.9617913888840744),\n",
853" ('мастер', 0.9613913633302174),\n",
854" ('зеленый', 0.9612019929452926)]"
855]
856},
857"execution_count": 45,
858"metadata": {},
859"output_type": "execute_result"
860}
861],
862"source": [
863"indexes, metrics = model.similar('замок')\n",
864"model.generate_response(indexes, metrics).tolist()"
865]
866},
867{
868"cell_type": "code",
869"execution_count": 46,
870"metadata": {
871"scrolled": true
872},
873"outputs": [
874{
875"data": {
876"text/plain": [
877"[('иллюзия', 0.9746920189283443),\n",
878" ('обмана', 0.9739505786654822),\n",
879" ('союзники', 0.9726426792215386),\n",
880" ('механик', 0.9708741631776523),\n",
881" ('возвращайся', 0.9658919454200058),\n",
882" ('воскрешение', 0.9658354453664477),\n",
883" ('кредо', 0.9636937079052321),\n",
884" ('омерзительная', 0.9615733713655767),\n",
885" ('всех', 0.9599216386354856),\n",
886" ('серого', 0.9594825853024929)]"
887]
888},
889"execution_count": 46,
890"metadata": {},
891"output_type": "execute_result"
892}
893],
894"source": [
895"indexes, metrics = model.similar('фильм')\n",
896"model.generate_response(indexes, metrics).tolist()"
897]
898}
899],
900"metadata": {
901"kernelspec": {
902"display_name": "Python 3 (ipykernel)",
903"language": "python",
904"name": "python3"
905},
906"language_info": {
907"codemirror_mode": {
908"name": "ipython",
909"version": 3
910},
911"file_extension": ".py",
912"mimetype": "text/x-python",
913"name": "python",
914"nbconvert_exporter": "python",
915"pygments_lexer": "ipython3",
916"version": "3.9.13"
917}
918},
919"nbformat": 4,
920"nbformat_minor": 4
921}
922