Sentence Transformers (Cümle Dönüştürücüler)

Sentence Transformers (SBERT), cümle ve paragrafları anlamsal olarak karşılaştırılabilir yoğun vektörlere dönüştüren, RAG ve semantik arama sistemlerinde yaygın kullanılan Transformer tabanlı kütüphane ve model ailesidir.

Sentence Transformers, 2019 yılında Nils Reimers ve Iryna Gurevych tarafından geliştirilen SBERT (Sentence-BERT) mimarisine dayanan, metin cümlelerini ve paragraflarını anlamsal açıdan karşılaştırılabilir sabit boyutlu yoğun vektörlere dönüştüren Transformer tabanlı kütüphane ve model ailesidir. Orijinal BERT modelinin cümle benzerliği hesaplamadaki yetersizliğini gidermek amacıyla tasarlanan SBERT, Siyamez ağ (Siamese network) yapısıyla iki cümleyi eşzamanlı olarak kodlayarak anlamsal benzerlik puanı üretir. Klasik BERT modelinde iki cümleyi karşılaştırmak için her çift ayrı ayrı modelden geçirilmek zorundaydı; bu durum n cümle için n×(n-1)/2 model çağrısı gerektiriyordu. SBERT bu sorunu her cümleyi tek seferinde sabit boyutlu bir vektöre dönüştürerek çözdü: tüm corpus önce encode edilir, ardından cosine similarity veya dot product ile anlık karşılaştırma yapılabilir. Bu yaklaşım hesaplama süresini dramatik biçimde kısaltır — 10.000 cümle için yaklaşık 65 saatten 5 saniyeye iner. Kütüphane, Natural Language Inference (NLI) verileriyle triplet loss veya contrastive learning kullanılarak ince ayar yapılmış çok sayıda model barındırır. Popüler modeller arasında all-MiniLM-L6-v2 (hız-kalite dengesi, 384 boyutlu vektör), all-mpnet-base-v2 (yüksek kalite) ve paraphrase-multilingual-mpnet-base-v2 (50'den fazla dil desteği) öne çıkar. Türkçe için emrecan/bert-base-turkish-cased-mean-nli-stsb-tr ve benzeri topluluk modelleri geliştirilmiştir. Sentence Transformers'ın en yaygın kullanım senaryoları şunlardır: anlamsal arama (semantic search), RAG (Retrieval-Augmented Generation) sistemlerinde belge gömme, metin kümeleme, çift metin eşleşme (bitext mining), soru-cevap sistemleri ve içerik önerisi. Özellikle RAG pipeline'larında, kullanıcı sorgusu ve belge parçalarının (chunk) vektöre dönüştürülmesinde Sentence Transformers fiili standart haline gelmiştir. Python'da pip install sentence-transformers ile kurulabilen kütüphane, Hugging Face Hub ile entegre çalışır; yüzlerce önceden eğitilmiş model doğrudan indirilebilir ve kullanılabilir.

Sentence Transformers Nedir ve Neden Gereklidir?

Sentence Transformers (SBERT), cümle ve paragrafları sabit boyutlu, yoğun nümerik vektörlere dönüştüren bir yapay zeka kütüphanesi ve model ailesidir. 2019 yılında Nils Reimers ve Iryna Gurevych tarafından Darmstadt Üniversitesi'nde geliştirilen bu yaklaşım, orijinal BERT modelinin kritik bir kısıtlamasını giderir.

Klasik BERT iki cümleyi karşılaştırmak için her çifti modelden geçirmek zorundaydı; bu durum büyük corpus'larda hesaplama açısından son derece pahalıydı. Örneğin 10.000 cümlelik bir veri kümesinde tüm çiftleri karşılaştırmak yaklaşık 65 saat sürerdi. SBERT, her cümleyi bir kez encode ederek sabit boyutlu bir vektöre (embedding) indirger; ardından milyonlarca cümle arasındaki benzerlik cosine similarity veya dot product ile milisaniyeler içinde hesaplanabilir.

Bu mimari değişim, Sentence Transformers'ı semantik arama motorlarının, RAG sistemlerinin ve öneri algoritmalarının çekirdeğine taşımıştır. Geliştiriciler artık karmaşık model altyapısı yerine birkaç satır Python kodu ile cümle düzeyinde anlam karşılaştırması yapabilmektedir.

SBERT Mimarisi: Siamese Ağlar ve Mean Pooling

SBERT'in temel yapısı, ağırlıklarını paylaşan iki özdeş BERT encoder'dan oluşan bir Siamese (Siyamez) ağıdır. Her encoder, girdi cümlesini token gömülerinden oluşan bir vektör dizisine dönüştürür. Ardından pooling katmanı bu diziyi tek bir sabit boyutlu vektöre indirger.

Pooling stratejileri arasında en yaygını Mean Pooling'dir: tüm token vektörlerinin ortalaması alınarak cümle düzeyinde temsil elde edilir. Bunun yanı sıra CLS token'ı kullanmak veya maksimum değerleri seçmek (Max Pooling) de mümkündür; ancak ampirik sonuçlar Mean Pooling'in genellikle daha yüksek kalite sunduğunu göstermektedir.

Eğitim sürecinde model, doğal dil çıkarımı (NLI) verileri ve anlam benzerliği (STS — Semantic Textual Similarity) etiketleriyle ince ayar görür. Triplet loss kullanıldığında model, anlamca yakın cümleleri vektör uzayında birbirine yaklaştırırken anlamsız veya çelişkili cümleleri uzaklaştırmayı öğrenir. Modern modellerde ise MultipleNegativesRankingLoss ile daha verimli contrastive learning uygulanmaktadır.

Model boyutları küçükten büyüğe geniş bir aralık kapsar: all-MiniLM-L6-v2 yalnızca 22 milyon parametreyle 384 boyutlu vektör üretirken, all-mpnet-base-v2 110 milyon parametreyle 768 boyutlu, daha zengin temsiller sunar. Bu boyut farkı, depolama alanı ve arama hızı üzerinde doğrudan etkilidir.

Temel Kullanım Alanları

  • check_circle Semantik Arama: Kullanıcı sorgusu vektöre dönüştürülür, corpus'taki tüm belgeler de önceden encode edilmiştir. FAISS veya hnswlib gibi vektör indeksleriyle milisaniyeler içinde en anlamlı sonuçlar getirilir. Anahtar kelime eşleşmesi yerine anlam benzerliğine göre arama yapar.
  • check_circle RAG (Retrieval-Augmented Generation): RAG pipeline'larının belge gömme aşamasında Sentence Transformers fiili standart olarak kullanılır. Dökümanlar küçük parçalara (chunk) bölünür, her parça vektöre dönüştürülerek vektör veritabanına (Pinecone, Qdrant, Weaviate) kaydedilir. Sorguda en yakın parçalar LLM'e bağlam olarak aktarılır.
  • check_circle Metin Kümeleme: Binlerce belge vektöre dönüştürüldükten sonra K-Means, HDBSCAN veya Agglomerative Clustering gibi algoritmalar uygulanarak anlamsal olarak benzer gruplar otomatik oluşturulur. Haber arşivleme, müşteri geri bildirimi analizi ve konu modelleme bu yöntemle yapılır.
  • check_circle Çift Dil Eşleşme (Bitext Mining): Çok dilli modeller kullanıldığında farklı dillerdeki cümle çiftleri aynı vektör uzayına gömülür. Büyük paralel corpus oluşturmada ve çeviri kalitesi değerlendirmede bu özellik kritik rol oynar.
  • check_circle Soru-Cevap Sistemleri: Bilgi tabanındaki soru-cevap çiftleri encode edilir; kullanıcının yeni sorusu en yakın vektörlü soruyla eşleştirilir. FAQ otomasyonu ve müşteri desteği chatbot'larında yaygın kullanım senaryosudur.

Öne Çıkan Modeller

  • check_circle all-MiniLM-L6-v2: 384 boyutlu vektör, 22M parametre. En hızlı ve en hafif model; üretim ortamında hız öncelikli senaryolar için idealdir. Genel İngilizce görevlerde güçlü benchmark sonuçları sunar.
  • check_circle all-mpnet-base-v2: 768 boyutlu vektör, 110M parametre. Yüksek kaliteli semantik temsil için tercih edilir; hız konusunda MiniLM'den daha yavaş ancak doğruluk açısından daha güçlüdür.
  • check_circle paraphrase-multilingual-mpnet-base-v2: 50'den fazla dili aynı vektör uzayına gömer; Türkçe dahil çok dilli uygulamalar için ana modeldir. Farklı dillerdeki cümleler anlamsal olarak karşılaştırılabilir.
  • check_circle BGE-M3 (BAAI): 100'den fazla dil desteği ve hibrit retrieval (dense + sparse + multi-vector) ile modern RAG pipeline'larında giderek benimsenen yeni nesil modeldir. Uzun bağlam desteği öne çıkar.
  • check_circle emrecan/bert-base-turkish-cased-mean-nli-stsb-tr: Türkçe metinler için özelleştirilmiş topluluk modeli. Hugging Face Hub'da ücretsiz olarak erişilebilir; Türkçe anlamsal arama ve benzerlik görevlerinde çok dilli modellere kıyasla daha tutarlı sonuç verir.

Python ile Kullanım: Temel Kod Örnekleri

Sentence Transformers ile çalışmaya başlamak oldukça basittir. Kurulum pip install sentence-transformers komutuyla tamamlanır; kütüphane, PyTorch ve Hugging Face Transformers üzerine inşa edilmiştir.

Temel kullanım şu adımlarla gerçekleşir: Önce SentenceTransformer sınıfıyla model yüklenir, ardından encode() metoduyla cümleler vektöre dönüştürülür. İki cümle arasındaki benzerlik util.cos_sim() fonksiyonuyla hesaplanır. Çok büyük corpus'lar için batch encoding ve GPU desteği devreye alınabilir; bu durum işlem süresini onlarca kat kısaltır.

Üretim ortamlarında model, ONNX formatına dönüştürülerek CPU'da daha hızlı çalıştırılabilir. Hugging Face Inference API üzerinden de model servis edilebilir. LangChain, LlamaIndex ve Haystack gibi çerçeveler Sentence Transformers entegrasyonunu yerel olarak destekler; bu da RAG pipeline kurulumunu birkaç satıra indirger.

Türkçe geliştirme ekipleri için önerilen akış şöyledir: önce paraphrase-multilingual-mpnet-base-v2 ile prototip oluşturun, yeterli Türkçe veri biriktikten sonra emrecan Türkçe modeli veya domain-specific fine-tuning ile kaliteyi artırın.

Sık Sorulan Sorular

  • check_circle Sentence Transformers ile BERT arasındaki fark nedir? BERT, cümle düzeyinde doğrudan karşılaştırma için tasarlanmamıştır; iki cümleyi karşılaştırmak için her çifti modelden geçirmek gerekir ve bu çok yavaştır. Sentence Transformers (SBERT), her cümleyi bağımsız olarak sabit boyutlu bir vektöre dönüştürür; milyonlarca cümle arasındaki benzerlik saniyeleri aşan sürelerde hesaplanabilir.
  • check_circle Hangi modeli seçmeliyim? Hız öncelikliyse all-MiniLM-L6-v2; kalite öncelikliyse all-mpnet-base-v2; Türkçe veya çok dilli içerikse paraphrase-multilingual-mpnet-base-v2 başlangıç noktasıdır. Belirli bir domain için etiketli veri varsa domain-specific fine-tuning her durumda kaliteyi artırır.
  • check_circle Sentence Transformers GPU gerektiriyor mu? Hayır, CPU'da da çalışır; ancak büyük corpus'larda GPU olmadan encode süresi uzayabilir. ONNX veya CTranslate2 formatına dönüştürme ile CPU performansı önemli ölçüde iyileştirilir. Küçük ölçekli uygulamalar için tüketici sınıfı donanım yeterlidir.
  • check_circle RAG'da hangi vektör boyutu kullanmalıyım? 384 boyut (MiniLM) çoğu RAG uygulaması için hem hız hem de depolama açısından iyi bir dengedir. Daha hassas retrieval gerektiren kurumsal sistemlerde 768 veya 1536 boyutlu modeller tercih edilir. Boyut arttıkça vektör veritabanı depolama maliyeti de artar.
  • check_circle Sentence Transformers OpenAI embedding ile nasıl karşılaştırılır? OpenAI text-embedding-3-small ve benzeri modeller genel benchmarklarda güçlü sonuçlar sunar ancak API çağrısı başına ücret alır ve offline çalışmaz. Sentence Transformers tamamen ücretsiz, yerel olarak çalışır ve veri gizliliği açısından avantajlıdır. Performans farkı domain'e göre değişir; kendi veri kümenizde karşılaştırma yapmanız önerilir.