1 puan yazan GN⁺ 2024-09-16 | 1 yorum | WhatsApp'ta paylaş

WordLlama

WordLlama, bulanık tekilleştirme, benzerlik ve sıralama gibi görevleri minimum çıkarım zamanı bağımlılığıyla ele alan ve CPU donanımı için optimize edilmiş, hızlı ve hafif bir NLP aracıdır.

İçindekiler

  • Hızlı başlangıç
  • Nedir?
  • MTEB sonuçları
  • Metin embedding'leri
  • Eğitim notları
  • Yol haritası
  • Token embedding çıkarımı
  • Atıf
  • Lisans

Hızlı başlangıç

  • Kurulum:

    pip install wordllama
    
  • 256 boyutlu modeli yükleme:

    from wordllama import WordLlama
    wl = WordLlama.load()
    
  • İki cümle arasındaki benzerliği hesaplama:

    similarity_score = wl.similarity("i went to the car", "i went to the pawn shop")
    print(similarity_score)  # çıktı: 0.06641249096796882
    
  • Bir sorgu için belgeleri sıralama:

    query = "i went to the car"
    candidates = ["i went to the park", "i went to the shop", "i went to the truck", "i went to the vehicle"]
    ranked_docs = wl.rank(query, candidates)
    print(ranked_docs)
    # çıktı:
    # [
    #  ('i went to the vehicle', 0.7441646856486314),
    #  ('i went to the truck', 0.2832691551894259),
    #  ('i went to the shop', 0.19732814982305436),
    #  ('i went to the park', 0.15101404519322253)
    # ]
    
  • Ek çıkarım yöntemleri:

    wl.deduplicate(candidates, threshold=0.8)  # bulanık tekilleştirme
    wl.cluster(docs, k=5, max_iterations=100, tolerance=1e-4)  # kmeans/kmeans++ başlatma kullanan etiketleme
    wl.filter(query, candidates, threshold=0.3)  # sorguya göre aday filtreleme
    wl.topk(query, candidates, k=3)  # sorguya göre en iyi k string'i döndürme
    

Nedir?

WordLlama, büyük dil modellerinin (LLM) bileşenlerini yeniden kullanarak verimli ve kompakt kelime temsilleri üreten bir NLP ve kelime embedding modelidir. GloVe, Word2Vec ve FastText gibi modellere benzer.

  • Matryoshka Representations: Gerektiğinde embedding boyutu küçültülebilir
  • Düşük kaynak gereksinimi: Ortalama pooling kullanan basit token lookup ile CPU üzerinde hızlı çalışabilir
  • İkili hale getirme: Straight-through estimator ile eğitilen modeller küçük tamsayı dizilerine paketlenebilir (yakında)
  • Sadece Numpy ile çıkarım: Hafif ve basit

WordLlama, çeşitli NLP görevleri için uygundur ve hızlı, taşınabilir boyutuyla keşif amaçlı analizler ile yardımcı uygulamalarda kullanışlıdır.

MTEB sonuçları

Metric WL64 WL128 WL256 (X) WL512 WL1024 GloVe 300d Komninos all-MiniLM-L6-v2
Clustering 30.27 32.20 33.25 33.40 33.62 27.73 26.57 42.35
Reranking 50.38 51.52 52.03 52.32 52.39 43.29 44.75 58.04
Classification 53.14 56.25 58.21 59.13 59.50 57.29 57.65 63.05
Pair Classification 75.80 77.59 78.22 78.50 78.60 70.92 72.94 82.37
STS 66.24 67.53 67.91 68.22 68.27 61.85 62.46 78.90
CQA DupStack 18.76 22.54 24.12 24.59 24.83 15.47 16.79 41.32
SummEval 30.79 29.99 30.99 29.56 29.39 28.87 30.49 30.81

Metin embedding'leri

Önceden eğitilmiş embedding'leri yükleme ve metni embedding'e dönüştürme yöntemi:

from wordllama import WordLlama
wl = WordLlama.load(trunc_dim=64)
embeddings = wl.embed(["the quick brown fox jumps over the lazy dog", "and all that jazz"])
print(embeddings.shape)  # (2, 64)

İkili embedding modeli kullanım örneği:

