Ce face Sentence Transformers (embeddings și CrossEncoder)
Sentence Transformers calculează embeddings (vectori) pentru propoziții și paragrafe cu modele SentenceTransformer, iar model.similarity() calculează scorurile de similaritate între ele. Pe Hub există peste 15.000 de modele compatibile, inclusiv multe din clasamentul MTEB.
Pentru reranking, CrossEncoder primește perechi (întrebare, pasaj) și dă un scor; model.rank(query, passages) ordonează direct pasajele. Biblioteca are și SparseEncoder (embeddings sparse) și MultiVectorEncoder (embeddings pe tokeni, stil ColBERT).
encode() nu normalizează vectorii implicit. Dacă baza vectorială folosește produsul scalar și vrei echivalentul similarității cosinus, setezi normalize_embeddings=True (unele modele includ deja un modul de normalizare).
Sintaxă și opțiuni
| Opțiune / Parametru | Descriere |
|---|---|
SentenceTransformer(model_id) |
Încarcă modelul de embeddings. |
encode(texte, normalize_embeddings=...) |
Calculează vectorii; normalizarea este opțională. |
similarity(a, b) |
Scorurile de similaritate dintre două seturi de vectori. |
CrossEncoder(model_id) |
Model de reranking. |
CrossEncoder.rank(query, passages, return_documents=True) |
Ordonează pasajele după relevanță. |
SparseEncoder / MultiVectorEncoder |
Embeddings sparse / pe tokeni. |
Exemple practice
Exemplul 1: Reranking cu CrossEncoder
from sentence_transformers import CrossEncoder
reranker = CrossEncoder("cross-encoder/ms-marco-MiniLM-L6-v2")
ranks = reranker.rank("Cum resetez parola?", ["Pasul 1: apasă pe Am uitat parola...", "Programul de lucru este 9-17."], return_documents=True)
Exemplul 2: Vectori normalizați pentru produs scalar
embeddings = model.encode(texte, normalize_embeddings=True)
Greșeli frecvente și bune practici
- Presupui că vectorii sunt normalizați.
encode()nu normalizează implicit; foloseștenormalize_embeddings=Truecând baza vectorială cere asta. - Folosești pentru română un model antrenat doar pe engleză. Alege un model multilingv și verifică-l pe date proprii.