5 puan yazan GN⁺ 2023-10-25 | 1 yorum | WhatsApp'ta paylaş
  • 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-002 ile 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-v2 buna ö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-002 modeliyle 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.8817322855676049
    • spatialite_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 similarities tablosuna 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
  • 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 llm veya brew install llm ile kurulabilir
    • Varsayılan olarak OpenAI API ile kullanılabilir
  • Eklentiler kurularak yeni dil modelleri veya embedding modelleri eklenebilir
  • llm-sentence-transformers eklentisi, SentenceTransformers kütüphanesini saran bir eklentidir
    • all-MiniLM-L6-v2 modelini Hugging Face'ten indirip yerelde kullanabilir
    • llm embed komutu, 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.md dosyalarını bulup readmes koleksiyonuna kaydeder
    • --store seçeneği, özgün metni de SQLite tablosunda birlikte saklar
    • Çalıştırma sonucunda 16.796 adet README.md dosyası kaydedildi ve yerel bilgisayarda yaklaşık 30 dakika sürdü

Anlamsal arama ve “vibes-based search”

  • llm similar komutu, kaydedilmiş embedding koleksiyonunda girilen cümleye benzer öğeleri bulur
  • sqlite backup tools cümlesiyle readmes koleksiyonunda arama yapıldığında, sqlite-diffable, sqlite-dump, sqlite-generate, sqlite-history, sqlite-utils gibi 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-multi girdisi 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ır
    • symbex '*' '*:*' --nl, geçerli dizindeki fonksiyonları ve sınıf metotlarını newline-delimited JSON olarak verir
    • llm 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/llm deposundaki issue başlıklarından llm-issues koleksiyonu oluşturulup 10 küme üretilebilir
  • llm cluster llm-issues 10 --summary seç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 Time podcast 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

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 similar ile ilgili paragraflar bulunur
    • jq ile 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
  • 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-tiny gibi 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

1 yorum

 
GN⁺ 2023-10-25
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

    • Daha önce neredeyse aynı fikri denemiştim: https://blog.scottlogic.com/2022/02/23/word-embedding-recomm...
      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
    • Yapay zeka, makine öğrenimi ve LLM deneyimi az olan kişiler için de erişilebilir şekilde yazılmış olması hoş
      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
    • Embedding’lerin tarihi ile bilgisayar bilimi ve LLM’lerde kullanımını ele alan bir kaynak olup olmadığını merak ediyorum
      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

    • “Mevcut tam metin aramaya eklemek” ifadesi aslında ince ama önemli. Embedding’ler, geleneksel arama algoritmalarını tamamlayan anlamsal arama sağlar
      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
    • Logseq notları için de benzer bir şey üzerinde çalışıyorum
      Ş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
    • Embedding üretimi için cihaz dışı bir API kullanılıp kullanılmadığını, aramanın ise cihaz içinde yapılıp yapılmadığını merak ediyorum
  • 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

    • Doğru anladıysam, 2 boyutlu uzayda “king”i orijine koyup X eksenini “king”-“man”, Y eksenini “king”-“woman” alarak görselleştirebilirsin
      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
    • UMAP denemek iyi olabilir
    • Yüksek boyutları görselleştirmeyle ilgili bir matematikçi şakası ararken ChatGPT’ye sordum; Google’da bulamadığım Richard Feynman tarzı bir şaka uydurdu
      “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.5 ve magnitude_b = sum(x * x for x in b) * 0.5 satırlarında *0.5 gerekli değil
    Kosinü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

    • Bu kod anlaşılması kolay olsun diye yazılmış
      Ö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

    • İki nedeni var
      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...

    • Fena değil
      Ç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
    • Benim Show HN yazım burada: https://news.ycombinator.com/item?id=38011802
  • 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

    • Verdiğiniz örneklerin hepsi nispeten yaygın işler gibi göründüğü için biraz kafam karıştı
      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ömleme uzayında SVM tarzı sınıflandırma, endüstride doğal dil işleme ve makine öğrenmesinde çok temel bir tekniktir
      Gömmeleri doğrudan eğitmek ise kelimenin tam anlamıyla özgün gömme modeli olan Word2Vec’tir
    • PubMed özetlerine dayalı bir word2vec gömme uzayı da oluşturmuştum
      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
    • İki dilin her biri için gömme uzayı oluşturup tohum sözlük ile uzayları hizalayan çapraz dilli gömmelerin çok dilli arama ve makine çevirisinde gerçek veya potansiyel uygulamaları var
    • Veri tekilleştirme için de kullanılabilir
  • 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 sorunu çözmek için tüm dil modelini ince ayar yapmak, çiviye balyoz kullanmak gibidir
      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
    • sentence-transformers bu konuyla ilgili oldukça iyi araçlara sahip