wl = WordLlama.load(trunc_dim=64, binary=True)
wl.embed("I went to the car")  # çıktı: array([[3029168427562626]], dtype=uint64)
wl = WordLlama.load(dim=1024, binary=True)
similarity_score = wl.similarity("i went to the car", "i went to the pawn shop")
print(similarity_score)  # çıktı: 0.57421875
ranked_docs = wl.rank("i went to the car", ["van", "truck"])
wl.binary = False  # Hamming benzerliği yerine cosine benzerliği kullan
wl = WordLlama.load(config="l3_supercat", dim=1024)

Eğitim notları

İkili embedding modeli, yüksek boyutlarda daha belirgin iyileşme gösterdi ve 512 ya da 1024 boyut öneriliyor. L2 Supercat, tek bir A100 üzerinde 512 batch boyutuyla 12 saat eğitildi.

Yol haritası

  • Çıkarım özellikleri üzerinde ek çalışmalar sürüyor:
    • Anlamsal metin parçalama
    • Örnek notebook'lar ekleme
    • DSPy değerlendiricisi
    • RAG pipeline'ları

Token embedding çıkarımı

Modelden token embedding'lerini çıkarmak için kullanıcı onay sözleşmesini kabul etmeniz ve Hugging Face CLI ile giriş yapmanız gerekir. Ardından şu kod parçasını kullanabilirsiniz:

from wordllama.extract import extract_safetensors
extract_safetensors("llama3_70B", "path/to/saved/model-0001-of-00XX.safetensors")

Atıf

WordLlama'yı araştırma veya projelerinizde kullanırsanız lütfen aşağıdaki gibi atıf yapın:

@software{miller2024wordllama,
  author = {Miller, D. Lee},
  title = {WordLlama: Recycled Token Embeddings from Large Language Models},
  year = {2024},
  url = {https://github.com/dleemiller/wordllama},
  version = {0.2.6}
}

Lisans

Bu proje MIT lisansı altındadır.

GN⁺ özeti

  • WordLlama, büyük dil modellerinin bileşenlerini yeniden kullanarak verimli ve kompakt kelime temsilleri üreten bir NLP aracıdır.
  • CPU üzerinde hızlı çalışır ve çeşitli NLP görevlerine uygun bir "İsviçre çakısı" yardımcı aracı olarak kullanılabilir.
  • İkili embedding modeli, yüksek boyutlarda daha belirgin iyileşme gösterir; 512 veya 1024 boyut önerilir.
  • Hızlı ve taşınabilir boyutuyla keşif amaçlı analizler ve yardımcı uygulamalar için kullanışlıdır.

1 yorum

 
GN⁺ 2024-09-16
Hacker News görüşü
  • Küçük boyutunu sevdim; SBERT'in en küçük modeline göre avantajlı

    • Teknik olarak eski moda ama performans için verilmiş bir ödün
    • Farklı benzerlik türleri arasında geçiş yapmanın bir yolunu talep ediyorum (ör. anlamsal, NLI, isim-soyut)
    • Örneğin, "Freezing" ve "Burning" gazete makalesi sınıflandırmasında benzer, kimya makalelerinde ise zıt olsun isterim
    • Neden-sonuç ilişkisini kavramak için NLI embedding'lerini kullanmak isterim
    • SBERT büyük ve birden fazla model yüklemeyi gerektirdiği için kaynak tüketimi yüksek
  • Embedding'ler çok fazla anlamsal bilgi yakalar ve tek başına faydalı görevlere uygulanabilir

    • CLIP modelinin text encoder embedding'lerini kullanarak prompt'u zenginleştiriyorum
    • Örneğin, "building" kelimesi verildiğinde embedding matrisi içinde "concrete", "underground" gibi kelimeleri bulup değiştiriyor veya ekliyor
    • Sınırlı deneylerde çoğu sorgu için yüksek recall elde ettim
  • İngilizce dışındaki diller için plan olup olmadığı soruluyor

    • Fransızca için mükemmel bir araç olurdu
  • Token'ın kendisinin çok fazla anlamsal içerik barındırdığını gösteriyor

  • Embedding kullanarak Little Alchemy'yi çözme fikri

  • Oyun geliştirmede çok faydalı, teşekkürler

  • Harika görünüyor; mini-lm modelinin avantajları soruluyor

    • Çoğu MTEB görevinde daha iyi gibi görünüyor, ancak muhakeme gibi alanlarda da daha iyi olup olmadığını merak ediyorum
  • Birkaç yıl önce benzer işlev kullanan bir "dil oyunu" yazmıştım