Update app.py
Browse files
app.py
CHANGED
@@ -10,6 +10,7 @@ import zlib
|
|
10 |
import numpy as np
|
11 |
from urllib.parse import urlparse
|
12 |
import logging
|
|
|
13 |
|
14 |
# Настройка логирования
|
15 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
@@ -88,7 +89,7 @@ def setup_database():
|
|
88 |
cur.execute("CREATE EXTENSION IF NOT EXISTS vector;")
|
89 |
|
90 |
# Удаляем существующие таблицы если они есть
|
91 |
-
cur.execute(f"DROP TABLE IF EXISTS {embeddings_table}, {query_cache_table};")
|
92 |
|
93 |
# Создаем таблицу для хранения эмбеддингов фильмов
|
94 |
cur.execute(f"""
|
@@ -132,7 +133,8 @@ def calculate_crc32(text):
|
|
132 |
|
133 |
def encode_string(text):
|
134 |
"""Кодирует строку в эмбеддинг."""
|
135 |
-
|
|
|
136 |
|
137 |
def get_movies_without_embeddings():
|
138 |
"""Получает список фильмов, для которых нужно создать эмбеддинги."""
|
@@ -168,7 +170,8 @@ def get_embedding_from_db(conn, table_name, crc32_column, crc32_value, model_nam
|
|
168 |
(crc32_value, model_name))
|
169 |
result = cur.fetchone()
|
170 |
if result and result[0]:
|
171 |
-
|
|
|
172 |
except Exception as e:
|
173 |
logging.error(f"Ошибка при получении эмбеддинга из БД: {e}")
|
174 |
return None
|
@@ -176,13 +179,15 @@ def get_embedding_from_db(conn, table_name, crc32_column, crc32_value, model_nam
|
|
176 |
def insert_embedding(conn, table_name, movie_id, embedding_crc32, string_crc32, embedding):
|
177 |
"""Вставляет эмбеддинг в базу данных."""
|
178 |
try:
|
|
|
|
|
179 |
with conn.cursor() as cur:
|
180 |
cur.execute(f"""
|
181 |
INSERT INTO {table_name}
|
182 |
(movie_id, embedding_crc32, string_crc32, model_name, embedding)
|
183 |
VALUES (%s, %s, %s, %s, %s)
|
184 |
ON CONFLICT (movie_id) DO NOTHING
|
185 |
-
""", (movie_id, embedding_crc32, string_crc32, model_name,
|
186 |
conn.commit()
|
187 |
return True
|
188 |
except Exception as e:
|
@@ -266,7 +271,7 @@ def get_movie_embeddings(conn):
|
|
266 |
# Находим название фильма по ID
|
267 |
for movie in movies_data:
|
268 |
if movie['id'] == movie_id:
|
269 |
-
movie_embeddings[movie['name']] = np.array(embedding)
|
270 |
break
|
271 |
logging.info(f"Загружено {len(movie_embeddings)} эмбеддингов фильмов.")
|
272 |
except Exception as e:
|
|
|
10 |
import numpy as np
|
11 |
from urllib.parse import urlparse
|
12 |
import logging
|
13 |
+
from sklearn.preprocessing import normalize
|
14 |
|
15 |
# Настройка логирования
|
16 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
|
|
89 |
cur.execute("CREATE EXTENSION IF NOT EXISTS vector;")
|
90 |
|
91 |
# Удаляем существующие таблицы если они есть
|
92 |
+
# cur.execute(f"DROP TABLE IF EXISTS {embeddings_table}, {query_cache_table};")
|
93 |
|
94 |
# Создаем таблицу для хранения эмбеддингов фильмов
|
95 |
cur.execute(f"""
|
|
|
133 |
|
134 |
def encode_string(text):
|
135 |
"""Кодирует строку в эмбеддинг."""
|
136 |
+
embedding = model.encode(text, convert_to_tensor=True, normalize_embeddings=True)
|
137 |
+
return embedding.cpu().numpy()
|
138 |
|
139 |
def get_movies_without_embeddings():
|
140 |
"""Получает список фильмов, для которых нужно создать эмбеддинги."""
|
|
|
170 |
(crc32_value, model_name))
|
171 |
result = cur.fetchone()
|
172 |
if result and result[0]:
|
173 |
+
# Нормализуем эмбеддинг после извлечения из БД
|
174 |
+
return normalize(np.array(result[0]).reshape(1, -1))[0]
|
175 |
except Exception as e:
|
176 |
logging.error(f"Ошибка при получении эмбеддинга из БД: {e}")
|
177 |
return None
|
|
|
179 |
def insert_embedding(conn, table_name, movie_id, embedding_crc32, string_crc32, embedding):
|
180 |
"""Вставляет эмбеддинг в базу данных."""
|
181 |
try:
|
182 |
+
# Нормализуем эмбеддинг перед сохранением
|
183 |
+
normalized_embedding = normalize(embedding.reshape(1, -1))[0]
|
184 |
with conn.cursor() as cur:
|
185 |
cur.execute(f"""
|
186 |
INSERT INTO {table_name}
|
187 |
(movie_id, embedding_crc32, string_crc32, model_name, embedding)
|
188 |
VALUES (%s, %s, %s, %s, %s)
|
189 |
ON CONFLICT (movie_id) DO NOTHING
|
190 |
+
""", (movie_id, embedding_crc32, string_crc32, model_name, normalized_embedding.tolist()))
|
191 |
conn.commit()
|
192 |
return True
|
193 |
except Exception as e:
|
|
|
271 |
# Находим название фильма по ID
|
272 |
for movie in movies_data:
|
273 |
if movie['id'] == movie_id:
|
274 |
+
movie_embeddings[movie['name']] = normalize(np.array(embedding).reshape(1, -1))[0]
|
275 |
break
|
276 |
logging.info(f"Загружено {len(movie_embeddings)} эмбеддингов фильмов.")
|
277 |
except Exception as e:
|