Çok basitçe - Sentence Transformer Nedir? - çalışan örnek
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:
- Model adı HuggingFace üzerinden bulunur
- Eğer bilgisayarda yoksa indirilir
- Belleğe yüklenir
- 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:
- Sıra-duyarlı (order-sensitive) ceza eklemek
- Grafik temelli yöntemle karşılaştırmak
- Aynı örneği RelationIndex / trace zincirleri ile bağlamak
- 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
