Anahtar Kelime Araması Nerede Tıkanır?
Klasik arama motorlarını yıllardır kullanıyoruz ve çoğu zaman işimizi görüyorlar. Mantıkları aslında sade: bir kelime yazarsınız, sistem o kelimenin geçtiği belgeleri bulur. Buna anahtar kelime araması (keyword search) denir. Arka planda genellikle 'ters dizin' (inverted index) denen bir yapı çalışır; tıpkı bir kitabın sonundaki dizin gibi, her kelimenin hangi belgelerde geçtiğini önceden listeler. Bu yüzden de göz açıp kapayana kadar cevap döner.
Ama bu yaklaşımın kör bir noktası var: kelimeleri tanır, anlamı tanımaz. 'Otomobil' diye ararsanız, içinde yalnızca 'araba' geçen bir belgeyi kaçırırsınız. İkisi aynı şeyi anlatsa bile sistem için bunlar bambaşka iki harf dizisidir. Modern arama motorları eş anlamlı sözlükler ve birtakım hilelerle bu sorunu kısmen yamar, ama temel mantık değişmez: harf harf eşleşme arar.
Hukukta bu kör nokta çok daha acıtır. Bir kullanıcı 'kira artışına getirilen üst sınır' diye düşünebilir; ilgili Yargıtay kararı ise aynı fikri 'kira bedelinin tespitinde uygulanacak azami oran' diye ifade etmiş olabilir. Aynı hukuki kavram, tek bir ortak kelime taşımadan iki ayrı cümleye yerleşmiştir. Anahtar kelime araması bu iki metni asla bir araya getiremez; çünkü ortada eşleşen bir kelime yok, yalnızca eşleşen bir anlam var.
İşte anlamsal arama (semantic search) tam bu boşluğu kapatmak için doğdu. Amacı, 'hangi kelimeler ortak?' sorusunu 'bu iki metin aynı şeyden mi bahsediyor?' sorusuna çevirmektir. Bunu yapabilmek için önce bilgisayara, sayılarla da olsa, anlamın bir temsilini vermemiz gerekiyor. Yazının geri kalanı tam olarak bu temsilin nasıl kurulduğunu ve nasıl arandığını anlatıyor.
Embedding: Anlamı Sayılara Çevirmek
Bilgisayar metni anlamaz; sayıları işler. O halde anlamsal aramanın ilk adımı, bir metin parçasını anlamını taşıyan bir sayı dizisine dönüştürmektir. Bu sayı dizisine embedding (gömme vektörü) diyoruz. Pratikte embedding, örneğin 768 ya da 1.536 sayıdan oluşan uzun bir listedir; her sayı, metnin anlamının bir boyutunu işaret eden bir koordinat gibidir.
Bunu hayal etmenin en kolay yolu bir harita düşünmektir. Bir şehri enlem ve boylam olmak üzere iki sayıyla konumlandırırsınız. Embedding'ler de aynısını yapar, yalnızca iki yerine yüzlerce 'boyut' kullanır. Bu devasa uzayda her kelime, cümle ya da belge bir noktaya yerleşir. İşin sihri şu: bu noktaları üreten yapay sinir ağı, anlamca benzer metinleri birbirine yakın, alakasız metinleri ise uzak yerleştirecek şekilde eğitilmiştir.
Bu yüzden 'köpek' ile 'kedi' bu uzayda yakın komşu olur; 'köpek' ile 'muhasebe' ise birbirinden kilometrelerce uzak durur. Hatta çokça anlatılan bir örnek vardır: 'kral' vektöründen 'erkek' vektörünü çıkarıp 'kadın' vektörünü eklerseniz, vardığınız nokta şaşırtıcı biçimde 'kraliçe'ye yakın çıkar. Bu basitleştirilmiş bir örnektir ve her zaman bu kadar temiz işlemez, ama fikri çok güzel özetler: anlam bu sayısal uzayda geometrik bir biçim kazanır; yakınlık benzerlik, yön ise ilişki demektir.
İki embedding'in ne kadar benzediğini ölçmek için genellikle 'kosinüs benzerliği' (cosine similarity) kullanılır. Adı korkutucu gelse de fikri sade: iki ok düşünün. Aynı yöne bakıyorlarsa çok benzer, dik açı yapıyorlarsa alakasız, ters yöne bakıyorlarsa zıt sayılırlar. Kosinüs benzerliği okların boyuna değil yalnızca yönüne bakar; yani metnin uzunluğundan çok, ne hakkında olduğuyla ilgilenir. Anlamsal arama da sorgunuzun okunu alır ve hangi belgelerin oku onunla en çok aynı yöne bakıyorsa onları öne çıkarır.
Milyonlarca Vektör İçinde Aramak: ANN ve HNSW
Diyelim ki elimizde, her biri bir anlamı temsil eden milyonlarca belge vektörü var ve kullanıcının sorgu vektörüne en yakın olanları bulmak istiyoruz. En dürüst yöntem, sorguyu tek tek bütün belgelerle karşılaştırmaktır; buna 'kaba kuvvet' (brute-force) ya da tam arama denir. Birkaç bin belge için sorun değil. Ama milyonlarca belgeyi her sorguda baştan sona taramak, hız ve maliyet açısından çabucak ödenemez hale gelir.
Çözüm, mükemmel yerine 'yeterince iyi' bir cevapla yetinmektir. ANN, yani Yaklaşık En Yakın Komşu (Approximate Nearest Neighbor) algoritmaları tam olarak bunu yapar: en yakın komşuları matematiksel kesinlikle değil, çok yüksek olasılıkla ve kıyas kabul etmez bir hızla bulur. Pratikte aradaki minik isabet farkı çoğu zaman fark bile edilmez, ama hız kazancı yüzlerce kata çıkabilir. İşte anlamsal aramayı gerçek dünyada uygulanabilir kılan bu takastır.
Bugün en yaygın ANN yöntemlerinden biri HNSW'dir (Hierarchical Navigable Small World — Hiyerarşik Gezilebilir Küçük Dünya). İsmi uzun ama sezgisi çok tanıdık; tıpkı uçak yolculuğu gibi düşünün. Uzak bir köye gitmek için önce büyük bir havalimanından başka bir kıtaya uçarsınız, oradan bölgesel bir havaalanına aktarma yaparsınız, en sonunda da yerel yollarla köye ulaşırsınız. HNSW de vektör uzayını tam olarak bu tür katmanlı bir yol ağı olarak kurar.
En üst katmanda yalnızca birkaç 'uzun mesafe' bağlantısı vardır; algoritma buradan hedefin genel bölgesine büyük sıçramalarla hızla yaklaşır. Sonra alt katmanlara indikçe adımlarını küçültür ve hedefin etrafında giderek daralır. Böylece milyonlarca noktanın tamamına bakmak yerine, yalnızca birkaç yüz akıllı adımla en yakın komşulara varır. Bu zarif fikir sayesinde bir sorgu, dev bir veri kümesinde bile milisaniyeler içinde yanıtlanabilir.
Peki Vektör Veritabanı Tam Olarak Ne Yapar?
Buraya kadar embedding'leri ve onları hızlıca aramayı konuştuk. Vektör veritabanı (vector database) ise bütün bu parçaları bir araya getiren, üretim ortamında çalışacak biçimde paketlenmiş sistemdir. En kısa tarifle: milyonlarca embedding'i saklayan, indeksleyen ve 'şu vektöre en yakın N belgeyi getir' sorgusunu güvenilir biçimde yanıtlayan özel bir veritabanı.
Geleneksel bir veritabanına 'fiyatı 100 liradan az ürünleri getir' dersiniz; cevap kesin ve nettir. Vektör veritabanına ise 'anlamca şu metne en çok benzeyen kayıtları getir' dersiniz. Bu temel fark, altyapının da farklı olmasını gerektirir: HNSW gibi ANN indekslerini yönetmek, vektörleri belleğe sığacak şekilde yerleştirmek ve benzerlik hesaplarını kırpmadan hızlandırmak bu sistemlerin asıl uzmanlık alanıdır.
İyi bir vektör veritabanı yalnızca benzerlik aramaz, aynı zamanda 'metadata filtreleme' yapar. Her vektörün yanına etiketler ekleyebilirsiniz: belge türü, tarih, kaynak, yürürlük durumu. Böylece 'anlamca bu soruya en yakın, ama yalnızca son beş yıla ait ve hâlâ yürürlükte olan kararlar' gibi bir sorgu mümkün olur. Anlamsal yakınlık ile katı kuralları aynı sorguda birleştirebilmek, bu sistemleri gerçek uygulamalarda kullanışlı kılan şeydir.
Bu alanda Pinecone, Weaviate, Milvus, Qdrant gibi özel ürünlerin yanı sıra, PostgreSQL'e eklenen pgvector gibi eklentiler ve büyük bulut sağlayıcılarının yönetilen hizmetleri bulunur. Hepsinin ortak vaadi aynı: anlamı saklamak ve onu ölçeklenebilir, düşük gecikmeli biçimde aranabilir kılmak. Hangisinin seçileceği veri büyüklüğüne, gecikme hedeflerine ve mevcut altyapıya bağlıdır; sihirli tek bir doğru cevap yoktur.
Yeniden Sıralama: Hızlı Aramanın Üzerine Atılan Son Cila
ANN araması hızlıdır, ama bu hız bir bedelle gelir. Embedding tabanlı arama, sorguyu ve belgeleri ayrı ayrı vektörlere çevirip karşılaştırır; yani her belgeyi sorgudan habersiz, 'önceden' özetlemiştir. Bu, geniş bir aday havuzunu çok hızlı taramayı sağlar ama ince ayrımları zaman zaman kaçırır. İlk getirme adımı, en alakalı 20-50 adayı bulmakta iyidir; ama bunları en doğru sıraya dizmekte her zaman başarılı olmaz.
İşte tam burada yeniden sıralama (re-ranking) devreye girer. Yeniden sıralayıcı genellikle bir 'cross-encoder' modelidir: sorguyu ve her adayı ayrı ayrı değil, yan yana koyup birlikte okur ve gerçek alaka düzeyini çok daha derinlemesine tartar. Sorgu ile belgeyi aynı anda görmek, modelin 'bu cümle bu soruyu gerçekten yanıtlıyor mu?' sorusunu çok daha isabetli yanıtlamasını sağlar. Ama bu derin bakışın hesabı pahalıdır.
Çözüm iki aşamalı bir mimaridir: önce hızlı ama kaba olan vektör araması milyonlar arasından küçük bir aday listesi (örneğin 50 belge) çıkarır; sonra pahalı ama isabetli yeniden sıralayıcı yalnızca bu 50 belgeyi tartıp en iyi 5'ini seçer. Geniş havuzda hız, dar havuzda hassasiyet; iki dünyanın da en iyisini birleştiren pratik bir denge.
Yeniden sıralamanın asıl değeri, alakasız ama yüzeysel olarak benzeyen adayları elemesidir. Özellikle yapay zeka destekli sistemlerde, modele verilen bağlamın temiz olması altın değerindedir; çünkü model önüne konan her şeyi ciddiye alır ve yanlış bir belge yanlış bir cevaba dönüşebilir. İlk birkaç sonucu doğru sıralamak, çoğu zaman daha fazla sonuç getirmekten çok daha kıymetlidir.
Bunlar Nerede İşe Yarıyor? Gerçek Kullanım Alanları
Anlamsal arama ve vektör veritabanları soyut bir mühendislik merakı değil; bugün kullandığınız pek çok ürünün sessiz motoru. En görünür örnek tavsiye sistemleridir: bir müzik servisinin 'bunu sevdiysen şunu da seversin' demesi, çoğu zaman şarkıların embedding uzayındaki komşuluklarına dayanır. Benzer ürünler, benzer makaleler, benzer profiller; hepsi aynı 'yakınlık' fikrinden beslenir.
İkinci büyük alan kurumsal bilgi aramasıdır. Bir şirketin binlerce sayfalık dokümantasyonu, destek biletleri ya da iç wiki'si içinde 'müşteri iadesi nasıl işliyor?' diye sormak, doğru kelimeleri bilmeden bile doğru belgeye ulaşmayı mümkün kılar. Aynı mantık görsel ve ses aramasında da çalışır: bir fotoğrafı ya da bir melodiyi vektöre çevirip benzerlerini bulabilirsiniz; çünkü embedding fikri yalnızca metinle sınırlı değildir.
Belki de en hızlı büyüyen kullanım, yapay zekayla yapılan RAG'dir. RAG (Retrieval-Augmented Generation — Getirmeyle Güçlendirilmiş Üretim), bir dil modeline cevap vermeden önce ilgili belgeleri 'getirip' önüne koyma yöntemidir. Bu getirme adımının kalbinde vektör araması yatar: modele neyi okuyacağını anlamsal arama söyler. Böylece model, ezberinden değil, önüne konan güncel ve gerçek kaynaklardan konuşur; vektör veritabanı da bir bakıma modern yapay zeka asistanlarının uzun süreli hafızası gibi davranır.
Bütün bu örneklerin ortak paydası tek: kullanıcı tam olarak hangi kelimeyi araması gerektiğini bilmek zorunda kalmadan niyetini ifade edebilir. Anlamsal arama, 'doğru anahtar kelimeyi bulma' yükünü insandan makineye taşır. Küçük gibi görünen bu değişim, kullanıcı deneyiminde devasa bir fark yaratır.
İçtiHub Örneği: İçtihadı Kelimeyle Değil, Anlamla Bulmak
Türk hukuk araştırması, anlamsal aramanın neden önemli olduğunu çok net gösteren bir alandır. Bir hukukçu çoğu zaman somut bir olayla gelir: 'kiracının tahliyesinde haklı neden olarak gösterilen tadilatın gerçekten yapılıp yapılmadığı.' Bu cümledeki kelimelerin birebir aynısı, aradığınız emsal kararda büyük ihtimalle geçmez; çünkü her karar olayı kendi diliyle, kendi kalıplarıyla anlatır. Anahtar kelime araması burada sık sık boş döner.
İçtiHub'ın çekirdeğindeki yaklaşım tam olarak bu sorunu hedef alır. Milyonlarca karar ve mevzuat metni önce anlamlı parçalara bölünür, sonra her parça bir embedding'e dönüştürülerek bir vektör indeksinde saklanır. Kullanıcının sorgusu da aynı uzaya taşınır; sistem artık 'hangi kelimeler ortak?' diye değil, 'hangi kararlar anlamca bu olaya en yakın?' diye sorar. Böylece tek bir ortak kelime taşımayan ama tam isabetli bir emsal karar yüzeye çıkabilir.
Ama yalnızca anlamsal yakınlık hukukta yeterli değildir. Bir madde numarasını ya da kesin bir terimi birebir aramak gerektiğinde, anahtar kelime aramasının kesinliği hâlâ kıymetlidir. Bu yüzden anlamsal arama ile klasik aramayı bir arada kullanan hibrit bir yaklaşım, ardından da getirilen adayları en doğru sıraya dizmek için bir yeniden sıralama katmanı devreye girer. Hız geniş havuzdan, isabet ise bu ince elemeden gelir.
Son olarak metadata filtreleme hukukta neredeyse zorunludur: mülga bir maddeyi ya da artık geçerli olmayan bir içtihadı doğru cevapmış gibi sunmak kabul edilemez. Vektör veritabanının anlamsal yakınlık ile yürürlük tarihi veya mahkeme türü gibi katı filtreleri aynı sorguda birleştirebilmesi, anlamsal aramayı hukuk için yalnızca etkileyici değil, gerçekten güvenilir bir araca dönüştüren şeydir.
Toparlarsak: Aramanın Yeni Dilbilgisi
Anlamsal arama, bilgisayarla bilgi arasındaki ilişkiyi sessizce yeniden tanımlıyor. Onlarca yıl boyunca arama, 'doğru kelimeyi bilen kazanır' oyunuydu. Embedding'ler ve vektör veritabanları bu kuralı bozdu: artık niyetinizi ifade etmeniz yeterli, doğru kelimeyi bulmak makinenin işi. Zihinsel modeli şu zincirle özetleyebilirsiniz: metin önce embedding'e dönüşür, embedding'ler bir vektör veritabanında saklanır, ANN indeksleri (örneğin HNSW) bunları hızla aratır ve yeniden sıralama son rötuşu atar.
Bu teknolojinin sihirli bir değnek olmadığını da unutmamak gerek. Bir embedding modeli yalnızca eğitildiği veriler kadar iyidir; Türkçe gibi sondan eklemeli ve hukuk gibi alana özgü diller, genel amaçlı modellerin gözünden kaçan incelikler taşır. Anlamsal arama da bazen yüzeysel benzerliklere kanabilir. İşte tam bu yüzden hibrit arama, yeniden sıralama ve metadata filtreleme gibi katmanlar süs değil, sistemi güvenilir kılan asıl unsurlardır.
Meraklı bir okuyucu için iyi haber şu: bu kavramların hiçbiri erişilmez değil. Embedding'i bir anlam haritası, vektör veritabanını bu haritanın hızlı atlası, ANN'i akıllı bir kestirme, yeniden sıralamayı da son bir gözden geçirme olarak düşünürseniz, en karmaşık yapay zeka arama sistemlerinin bile iskeletini görmüş olursunuz. EcoFluxion'da İçtiHub'ı tam olarak bu yapı taşlarıyla kuruyoruz; çünkü bir hukukçunun aradığı şey nadiren bir kelime, neredeyse her zaman bir anlamdır.