Spaces:
Build error
Build error
update
Browse files
train.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
# =================== CÓDIGO
|
| 2 |
|
| 3 |
import os
|
| 4 |
import glob
|
|
@@ -7,12 +7,39 @@ import csv
|
|
| 7 |
import numpy as np
|
| 8 |
from tqdm.auto import tqdm
|
| 9 |
from sentence_transformers import SentenceTransformer
|
|
|
|
| 10 |
|
| 11 |
# --- CONFIGURAÇÕES ---
|
| 12 |
-
#
|
| 13 |
DATA_DIR = "/app/dados"
|
|
|
|
|
|
|
| 14 |
# ---------------------
|
| 15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
def serialize_item_to_text(item_dict):
|
| 17 |
"""Converte um dicionário em uma string de texto."""
|
| 18 |
parts = []
|
|
@@ -29,16 +56,19 @@ def serialize_item_to_text(item_dict):
|
|
| 29 |
|
| 30 |
def main():
|
| 31 |
"""Função principal para carregar dados e gerar embeddings."""
|
|
|
|
|
|
|
|
|
|
| 32 |
csv.field_size_limit(10_000_000)
|
| 33 |
|
| 34 |
-
# Procura recursivamente por todos os arquivos .json e .csv no diretório de
|
| 35 |
-
all_files = glob.glob(
|
| 36 |
-
glob.glob(
|
| 37 |
|
| 38 |
-
print(f"🔎 Encontrados {len(all_files)} arquivos para processar
|
| 39 |
|
| 40 |
if not all_files:
|
| 41 |
-
print("⚠️ Nenhum arquivo .csv ou .json encontrado. Verifique
|
| 42 |
return
|
| 43 |
|
| 44 |
documents = []
|
|
@@ -68,7 +98,6 @@ def main():
|
|
| 68 |
cache_path = os.environ.get('SENTENCE_TRANSFORMERS_HOME', '/app/cache/torch')
|
| 69 |
|
| 70 |
print("Carregando modelo avançado: intfloat/e5-mistral-7b-instruct")
|
| 71 |
-
print("Isso pode levar vários minutos, pois o modelo é grande.")
|
| 72 |
model = SentenceTransformer(
|
| 73 |
'intfloat/e5-mistral-7b-instruct',
|
| 74 |
cache_folder=cache_path,
|
|
@@ -93,4 +122,4 @@ def main():
|
|
| 93 |
if __name__ == "__main__":
|
| 94 |
main()
|
| 95 |
|
| 96 |
-
#
|
|
|
|
| 1 |
+
# =================== CÓDIGO FINAL COM LÓGICA DE DESCOMPACTAÇÃO ===================
|
| 2 |
|
| 3 |
import os
|
| 4 |
import glob
|
|
|
|
| 7 |
import numpy as np
|
| 8 |
from tqdm.auto import tqdm
|
| 9 |
from sentence_transformers import SentenceTransformer
|
| 10 |
+
import zipfile # Módulo para lidar com arquivos .zip
|
| 11 |
|
| 12 |
# --- CONFIGURAÇÕES ---
|
| 13 |
+
# Diretório onde o Dockerfile clonou os dados do seu Space
|
| 14 |
DATA_DIR = "/app/dados"
|
| 15 |
+
# Diretório para onde os arquivos serão extraídos
|
| 16 |
+
EXTRACT_DIR = "/app/dados_extraidos"
|
| 17 |
# ---------------------
|
| 18 |
|
| 19 |
+
def setup_data():
|
| 20 |
+
"""Procura por arquivos .zip no diretório de dados e os descompacta."""
|
| 21 |
+
print("Procurando por arquivos .zip para descompactar...")
|
| 22 |
+
os.makedirs(EXTRACT_DIR, exist_ok=True)
|
| 23 |
+
|
| 24 |
+
zip_files_found = glob.glob(DATA_DIR + "/**/*.zip", recursive=True)
|
| 25 |
+
|
| 26 |
+
if not zip_files_found:
|
| 27 |
+
print("Nenhum arquivo .zip encontrado. Assumindo que os arquivos já estão extraídos.")
|
| 28 |
+
# Se não houver zips, usamos o diretório de dados original
|
| 29 |
+
return DATA_DIR
|
| 30 |
+
|
| 31 |
+
for zip_filepath in zip_files_found:
|
| 32 |
+
print(f"Descompactando '{zip_filepath}' para '{EXTRACT_DIR}'...")
|
| 33 |
+
try:
|
| 34 |
+
with zipfile.ZipFile(zip_filepath, 'r') as zip_ref:
|
| 35 |
+
zip_ref.extractall(EXTRACT_DIR)
|
| 36 |
+
print(f"✅ Arquivo '{os.path.basename(zip_filepath)}' descompactado com sucesso.")
|
| 37 |
+
except Exception as e:
|
| 38 |
+
print(f"⚠️ Falha ao descompactar '{zip_filepath}': {e}")
|
| 39 |
+
|
| 40 |
+
# Retorna o diretório onde os arquivos foram extraídos
|
| 41 |
+
return EXTRACT_DIR
|
| 42 |
+
|
| 43 |
def serialize_item_to_text(item_dict):
|
| 44 |
"""Converte um dicionário em uma string de texto."""
|
| 45 |
parts = []
|
|
|
|
| 56 |
|
| 57 |
def main():
|
| 58 |
"""Função principal para carregar dados e gerar embeddings."""
|
| 59 |
+
# Descompacta os dados e obtém o diretório com os arquivos processáveis
|
| 60 |
+
process_dir = setup_data()
|
| 61 |
+
|
| 62 |
csv.field_size_limit(10_000_000)
|
| 63 |
|
| 64 |
+
# Procura recursivamente por todos os arquivos .json e .csv no diretório de extração
|
| 65 |
+
all_files = glob.glob(process_dir + "/**/*.json", recursive=True) + \
|
| 66 |
+
glob.glob(process_dir + "/**/*.csv", recursive=True)
|
| 67 |
|
| 68 |
+
print(f"\n🔎 Encontrados {len(all_files)} arquivos para processar após descompactação.")
|
| 69 |
|
| 70 |
if not all_files:
|
| 71 |
+
print("⚠️ Nenhum arquivo .csv ou .json encontrado. Verifique o conteúdo do seu .zip.")
|
| 72 |
return
|
| 73 |
|
| 74 |
documents = []
|
|
|
|
| 98 |
cache_path = os.environ.get('SENTENCE_TRANSFORMERS_HOME', '/app/cache/torch')
|
| 99 |
|
| 100 |
print("Carregando modelo avançado: intfloat/e5-mistral-7b-instruct")
|
|
|
|
| 101 |
model = SentenceTransformer(
|
| 102 |
'intfloat/e5-mistral-7b-instruct',
|
| 103 |
cache_folder=cache_path,
|
|
|
|
| 122 |
if __name__ == "__main__":
|
| 123 |
main()
|
| 124 |
|
| 125 |
+
# =================================================================================
|