Update app.py
Browse files
app.py
CHANGED
@@ -8,14 +8,13 @@ import queue
|
|
8 |
import torch
|
9 |
|
10 |
# Загружаем модель
|
11 |
-
model_name = "
|
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
|
60 |
|
61 |
-
#
|
62 |
-
query_prompt = "Инструкция: Найди релевантные фильмы по запросу. \n Запрос: "
|
63 |
|
64 |
-
def encode_string(text
|
65 |
-
"""Кодирует строку в
|
66 |
-
|
67 |
-
|
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 |
-
|
|
|
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 |
-
|
|
|
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:
|