ozzono commited on
Commit
aea536d
·
verified ·
1 Parent(s): 6b53913

Upload backend/build_bert_model.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. backend/build_bert_model.py +56 -0
backend/build_bert_model.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from gensim.models import KeyedVectors
3
+ from sentence_transformers import SentenceTransformer
4
+
5
+ MODEL_DIR = os.path.dirname(os.path.abspath(__file__))
6
+ # STRATEGY G: We load the exact Golden Dataset (presanitized 50k)
7
+ VOCAB_FILE = os.path.join(MODEL_DIR, "es_freq_50k.txt")
8
+
9
+ def build_bert_vectors():
10
+ print(f"Loading pre-sanitized vocabulary from {VOCAB_FILE}...")
11
+
12
+ if not os.path.exists(VOCAB_FILE):
13
+ print(f"ERROR: {VOCAB_FILE} not found. Please generate the golden dataset first.")
14
+ return
15
+
16
+ lemmatized_vocab = []
17
+ seen = set()
18
+ with open(VOCAB_FILE, 'r', encoding='utf-8') as f:
19
+ for line in f:
20
+ word = line.strip().lower()
21
+ if word and word not in seen:
22
+ lemmatized_vocab.append(word)
23
+ seen.add(word)
24
+
25
+ vocab_size_k = round(len(lemmatized_vocab) / 1000)
26
+ print(f"Loaded {len(lemmatized_vocab)} exact golden lemmas ({vocab_size_k}k model).")
27
+
28
+ versioned_filename = f"es_bert_vectors_{vocab_size_k}k.kv"
29
+ NEW_MODEL_PATH = os.path.join(MODEL_DIR, versioned_filename)
30
+
31
+ print("Loading BERT sentence transformer model...")
32
+ model_name = "hiiamsid/sentence_similarity_spanish_es"
33
+ encoder = SentenceTransformer(model_name)
34
+
35
+ # Determine vector size
36
+ sample_vec = encoder.encode("hola")
37
+ vector_size = len(sample_vec)
38
+ print(f"Model vectors have {vector_size} dimensions.")
39
+
40
+ print(f"Encoding {len(lemmatized_vocab)} lemmas in batches... this might take a few minutes.")
41
+ embeddings = encoder.encode(lemmatized_vocab, batch_size=256, show_progress_bar=True, normalize_embeddings=True)
42
+
43
+ print("Creating new Gensim KeyedVectors...")
44
+ bert_kv = KeyedVectors(vector_size=vector_size)
45
+ bert_kv.add_vectors(lemmatized_vocab, embeddings)
46
+
47
+ vocab_size_k = round(len(lemmatized_vocab) / 1000)
48
+ versioned_filename = f"es_bert_vectors_{vocab_size_k}k.kv"
49
+ versioned_filepath = os.path.join(MODEL_DIR, versioned_filename)
50
+
51
+ print(f"Saving BERT embeddings to {versioned_filepath}...")
52
+ bert_kv.save(versioned_filepath)
53
+ print(f"Done! You can now configure app.py and embeddings.py to use {versioned_filename}")
54
+
55
+ if __name__ == "__main__":
56
+ build_bert_vectors()