🎯 Definicja

Embedding to sposób reprezentowania danych — zwłaszcza tekstowych — w postaci wektorów liczb w przestrzeni o ustalonym wymiarze. Te reprezentacje w postaci embeddingów odzwierciedlają semantyczne podobieństwa i relacje między słowami, zdaniami lub dokumentami, co umożliwia ich przetwarzanie przez modele uczenia maszynowego.

Embeddingi są kluczowe w takich zadaniach jak: wyszukiwanie semantyczne, klasyfikacja tekstów, klasteryzacja, rekomendacje, RAG (Retrieval Augmented Generation) i modele językowe.

🔑 Kluczowe punkty

  • Dane tekstowe są przekształcane w wektory o stałej długości reprezentujące znaczenie.
  • Im bliżej dwa embeddingi w przestrzeni wektorowej, tym bardziej semantycznie podobne są źródła danych.
  • Embeddingi mogą być obliczane dla:
    • pojedynczych słów (Word Embedding)
    • całych zdań lub akapitów (Sentence Embedding)
    • obrazów, kodu, dokumentów itp.
  • Trening embeddingów można przeprowadzić samodzielnie, ale częściej stosuje się modele pretrenowane (np. Word2Vec, BERT, OpenAI Embeddings, Specter, SentenceTransformers).

🧠 Word Embedding

Word embedding to metoda przedstawienia pojedynczych słów w postaci gęstych wektorów cech. Każde słowo otrzymuje współrzędne, które niosą informacje semantyczne.

Przykład: Word2Vec

  • Model trenuje reprezentacje, w których np.
    vec("king") - vec("man") + vec("woman") ≈ vec("queen")
  • Popularne podejścia:
    • Word2Vec (CBOW, skip-gram)
    • GloVe (Global Vectors)
    • FastText (obsługa prefiksów/sufiksów)

Ograniczenia

  • Reprezentacja słowa jest statyczna — brak zależności od kontekstu zdania.
  • Nieodporne na wieloznaczność (“bank” może oznaczać instytucję lub brzeg rzeki).

🧩 Sentence Embedding

Sentence embedding to sposób reprezentowania całych zdań lub dokumentów w formie pojedynczego wektora, który uwzględnia kontekst i relacje między słowami.

Modele

  • BERT, RoBERTa, DistilBERT + warstwa agregująca (CLS, mean pooling, concat)
  • Sentence-BERT – dostrojony do tworzenia sensownych reprezentacji zdań
  • Embeddingi OpenAI (np. text-embedding-ada-002) – do semantycznego wyszukiwania i RAG
  • Universal Sentence Encoder (Google)

Zalety

  • Kontekstualne — embeddingi słowa różnią się w zależności od zdania
  • Idealne do porównań podobieństwa, klasyfikacji, analizy sentymentu, wyszukiwania semantycznego

Przykład podobieństwa semantycznego:

from sentence_transformers import SentenceTransformer, util
 
model = SentenceTransformer('all-MiniLM-L6-v2')
emb1 = model.encode("Słońce świeci dziś jasno", convert_to_tensor=True)
emb2 = model.encode("Dzisiejszy dzień jest bardzo słoneczny", convert_to_tensor=True)
 
similarity = util.cos_sim(emb1, emb2)
print(f"Podobieństwo kosinusowe: {similarity.item():.2f}")

💡 Przykład zastosowania

W systemie przeszukiwania dokumentacji technicznej zapytania użytkownika są zamieniane na embedding (wektor) i porównywane z embeddingami rozdziałów dokumentów. Następnie wybrane materiały o największym podobieństwie są zwracane użytkownikowi lub dołączane jako kontekst do modelu językowego (RAG).

📌 Źródła

👽 Brudnopis

  • embedding = “znaczenie jako liczby”
  • Używane w wyszukiwarkach semantycznych, Matchers, klasyfikatorach
  • Wektory = dense, np. 384-elementowe → np. cosine similarity
  • W NLP = fundament nowoczesnych modeli w pytaniu/odpowiedzi
  • RAG, Vectordb (Qdrant, Pinecone) opierają się na embeddingach
  • Open source: Hugginface Transformers, sentence-transformers