Tuesday, 20 January 2026

Sentence Transformer Nedir?

 

Çok basitçe - Sentence Transformer Nedir? - çalışan örnek

Ali Riza Saral, #OPEN_TO_WORK
Independent AI Researcher

1.   Sentence Transformer Nedir?

Çalışan Python kodu: https://github.com/arsaral/test-project_sentence_transformer/blob/main/sentence_transformer_pytorch.py

1.1. Temel problem

Bilgisayarlar metni doğrudan “anlamaz”. Bir metni:

“StepA → StepB → StepC”

başka bir metinle karşılaştırabilmek için, bu metni sayısal bir temsile dönüştürmek gerekir.

İşte Sentence Transformer bu işi yapar:

Bir cümleyi (veya kısa metni) sabit uzunlukta bir vektöre (embedding) dönüştürür; bu vektörler arasındaki geometrik yakınlık, anlamsal benzerliği temsil eder.


1.2. Klasik yöntemlerden farkı

Yöntem ...........................Sorun

Bag-of-Words..................Kelime sırası ve anlam kaybolur

TF-IDF ...............................Anlamsal yakınlık zayıf

Word2Vec........................Kelime düzeyinde, cümle değil

BERT (ham)......................Cümle karşılaştırması için verimsiz

Sentence Transformer, BERT tabanlı modelleri şu amaçla optimize eder:

“İki cümle anlamsal olarak ne kadar benzer?”

Bu nedenle:

  • Arama
  • Kümeleme
  • Benzer süreç / iz (trace) bulma
  • Anlamsal eşleştirme

gibi işlerde çok etkilidir.


1.3. Embedding kavramı (çok önemli)

Bir cümle şu hale getirilir:

"StepA → StepB → StepC"

[0.012, -0.334, 0.998, ..., -0.104]   (örneğin 384 boyutlu)

Bu vektör:

  • Anlamı sayısal uzayda temsil eder
  • Benzer cümleler → birbirine yakın vektörler
  • Farklı cümleler → uzak vektörler


2. Kullandığımız model: all-MiniLM-L6-v2

Bu model:

  • 384 boyutlu embedding üretir
  • Hızlıdır
  • Genel amaçlıdır
  • Eğitim, demo ve üretim için güvenlidir

Yani: “her iş için makul bir varsayılan” modeldir.


3. Programın satır satır açıklaması

Aşağıda, verdiğimiz programı mantıksal bloklar halinde açıklıyorum.


3.1. Kodlama bildirimi ve üst bilgi

# -*- coding: utf-8 -*-

"""

Created on Thu Jul 24 12:53:07 2025

@author: ali.saral

"""

  • UTF-8: Türkçe karakterler ve özel semboller sorunsuz çalışır
  • Docstring: dosya açıklaması, çalışmayı etkilemez


3.2. Gerekli kütüphaneler

from sentence_transformers import SentenceTransformer, util

  • SentenceTransformer: modeli yükler metni embedding’e çevirir
  • util: yardımcı matematik fonksiyonları burada cosine similarity kullanacağız


3.3. Modelin yüklenmesi

model = SentenceTransformer('all-MiniLM-L6-v2')

Bu satırda olanlar:

  1. Model adı HuggingFace üzerinden bulunur
  2. Eğer bilgisayarda yoksa indirilir
  3. Belleğe yüklenir
  4. Artık model.encode() çağrılabilir

Bu model önceden eğitilmiştir; sizin veriyle eğitmenize gerek yoktur.


3.4. Karşılaştırılacak metinler (corpus)

sequences = [

"StepA → StepB → StepC → End",

"Init → StepA → StepB → StepC → End",

"StepB → StepC",

"Init → StepA",

"StepC → End → Finalize"

]

Burada:

  • Her string bağımsız bir cümle gibi ele alınır
  • Oklar (→) model için sadece karakterdir
  • Model, kelime örüntülerini ve bağlamı öğrenmiştir

Bu liste:

“Arama yapılacak bilgi havuzu”dur.


3.5. Metinlerin embedding’e dönüştürülmesi

embeddings = model.encode(

sequences,

convert_to_tensor=True

)

Bu satır kritik önemdedir.

  • sequences: liste halinde metinler
  • encode: her metni vektöre çevirir
  • convert_to_tensor=True: sonuç PyTorch tensor olur hızlı matematiksel işlemler yapılır

Sonuç:

embeddings.shape = (5, 384)

Yani:

  • 5 cümle
  • her biri 384 boyutlu


3.6. Arama sorgusu (query)

query = "StepA → StepB → StepC"

Bu:

  • Benzerini aradığınız metindir
  • Tek bir cümledir


3.7. Sorgunun embedding’i

query_embedding = model.encode(

query,

convert_to_tensor=True

)

Sonuç:

query_embedding.shape = (384,)

Yani:

  • Tek vektör
  • Ama aynı uzayda

