opex792 commited on
Commit
f3fcfe9
·
verified ·
1 Parent(s): 8081474

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -18
app.py CHANGED
@@ -8,14 +8,13 @@ import queue
8
  import torch
9
 
10
  # Загружаем модель
11
- model_name = "HIT-TMG/KaLM-embedding-multilingual-mini-instruct-v1.5"
12
  model = SentenceTransformer(model_name)
13
- # model.max_seq_length = 8192 # Убираем явное ограничение длины последовательности
14
 
15
  # Имя файла для сохранения эмбеддингов
16
- embeddings_file = f"movie_embeddings_{model_name.replace('/', '_')}.json"
17
  # Имя файла для сохранения эмбеддингов запросов
18
- query_embeddings_file = f"query_embeddings_{model_name.replace('/', '_')}.json"
19
 
20
  # Загружаем данные из файла movies.json
21
  try:
@@ -56,17 +55,15 @@ search_in_progress = False
56
  movie_embeddings_lock = threading.Lock()
57
 
58
  # Размер пакета для обработки эмбеддингов
59
- batch_size = 32 # Увеличиваем размер пакета в 2 раза
60
 
61
- # Инструкция для запроса
62
- query_prompt = "Инструкция: Найди релевантные фильмы по запросу. \n Запрос: "
63
 
64
- def encode_string(text, prompt=None):
65
- """Кодирует строку в эмбеддинг с использованием инструкции, если она задана."""
66
- if prompt:
67
- return model.encode(text, prompt=prompt, convert_to_tensor=True, normalize_embeddings=True)
68
- else:
69
- return model.encode(text, convert_to_tensor=True, normalize_embeddings=True)
70
 
71
  def process_movies():
72
  """
@@ -112,8 +109,7 @@ def process_movies():
112
 
113
  def get_query_embedding(query):
114
  """
115
- Возвращает эмбеддинг для запроса с инструкцией.
116
- Если эмбеддинг уже создан, возвращает его из словаря.
117
  Иначе создает эмбеддинг, сохраняет его и возвращает.
118
  """
119
  if query in query_embeddings:
@@ -121,7 +117,8 @@ def get_query_embedding(query):
121
  return query_embeddings[query]
122
  else:
123
  print(f"Создается эмбеддинг для запроса '{query}'...")
124
- embedding = encode_string(query, prompt=query_prompt).tolist()
 
125
  query_embeddings[query] = embedding
126
  # Сохраняем эмбеддинги запросов в файл
127
  with open(query_embeddings_file, "w", encoding="utf-8") as f:
@@ -131,7 +128,7 @@ def get_query_embedding(query):
131
 
132
  def search_movies(query, top_k=10):
133
  """
134
- Ищет наиболее похожие фильмы по запросу с использованием инструкции.
135
 
136
  Args:
137
  query: Текстовый запрос.
@@ -146,7 +143,8 @@ def search_movies(query, top_k=10):
146
  print(f"\n\033[1mПоиск по запросу: '{query}'\033[0m")
147
 
148
  print(f"Начало создания эмбеддинга для запроса: {time.strftime('%Y-%m-%d %H:%M:%S')}")
149
- query_embedding_tensor = encode_string(query, prompt=query_prompt)
 
150
  print(f"Окончание создания эмбеддинга для запроса: {time.strftime('%Y-%m-%d %H:%M:%S')}")
151
 
152
  with movie_embeddings_lock:
 
8
  import torch
9
 
10
  # Загружаем модель
11
+ model_name = "BAAI/bge-m3" # ИЗМЕНЕНО: Используем BGE-M3
12
  model = SentenceTransformer(model_name)
 
13
 
14
  # Имя файла для сохранения эмбеддингов
15
+ embeddings_file = f"movie_embeddings_{model_name.replace('/', '_')}.json" # ИЗМЕНЕНО: изменено имя файла
16
  # Имя файла для сохранения эмбеддингов запросов
17
+ query_embeddings_file = f"query_embeddings_{model_name.replace('/', '_')}.json" # ИЗМЕНЕНО: изменено имя файла
18
 
19
  # Загружаем данные из файла movies.json
20
  try:
 
55
  movie_embeddings_lock = threading.Lock()
56
 
57
  # Размер пакета для обработки эмбеддингов
58
+ batch_size = 32
59
 
60
+ # ИЗМЕНЕНО: убрана инструкция для запроса, так как она не нужна для BGE-M3
61
+ # query_prompt = "Инструкция: Найди релевантные фильмы по запросу. \n Запрос: "
62
 
63
+ def encode_string(text):
64
+ """Кодирует строку в эмбеддинг."""
65
+ # ИЗМЕНЕНО: убран аргумент prompt
66
+ return model.encode(text, convert_to_tensor=True, normalize_embeddings=True)
 
 
67
 
68
  def process_movies():
69
  """
 
109
 
110
  def get_query_embedding(query):
111
  """
112
+ Возвращает эмбеддинг для запроса. Если эмбеддинг уже создан, возвращает его из словаря.
 
113
  Иначе создает эмбеддинг, сохраняет его и возвращает.
114
  """
115
  if query in query_embeddings:
 
117
  return query_embeddings[query]
118
  else:
119
  print(f"Создается эмбеддинг для запроса '{query}'...")
120
+ # ИЗМЕНЕНО: убран prompt
121
+ embedding = encode_string(query).tolist()
122
  query_embeddings[query] = embedding
123
  # Сохраняем эмбеддинги запросов в файл
124
  with open(query_embeddings_file, "w", encoding="utf-8") as f:
 
128
 
129
  def search_movies(query, top_k=10):
130
  """
131
+ Ищет наиболее похожие фильмы по запросу.
132
 
133
  Args:
134
  query: Текстовый запрос.
 
143
  print(f"\n\033[1mПоиск по запросу: '{query}'\033[0m")
144
 
145
  print(f"Начало создания эмбеддинга для запроса: {time.strftime('%Y-%m-%d %H:%M:%S')}")
146
+ # ИЗМЕНЕНО: вызов функции get_query_embedding
147
+ query_embedding_tensor = torch.tensor(get_query_embedding(query))
148
  print(f"Окончание создания эмбеддинга для запроса: {time.strftime('%Y-%m-%d %H:%M:%S')}")
149
 
150
  with movie_embeddings_lock: