Show HN: Wordllama – LLM token embedding'leriyle yapılabilecekler
(github.com/dleemiller)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
Hacker News görüşü
Küçük boyutunu sevdim; SBERT'in en küçük modeline göre avantajlı
Embedding'ler çok fazla anlamsal bilgi yakalar ve tek başına faydalı görevlere uygulanabilir
İngilizce dışındaki diller için plan olup olmadığı soruluyor
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
Birkaç yıl önce benzer işlev kullanan bir "dil oyunu" yazmıştım