Embedding nedir ve neden önemlidir
(simonwillison.net)- Embedding, metin, görüntü ve kod gibi içerikleri sabit uzunlukta kayan noktalı sayı dizilerine dönüştürerek, anlamca yakın öğelerin mesafe hesabıyla bulunmasını sağlar
- Aynı modelin ürettiği vektör uzayında, tek tek sayıların anlamını bilmeden de cosine similarity ile ilgili belgeleri, benzer görselleri ve kod parçalarını karşılaştırmak mümkündür
- OpenAI
text-embedding-ada-002ile 472 TIL yazısını 1.536 boyutlu vektörler olarak saklayan bir örnekte, ilgili yazıları arayan sorgu yaklaşık 400 ms sürdü ve toplam 402.500 token için embedding maliyeti yaklaşık $0.04 oldu - Yalnızca yerel modeller ve küçük araç kombinasyonlarıyla README araması, kod araması, görsel araması, kümeleme ve RAG kurulabilir;
LLM,llm-sentence-transformers,Symbex,CLIP,E5-large-v2buna örnek olarak kullanılıyor - Embedding tabanlı anlamsal arama, tam sözcük eşleşmesine bağlı kalmadığı için, şirket içi belge soru-cevap gibi RAG senaryolarında ilgili alıntıları LLM istemine eklemenin temel araçlarından biri haline geliyor
Embedding'in temel kavramı
- Embedding, tek bir içerik parçasını kayan noktalı sayı dizisine dönüştürme yöntemidir
- İçeriğin uzunluğundan bağımsız olarak dizinin uzunluğu her zaman aynıdır
- Dizi uzunluğunu kullanılan embedding modeli belirler; örnek olarak 300, 1.000 veya 1.536 sayı çıkabilir
- Bu dizi, çok boyutlu uzaydaki bir koordinat gibi düşünülebilir
- Uzaydaki konum, embedding modelinin içeriğin anlamını nasıl kavradığını gösterir
- Renk, biçim, kavram gibi içerik özellikleri buna yansıyabilir
- Tek tek sayıların anlamını tamamen anlamasak bile, konum ilişkilerini kullanarak yakın öğeleri bulmak gibi yararlı işlemler yapılabilir
İlgili içerik önerileri: TIL blog örneği
- 472 yazı bulunan bir TIL sitesinde, her yazı için OpenAI
text-embedding-ada-002modeliyle 1.536 boyutlu embedding vektörü hesaplandı- Vektörler sitenin SQLite veritabanında saklandı
- İlgili yazılar, hedef yazının vektörü ile diğer tüm yazıların vektörleri arasındaki cosine similarity hesaplanıp en yakın 10 sonucun döndürülmesiyle bulundu
- Örnek yazı “Geospatial SQL queries in SQLite using TG, sqlite-tg and datasette-sqlite-tg” için üst sıralardaki ilgili yazılar SQLite, SpatiaLite, GDAL ve mekânsal SQL sorguları hakkındaydı
- Kendisinin kendisiyle benzerliği 1.0
sqlite_geopoly.md: 0.8817322855676049spatialite_viewing-geopackage-data-with-spatialite-and-datasette.md: 0.8813094978399854
- İlgili yazıları hesaplayan sorgu yaklaşık 400 ms sürdüğü için, tüm yazılar için ilk 10 benzerlik önceden hesaplanıp
similaritiestablosuna kaydedildi - OpenAI embedding API maliyeti, TIL sitesi için yaklaşık 402.500 token ve 1.000 token başına $0.0001 oranıyla $0.04 oldu
- Proprietary modeller operasyon açısından dikkat gerektirir
- OpenAI geçmişte bazı eski embedding modellerini kapattı
- Eski modelle kaydedilmiş çok sayıda embedding varsa, yeni içerikleri embedding'e çevirebilmek için desteklenen modele göre yeniden hesaplama gerekebilir
- OpenAI yeni modele yeniden embedding yapma maliyetini karşılayacağını söylemiş olsa da, proprietary modellere bağımlılık riski sürüyor
- Açık lisanslı modeller kendi donanımınızda çalıştırılabildiği için modelin kapatılması riskini azaltır
Word2Vec ile vektör uzayına bakış
- Google Research'ün Efficient Estimation of Word Representations in Vector Space makalesi, 16 Ocak 2013'te yayımlanan Word2Vec çalışmasıdır
- Word2Vec, tek bir sözcüğü 300 sayıdan oluşan bir diziye dönüştüren erken dönem embedding modellerinden biridir
- turbomaze.github.io/word2vecjson, 10.000 sözcüğü ve her sözcüğün 300 sayılık dizisini keşfetmeye yarayan bir demodur
- “france” sözcüğüne yakın sözcükler olarak
french,belgium,paris,germany,italy,spainçıkar
- “france” sözcüğüne yakın sözcükler olarak
- Vektör işlemleriyle de ilişkiler ortaya çıkar
- “germany” vektörüne “paris” eklenip “france” çıkarıldığında, sonuç vektörü “berlin”e en yakın olur
- Bu, modelin milliyet ve coğrafya ilişkilerini vektör uzayında yakaladığını gösterir
- Word2Vec, 1,6 milyar sözcüklük içerikle eğitildi; günümüz embedding modelleri çok daha büyük veri kümeleri üzerinde eğitilerek daha zengin ilişkiler yakalar
LLM araçlarıyla embedding hesaplamak
- LLM, büyük dil modelleriyle çalışmak için bir komut satırı aracı ve Python kütüphanesidir
pip install llmveyabrew install llmile kurulabilir- Varsayılan olarak OpenAI API ile kullanılabilir
- Eklentiler kurularak yeni dil modelleri veya embedding modelleri eklenebilir
llm-sentence-transformerseklentisi, SentenceTransformers kütüphanesini saran bir eklentidirall-MiniLM-L6-v2modelini Hugging Face'ten indirip yerelde kullanabilirllm embedkomutu, tek bir cümleyi JSON sayı dizisi olarak verir
- Embedding'ler tek başına sayı dizileri olarak çok anlamlı değildir; saklanıp karşılaştırıldıklarında yararlı hale gelirler
llm embed-multi, birden fazla içeriği tek seferde embedding'e çevirip collection adı verilen SQLite tablosunda saklayabilir- Örnek komut, home dizini altındaki tüm
README.mddosyalarını bulupreadmeskoleksiyonuna kaydeder --storeseçeneği, özgün metni de SQLite tablosunda birlikte saklar- Çalıştırma sonucunda 16.796 adet
README.mddosyası kaydedildi ve yerel bilgisayarda yaklaşık 30 dakika sürdü
- Örnek komut, home dizini altındaki tüm
Anlamsal arama ve “vibes-based search”
llm similarkomutu, kaydedilmiş embedding koleksiyonunda girilen cümleye benzer öğeleri bulursqlite backup toolscümlesiylereadmeskoleksiyonunda arama yapıldığında,sqlite-diffable,sqlite-dump,sqlite-generate,sqlite-history,sqlite-utilsgibi SQLite yedekleme veya ilgili projelerin README dosyaları üst sıralarda gelir- Sonuç belgelerinin içinde doğrudan “backups” sözcüğünün geçmesi garanti değildir
- İçerik arama sorgusuyla anlamsal olarak benzerse sonuç olarak gelebilir
- Bu yaklaşım anlamsal aramadır; kaynak metin bunu vibes-based search olarak adlandırır
- Yalnızca tam metin eşleşmesi kullanıcıların aradığını her zaman buldurmadığı için, farklı içerik arama motorlarında faydalıdır
Kod embedding'i: Symbex ve Datasette
- Symbex, Python kod tabanındaki sembolleri keşfetmeye yarayan bir araçtır
- Python fonksiyonlarını ve sınıfları hızlıca bulup LLM'e aktarmak için geliştirildi
- Daha sonra, kod tabanındaki tüm fonksiyonların embedding'lerini hesaplayıp bir kod arama motoru kurmak mümkün oldu
- Symbex, bulduğu sembolleri JSON veya CSV olarak çıktı verebilir; bu biçim
llm embed-multigirdisi olarak kullanılabilir - Datasette projesindeki tüm fonksiyon ve sınıf metotlarını embedding'e çeviren örnek, gte-tiny modelini kullanır
gte-tiny, 60 MB boyutunda bir dosyadırsymbex '*' '*:*' --nl, geçerli dizindeki fonksiyonları ve sınıf metotlarını newline-delimited JSON olarak verirllm embed-multi ... --format nl, bu çıktıyı doğrudan alıp embedding işlemi yapar
- Sonrasında Datasette ve datasette-llm-embed eklentisi kullanılarak SQL ile kod anlamsal araması yapılabilir
- SQLite, birden çok aracı bir araya getiren bir entegrasyon noktası olarak kullanılır
- Koddan fonksiyonlar çıkarılır
- Embedding modelinden geçirilir
- Sonuçlar SQLite'a yazılır
- SQL ile aranır
CLIP ile metin ve görselleri aynı uzaya embedding etmek
- CLIP, OpenAI'nin Ocak 2021'de yayımladığı ve hem metni hem de görselleri embedding'e dönüştürebilen bir modeldir
- Temel fikir, metin ve görselleri aynı vektör uzayına yerleştirmektir
- “dog” metninin embedding konumu ile bir köpek fotoğrafının embedding konumu aynı uzayda birbirine yakın olur
- Metinle ilgili görseller, görselle de ilgili metinler bulunabilir
- Tarayıcıda çalışan CLIP demosu, Observable notebook olarak hazırlanmıştır ve CLIP modelini tarayıcı içinde çalıştırır
- Sayfa 158 MB kaynak yükler
- CLIP metin modeli 64.6 MB, görsel modeli 87.6 MB'dir
- Bir sahil fotoğrafı için metinlere göre benzerlik skorlarını hesaplayan bir örnek vardır
beach: 26.946%city: 19.839%sunshine: 24.146%california beach: 27.427%
- Asıl önemli olan, rastgele bir fotoğraf ile tek bir sözcük arasındaki benzerliği sormaktan çok, bunun üzerine bir arama arayüzü kurmaktır
Faucet Finder: CLIP tabanlı görsel arama
- Faucet Finder, banyo bataryası fotoğraflarını bulmak için yapılmış özelleştirilmiş bir arama aracıdır
- Drew Breunig, batarya tedarikçilerinden 20.000 batarya fotoğrafı topladı ve CLIP embedding'lerini hesapladı
- Uygulamada LLM ve llm-clip eklentisi kullanıldı
- Datasette ile dağıtıldı
- Bu araç, belirli bir bataryaya görsel olarak benzeyen başka bataryaları bulmayı sağlar
- Beğenilen pahalı bir batarya varsa, ona görsel olarak benzeyen daha ucuz seçenekler bulunabilir
- Drew'nun demosu, önceden hesaplanmış embedding'leri kullanarak sunucuda CLIP modelini çalıştırmadan benzer sonuçlar gösterir
- Daha sonra sunucu tarafındaki CLIP modeli Fly.io'ya dağıtıldı ve metin dizilerini embedding'e çeviren API ile batarya embedding tablosu API'sini birleştiren bir Observable notebook demosu hazırlandı
- “gold purple” gibi arama terimleriyle batarya görselleri anlam temelli olarak aranabilir
Kümeleme ve 2D görselleştirme
- Embedding'ler yalnızca ilgili içerik önerileri ve anlamsal arama için değil, kümeleme için de kullanılabilir
- llm-cluster, scikit-learn'ün sklearn.cluster modülünü kullanarak kümeleme yapan bir eklentidir
- GitHub issues API ve paginate-json kullanılarak
simonw/llmdeposundaki issue başlıklarındanllm-issueskoleksiyonu oluşturulup 10 küme üretilebilir llm cluster llm-issues 10 --summaryseçeneği, küme metinlerini LLM'e verip açıklayıcı adlar üretir- Örnek adlar arasında “Log Management and Interactive Prompt Tracking” ve “Continuing Conversation Mechanism and Management” bulunur
- Yüksek boyutlu uzayları görselleştirmek zordur; bu yüzden boyut azaltma için principal component analysis (PCA) kullanılabilir
- Matt Webb, BBC
In Our Timepodcast bölümü açıklamaları için OpenAI embedding'leri üretip PCA ile 2D görselleştirme oluşturdu - 1.536 boyut 2 boyuta indirildiğinde bile, tarih savaşlarıyla ilgili bölümler veya modern bilimsel keşiflerle ilgili bölümler birbirine yakın görünür
- Matt Webb, BBC
Ortalama konumla cümle sınıflandırma
- Embedding'ler sınıflandırmada da kullanılabilir
- Önce belirli şekilde sınıflandırılmış embedding gruplarının ortalama konumu hesaplanır
- Yeni içeriğin embedding'i bu konumlara hangisine daha yakınsa o kategoriye atanır
- Amelia Wattenberger'in Getting creative with embeddings yazısı, cümlelerin somut mu soyut mu olduğunu puanlayan bir örnektir
- Somut cümleler ve soyut cümlelerden örnek kümeler oluşturulup her grubun ortalama konumu hesaplanır
- Yeni bir cümle, iki ortalama konum arasında hangisine daha yakın olduğuna göre puan alır
- Bu puan, cümlenin ne kadar soyut veya somut olduğunu gevşek biçimde gösteren bir renge de dönüştürülebilir
RAG: kişisel belgeler ve şirket içi belgelerle soru-cevap
- ChatGPT kullananlar, kişisel notlar veya şirket içi belgeler temelinde soruları yanıtlatmanın yollarını merak ediyor
- Yanıt, pahalı özel model eğitimi değil; hazır bir LLM ile retrieval-augmented generation (RAG) birleşimi olabilir
- RAG'in temel akışı basittir
- Kullanıcı soru sorar
- Kişisel belgelerde soruyla ilgili görünen içerik aranır
- LLM'in boyut sınırına uyarak ilgili alıntılar ve asıl soru isteme eklenir
- LLM, verilen ek içeriğe dayanarak yanıt üretir
- Yaygın boyut sınırı yaklaşık 3.000 ila 6.000 sözcüktür
- RAG'de zor olan kısım, isteme eklenecek en iyi alıntıları bulmaktır
- Embedding tabanlı anlamsal arama, yüksek olasılıkla ilgili içerikleri toplamak için uygundur
E5-large-v2 ile blog tabanlı çevrimdışı soru-cevap kurmak
- Blog içeriğine dayalı bir RAG örneğinde E5-large-v2 kullanılır
- Soru cümleleriyle cevap cümlelerinin dil bilgisel yapısı farklı olduğundan, sorular her zaman cevabı içeren belgelerle anlamsal olarak yakın çıkmayabilir
- E5-large-v2 iki tür içeriği destekler
- factual sentence, phrase olarak embedding'e çevrilir
- question, query olarak embedding'e çevrilir
- Bu, CLIP'in görselleri ve metni aynı uzaya koyma yaklaşımına benzer
- Blogun 19.000 paragrafı phrase olarak embedding'e çevrilir, soru da query olarak embedding'e çevrilerek cevaba yakın paragraflar bulunur
- Örnek, Bash tek satırlık komutla RAG kurar
llm similarile ilgili paragraflar bulunurjqile içerik çıkarılır- Yerel dizüstü bilgisayarda çalışan Llama 2 Chat 7B modeline soru ve paragraflar verilir
What is shot-scraper?sorusuna,shot-scraper'ın Playwright'ı saran bir Python yardımcı aracı olduğu ve komut satırı arayüzü ile YAML tabanlı yapılandırma akışı sayesinde web sayfası ekran görüntüsü alma ve JavaScript tabanlı scraping işlemlerini otomatikleştirdiği yanıtı üretilir- Üretilen yanıt, mevcut blog içeriğindeki cümlelerin birebir eşleşmesi değildir
Pratikte ayarlanabilecek seçenekler
- LangChain, LLM üstünde işlev geliştirmek için bir çerçevedir ve RAG bunun temel özelliklerinden biridir
- Aynı işlevler LangChain üzerinde de kurulabilir, ancak LangChain'i anlamak ciddi bir yatırım gerektirir
- Burada, her şeyi çözen tek bir çerçeveden ziyade birlikte çalışan küçük araçlar seti tercih edilir
- Mesafe fonksiyonu olarak varsayılan seçenek cosine similarity'dir
- Diğer mesafe fonksiyonları henüz denenmemiştir
- RAG'de mesafe fonksiyonu, embedding modeli, istem stratejisi ve LLM gibi ayarlanabilecek birçok unsur vardır
- Örnekler en fazla yaklaşık 20.000 embedding ölçeğindeydi; bu ölçekte tüm veri üzerinde brute force cosine similarity hesabı yapmak hâlâ makul sürede sonuç verir
- 1 milyar nesne gibi daha büyük verilerde, vektör veritabanları veya mevcut veritabanı uzantıları bir seçenek haline gelir
- SQLite için sqlite-vss vardır
- PostgreSQL için pgvector vardır
- Facebook'un FAISS aracı da deneylerde kullanılmıştır; bunu kullanan Datasette eklentisi datasette-faiss de mevcuttur
- Gelecekte öne çıkması beklenen eğilimler çok modlu modeller ve daha küçük modellerdir
- Facebook ImageBind, görsel, metin, ses, derinlik, termal ve IMU verisi olmak üzere 6 modalitenin ortak embedding'ini öğrenir
gte-tinygibi 60 MB düzeyine inen modeller, kısıtlı cihazlarda veya tarayıcıda çalışma olasılığını artırır
Daha fazla okuma
- What are embeddings? by Vicki Boykis
- Text Embeddings Visually Explained by Meor Amer for Cohere
- The Tensorflow Embedding Projector: embedding uzayını keşfetmek için etkileşimli araç
- Learn to Love Working with Vector Embeddings: Pinecone'un vektör embedding eğitimleri derlemesi
1 yorum
Hacker News yorumları
Bu yazıyı yayımladıktan sonra embedding’leri daha düşük seviyede anlamak için yararlı birkaç kaynak daha buldum
Benim yazım bilinçli olarak çok üst düzeydeydi ve ağırlıkla uygulamalara odaklanıyordu
Cohere’in Text Embeddings Visually Explained yazısı: https://txt.cohere.com/text-embeddings/
Tensorflow Embedding Projector aracı: https://projector.tensorflow.org/
Vicki Boykis’in What are embeddings? yazısı da bakmaya değer: https://vickiboykis.com/what_are_embeddings/
Sayfanın altındaki “further reading” bölümüne ekleyeceğim
Embedding kullanarak ilgili yazıların etkileşimini artırdım; kişisel olarak embedding’lerin hafife alınan güçlü bir araç olduğunu düşünüyorum
Belgeler ya da alıntılar arasında benzerliğe göre gezinmek veya tersine benzersiz içerik bulmak için kullanılabilir; halüsinasyon konusunda endişelenmeniz gerekmediği için de oldukça “güvenli”dir
Embedding’lerin nasıl üretildiği de ilginç olabilir. Örneğin eğitimden sonra sınıflandırma katmanını kesip çıkarma yöntemi veya EfficientNet benzeri yaklaşımlar var
Makine öğreniminin temel dayanaklarından biri hâline geliyor
Bilgisayarlı görü ve görsel SLAM algoritmalarında embedding’ler yer tanıma için fiili standart yöntem hâline geldi; bu yazıdaki içerikle de çok benzer
Buna “bag-of-word place recognition” deniyor ve günümüzde neredeyse tüm açık kaynak kütüphanelerde kullanılıyor
Temel fikir, her görüntüyü bir özellik çıkarma ve descriptor pipeline’ından geçirip en önemli N özelliği içeren bir vektöre “embed” etmek
Kamera hareket ederken keyframe denen bir görüntü veritabanı oluşturuluyor ve görüntüler çok daha düşük boyutlu vektörler olarak saklanıyor
Sonra her görüntüyle veritabanı sorgulanıyor ve kosinüs benzerliği gibi yöntemlerle vektör veritabanında en iyi eşleşme bulunuyor
Bir eşleşme varsa, sorgu görüntüsü ile eşleşen görüntü arasındaki stereo kısıtlar hesaplanarak harita güncellenebiliyor
Orijinal makale [1], en ünlü uygulama ise https://github.com/dorian3d/DBoW2
[1]: https://www.google.com/search?client=firefox-b-d&q=Bags+of+B...
Harika bir başlangıç kaynağı
Eskiden kendim bir iOS not uygulaması yapmıştım; mevcut tam metin aramaya embedding eklemek 1) şaşırtıcı derecede kolaydı ve 2) ilk beklediğimden çok daha güçlüydü
“dog” diye arayınca içinde “canine” geçen notların da çıkacağını biliyordum; ama “sevebileceğim bir evcil hayvan” gibi bir aramayla olumlu duygu taşıyan çeşitli hayvan notlarının yakalandığını ancak deneyince fark ettim
Bu benim ilk büyük “aha” anımdı
O dönemde Supabase’in DocsGPT PR’ı örnek kod olarak işe yaramıştı: https://github.com/supabase/supabase/pull/12056
Birçok uygulama isimlere veya özel adlara ciddi biçimde dayanır ve çoğu zaman bağlam da yetersizdir
Köpeğinizden açıklama yapmadan yalnızca adıyla bahsederseniz, belirli bir embedding modeli bunu yakalayamayabilir
Kişiler, yerler, sokak adları gibi özel adlar kişiselleştirme ve alan odaklı aramayı sabitlemek için çok önemli olabilir; ancak genel amaçlı dil modelleri bunları bilmez
Bu sorunu ele alan somut yöntemler olup olmadığını merak ediyorum
Şu an en büyük soru, ne kadar metnin tek bir embedding hâline getirileceği
Cümle başına mı yapmalı, yoksa not uygulamasındaki bir sayfaya ait cümle bloklarının tamamını tek parça mı ele almalı, emin değilim
Kelime gömmelerinin klasik örneği ünlü King - Man + Woman = Queen ifadesidir
Vektör uzayında iyi çalışır ama 2 boyuta izdüşürünce görsel olarak pek sezgisel gelmez
Kendi deneyimime göre PCA, MDS ve t-SNE için de durum aynıydı: https://bhugueney.gitlab.io/test-notebooks-org-publish/jupyt...
Tarayıcıda kelime gömmesi yapan bir JupyterLite Notebook; akıllı telefonda çalıştırmamak daha iyi
Kelime gömmelerinin klasik örneğini güzelce görselleştirmenin bir yolunu bilen var mı merak ediyorum
Gerçekten diklik istiyorsan Gram-Schmidt kullanabilirsin
3 boyutta Z ekseni olarak “king”-“queen”i de ekleyebilirsin; dikleştirilmiş sürüm, modelin gördüğü mesafe kavramına daha yakın olur
2 boyutta “king”-“man”+“woman” hesaplandığında “queen”den ne kadar saptığını gösteremezsin ama kalan mesafeyi doğru biçimde elde edebilirsin
3 boyutta doğru mesafeyi verebilmesi gerekir
“queen” genelde X="king"-"man"+"woman"a en yakın gömmeye sahip kelime olduğu için seçilir
2 boyutlu grafikte bir sonraki en yakın birkaç kelimeyi de gösterip her kelimeye 2 boyutlu düzleme olan dik uzaklığını ekleyebilirsin
Böylece “queen”in, X’e olan kareli uzaklığı ile düzleme olan kareli dik uzaklığının toplamı en küçük olan kelime olması gerekir; bu da gözle bir ölçüde doğrulanabilir
“4 boyutu görselleştiremezsiniz… en azından ben edemem. Çünkü yalnızca üç brane’im var” gibi bir şeydi; branes ile brains üzerinden bir kelime oyunuydu
Sonra ChatGPT bunun uydurma olduğunu kabul edip özür diledi
Ardından John von Neumann, H. G. Wells ve Ian Stewart’tan alıntılar da verdi; en sonunda “4 boyutu görselleştirmek için 3 boyutu görselleştirip ardından ‘n+1’ demek yeter” tarzında bir yanıt üretti; hatırladığımdaki şakaya en çok benzeyen buydu ama daha az komikti
Bunun üzerine Deepak Chopra tarzında yüksek boyutlu uzayı görselleştirmeye dair halüsinasyon alıntıları üretmesini istedim; septillion-dimensional embeddings, Hilbert space, Poincaré conjecture, Heisenberg uncertainty principle, Shannon entropy gibi ifadeleri karıştıran, kulağa makul gelen sahte alıntılar döktü
Pratik trigonometrikte sık yapılan hata, gereksiz karekök hesabı yapmaktır
Örnek koddaki
magnitude_a = sum(x * x for x in a) * 0.5vemagnitude_b = sum(x * x for x in b) * 0.5satırlarında*0.5gerekli değilKosinüsleri karşılaştıracaksan kareli değerleri karşılaştırmak da yeterli olduğundan maliyetli kök hesabından kaçınabilirsin
Benzer şekilde eliptik eğri kriptografisinde de ters eleman hesaplama gibi pahalı işlemler mümkün olduğunca ertelenir ya da yalnızca iki noktayı karşılaştırırken standart değeri hesaplamaktan tamamen kaçınılır
Öyle olmasaydı düşük seviyeli SIMD koduyla değiştirilirdi
dot_product = sum(x * y for x, y in zip(a, b))mi, neden böyle yapıp vektörleştirilmiş numpy işlemi kullanmadığını merak ettim“ChatGPT’ye kosinüs benzerliği kodunun birkaç sürümünü yazdırdım” kısmını görünce anladım
Birincisi, insanlara açıklarken numpy sözdiziminin daha çok engel olduğunu düşünüyorum
İkincisi, numpy en hafif bağımlılık değil
Performans gerektiğinde kullanırım ama varsayılan seçenek yapmak istemem
Show HN yazıları, ProductHunt girişimleri, YC şirketleri ve Github depoları arasında LLM gömmeleri ile ilgili olanları görmek istiyorsan, yeni yayımladığım LLM-Embeddings-Based Search Engine MVP’de hızlıca bulabilirsin
https://payperrun.com/%3E/search?displayParams={%22q%22:%22L...
Çeşitli filtre düğmelerine basınca arama sonuçlarının hemen güncelleneceğini beklemiştim; yeniden arama yapmam gerektiğini düşünmemiştim
Neden öyle yaptığını anlıyorum
Son birkaç ayda “AI” hakkında okuduklarım arasında en ilginç olanı
Listelerde gömme modeli gördükçe ne olduğunu merak ediyordum; neden herkesin vektör DB’den söz ettiğini de merak ediyordum
Uzun süredir devam eden yan projemde bunu hemen nasıl uygulayabileceğim aklıma geldi
Tüm belgelerde gömme varsa kullanıcı verilerinin işe yarar biçimde kümelenmesi gerçekten mümkün olabilir
Gömlemeleri gerçekten yaklaşık en yakın komşu ve kümeleme dışında bir yerde kullanmış olan var mı merak ediyorum
Aklıma gelen olasılıklar arasında rastgele eksenlere projeksiyon, indeksleme ve sıralama var. Örneğin “sıcak-soğuk”, “mutlu-üzgün”, “bilimkurgu-gerçekçilik”, “edebîlik-ticarilik” gibi eksenler
Gömleme uzayında SVM tarzı sınıflandırma yapmak, word2vec tarzı woman-man+king=queen çıkarımı yapmak ya da bir LLM’in bir katmanını söküp almak dışında, gömmeleri doğrudan eğitmenin de yolları olmalı
Karşıt öğrenmenin kullanıldığını biliyorum ama fonksiyon sinir ağlarıyla birlikte gömmeleri öğrenip fonksiyon denklemleri üreterek ortalama karesel hata kaybını hesaplamak gibi başka yöntemler de araştırmaya değer görünüyor
Anlamsal aramaya fazla odaklanılmış gibi görünmesi şaşırtıcı; mutlaka başka ilginç uygulamalar da vardır
Birincisi ve üçüncüsü aslında aynı şey
Bilgisayarlı görüde, bir fotoğrafa gözlük eklemek gibi görüntüyü anlamsal olarak değiştirmek isteyebilirsiniz; Google reklamlarında gördüğünüz işler buna örnektir
Bu tür işler gizil uzayda yapılır
Normalleştirici akışlarda uzayı Gauss dağılımına dönüştürdükleri için bu özellikle nettir
Difüzyon modelleri de yaklaşık bir yöntemle benzer bir şey yapar ama tersinir değildir; yine de geri döndürülebilir
Manipüle etmek istediğiniz görüntüyü, cümleyi ya da veriyi projekte eder, Gauss uzayında değiştirir, sonra hedef uzaya geri döndürürsünüz
Ancak “gömleme” kelimesi çok fazla anlama gelen aşırı yüklenmiş bir terim olduğu için birbirimizi karıştırıyor olabiliriz
Ayrık tam sayı token’larını sürekli kayan noktalı değerlere çeviren ilk bloğu düşünüyor olabilirsiniz
Ama o gömme de öğrenildiği için, bir arama tablosu gibi olsa bile hâlâ sinir ağı sürecidir
Bu uzayda SVM kullanıldığı da olur
Gizil uzaya benzer, ama bence biraz daha soyuttur
En azından gömme bire bir olmalıdır. Matematiksel olarak öyle, ama…
Gömmeleri doğrudan eğitmek ise kelimenin tam anlamıyla özgün gömme modeli olan Word2Vec’tir
Kimya ve biyokimya adlarının tireli yazımı, tiresiz yazımı, boşluklu yazımı gibi varyantları ve kısaltmaları çok buldum
Muhtemelen teknik terimler sözlüğü de oluşturulabilirdi
Tanımlara kadar ne kadar gidilebilirdi bilmiyorum, ama yalnızca vektörlerle sınırlı olsa da bir başlangıç noktasıdır
Başkalarının da bu yöntemle sözlük oluşturmuş olma ihtimali yüksek
Gömmelerle uğraştım ve birkaç üretim kullanım senaryosu da geliştirdim; pek çok harika uygulamayı mümkün kılan mükemmel bir araç
Ama belirli bir alanda bir şeyler geliştirirken hazır gömme modellerinin sınırlarına çarpıyorsunuz
Hazır modellerin çok sayıda boyutu var, fakat bu boyutlardan bazıları uygulamamın sınıflandırması, içerik benzerliği, kümelemesi vb. için önemliyken bazıları önemli olmayabilir
Başka bir deyişle, ilgilenmediğiniz boyutlarda yakın oldukları için iki vektör yakın görünebilir
Gömleme modeli ince ayarı için daha iyi araçlar ve literatür görmeyi umuyorum
Bu tür araçlar uzun zamandır var; örneğin biraz veri etiketleyip gömme uzayı üzerinde sınıflandırma için bir SVM eğitebilirsiniz