Bu çok önemli:

Karşılaştırılan tüm vektörler aynı uzayda olmalıdır.


3.8. Cosine similarity hesaplama

cosine_scores = util.cos_sim(

query_embedding,

embeddings

)[0]

Cosine similarity şunu ölçer:

İki vektörün yönü ne kadar benzer?

  • Değer aralığı: [-1, 1]
  • Pratikte: 1.0 → çok benzer 0.7+ → oldukça benzer 0.3 → zayıf 0 → ilgisiz

Sonuç:

cosine_scores = [0.91, 0.87, 0.75, 0.42, 0.38]


3.9. Benzerliğe göre sıralama

top_results = cosine_scores.argsort(descending=True)

Bu satır:

  • Skorları büyükten küçüğe
  • indeks bazında sıralar

Örneğin:

[0, 1, 2, 3, 4]


3.10. Sonuçların yazdırılması

print("\nSearch results for:", query)

for idx in top_results:

print(

f"{sequences[idx]} "

f"(Score: {cosine_scores[idx]:.4f})"

)

Bu döngü:

  • En benzerden en az benzere
  • Metni ve skorunu birlikte gösterir


4. Bu yaklaşımın felsefesi

Önemli nokta şudur:

Sentence Transformer kural çalıştırmaz, anlam uzayında yakınlık hesaplar.

Bu nedenle:

  • Eksik adımlar tolere edilir
  • Fazladan adımlar cezalandırılmaz
  • İnsan sezgisine yakın sonuçlar verir


5. Bir sonraki doğal adımlar

İsterseniz sırayla şunları yapabiliriz:

  1. Sıra-duyarlı (order-sensitive) ceza eklemek
  2. Grafik temelli yöntemle karşılaştırmak
  3. Aynı örneği RelationIndex / trace zincirleri ile bağlamak
  4. Akademik sunum/slayt versiyonuna dönüştürmek

Hangisiyle devam edelim istersiniz?

Kısaca sequence transformerdan farkı nedir bahseder misiniz uygun bir yerinde bu açıklamanın?

Elbette. Aşağıda bunu kısa, net ve kavramsal olarak doğru biçimde, az önceki açıklamanın içine doğal bir ara başlık olarak yerleştiriyorum. Amaç: neden Sentence Transformer kullanıyoruz, neden “sequence transformer” değil? sorusunu tek bakışta cevaplamak.


(Ara Başlık) Sentence Transformer ile “Sequence Transformer” Arasındaki Temel Fark

Bu iki kavram sıkça karıştırılır, ancak amaçları tamamen farklıdır.

1. Sequence Transformer (klasik Transformer)

Girdi → Çıktı odaklıdır.

Temel kullanım alanları:

  • Makine çevirisi
  • Metin üretimi
  • Zaman serisi tahmini
  • Kod üretimi

Özellikleri:

  • Token sırasına çok duyarlıdır
  • Her token için ayrı temsil üretir
  • Çıktı bir sekanstır

Örnek:

Girdi :  A B C

Çıktı :  B C D

Yani:

“Bu diziden sonra ne gelir?”


2. Sentence Transformer

Anlam → vektör odaklıdır.

Temel kullanım alanları:

  • Benzerlik araması
  • Kümeleme
  • Bilgi geri çağırma
  • Süreç / iz (trace) karşılaştırma

Özellikleri:

  • Tüm cümleyi tek bir vektöre indirger
  • Çıktı bir embedding’dir
  • Karşılaştırma için optimize edilmiştir

Örnek:

"StepA → StepB → StepC"

[0.12, -0.77, ..., 0.33]

Yani:

“Bu ifade diğerlerine ne kadar benziyor?”


3. En kritik fark (tek cümleyle)

Sequence Transformer ne üreteceğini, Sentence Transformer neye benzediğini öğrenir.


4. Neden bu örnekte Sentence Transformer doğru seçim?

Sizin yaptığınız şey:

  • Bir zinciri başka zincirlerle karşılaştırmak
  • Tam eşleşme değil, anlamsal yakınlık aramak
  • Kısmi örtüşmeleri değerli görmek

Bu durumda:

Gereksinim

Doğru araç

Tek çıktı vektörü

Sentence Transformer

Hızlı karşılaştırma

Sentence Transformer

Soft benzerlik

Sentence Transformer

Üretim / tahmin

Token bazlı çıktı

Sequence Transformer kullanılsaydı:

  • Her adım için çıktı üretirdi
  • Karşılaştırma zorlaşırdı
  • Ek mimari gerekir (pooling, loss, vb.)


5. Kısa sezgisel benzetme

  • Sequence Transformer: “Bu melodiden sonra hangi nota gelir?”
  • Sentence Transformer: “Bu melodi, diğer melodilere ne kadar benziyor?” ,
  • #sentenceTransformer #sequenceTransformer #transformer #python