opex792 commited on
Commit
28ad39d
·
verified ·
1 Parent(s): a6d25e6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +10 -5
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
- return model.encode(text, convert_to_tensor=True, normalize_embeddings=True)
 
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
- return np.array(result[0])
 
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, embedding.tolist()))
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: