Show HN: Wordllama – Hal-hal yang Bisa Dilakukan dengan Token Embedding dari LLM
(github.com/dleemiller)WordLlama
WordLlama adalah alat NLP yang cepat dan ringan, menangani tugas seperti deduplikasi fuzzy, kemiripan, dan pemeringkatan dengan dependensi waktu inferensi yang minimal, serta dioptimalkan untuk perangkat keras CPU.
Daftar isi
- Mulai cepat
- Apa itu?
- Hasil MTEB
- Embedding teks
- Catatan pelatihan
- Roadmap
- Ekstraksi token embedding
- Sitasi
- Lisensi
Mulai cepat
-
Instalasi:
pip install wordllama -
Muat model 256 dimensi:
from wordllama import WordLlama wl = WordLlama.load() -
Hitung kemiripan antara dua kalimat:
similarity_score = wl.similarity("i went to the car", "i went to the pawn shop") print(similarity_score) # output: 0.06641249096796882 -
Peringkat dokumen untuk sebuah kueri:
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) # output: # [ # ('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) # ] -
Metode inferensi tambahan:
wl.deduplicate(candidates, threshold=0.8) # deduplikasi fuzzy wl.cluster(docs, k=5, max_iterations=100, tolerance=1e-4) # pelabelan menggunakan inisialisasi kmeans/kmeans++ wl.filter(query, candidates, threshold=0.3) # filter kandidat berdasarkan kueri wl.topk(query, candidates, k=3) # kembalikan k string teratas berdasarkan kueri
Apa itu?
WordLlama adalah model NLP dan embedding kata yang mendaur ulang komponen model bahasa besar (LLM) untuk menghasilkan representasi kata yang efisien dan ringkas. Mirip dengan model seperti GloVe, Word2Vec, dan FastText.
- Matryoshka Representations: dimensi embedding dapat diperkecil sesuai kebutuhan
- Kebutuhan sumber daya rendah: dapat berjalan cepat di CPU dengan lookup token sederhana yang menggunakan average pooling
- Binerisasi: model yang dilatih dengan straight-through estimator dapat dikemas menjadi array integer kecil (segera hadir)
- Inferensi khusus Numpy: ringan dan sederhana
WordLlama cocok untuk berbagai tugas NLP, dan berguna untuk analisis eksploratif serta aplikasi utilitas berkat ukurannya yang cepat dan portabel.
Hasil MTEB
| 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 |
Embedding teks
Cara memuat embedding pralatih dan melakukan embedding pada teks:
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)
Contoh penggunaan model embedding biner:
wl = WordLlama.load(trunc_dim=64, binary=True)
wl.embed("I went to the car") # output: 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) # output: 0.57421875
ranked_docs = wl.rank("i went to the car", ["van", "truck"])
wl.binary = False # gunakan cosine similarity alih-alih Hamming similarity
wl = WordLlama.load(config="l3_supercat", dim=1024)
Catatan pelatihan
Model embedding biner menunjukkan peningkatan yang lebih jelas pada dimensi tinggi, dan 512 atau 1024 dimensi direkomendasikan. L2 Supercat dilatih selama 12 jam pada satu A100 dengan batch size 512.
Roadmap
- Sedang menambahkan kemampuan inferensi:
- semantic text splitting
- penambahan notebook contoh
- evaluator DSPy
- pipeline RAG
Ekstraksi token embedding
Untuk mengekstrak token embedding dari model, Anda harus menyetujui perjanjian pengguna dan login menggunakan Hugging Face CLI. Setelah itu, Anda dapat menggunakan snippet berikut:
from wordllama.extract import extract_safetensors
extract_safetensors("llama3_70B", "path/to/saved/model-0001-of-00XX.safetensors")
Sitasi
Jika menggunakan WordLlama dalam riset atau proyek, mohon sitasi sebagai berikut:
@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}
}
Lisensi
Proyek ini berada di bawah lisensi MIT.
Ringkasan GN⁺
- WordLlama adalah alat NLP yang mendaur ulang komponen model bahasa besar untuk menghasilkan representasi kata yang efisien dan ringkas.
- Berjalan cepat di CPU dan dapat dimanfaatkan sebagai utilitas "pisau Swiss Army" untuk berbagai tugas NLP.
- Model embedding biner menunjukkan peningkatan yang lebih jelas pada dimensi tinggi, dan 512 atau 1024 dimensi direkomendasikan.
- Berguna untuk analisis eksploratif dan aplikasi utilitas karena ukurannya yang cepat dan portabel.
1 komentar
Komentar Hacker News
Suka ukurannya yang kecil, lebih unggul daripada model SBERT yang paling kecil
Embedding menangkap banyak informasi makna dan bisa digunakan secara mandiri untuk tugas yang berguna
Bertanya apakah ada rencana untuk bahasa lain selain Inggris
Menunjukkan bahwa token itu sendiri mengandung banyak muatan makna
Pemikiran tentang menggunakan embedding untuk menyelesaikan Little Alchemy
Sangat berguna untuk membuat game, terima kasih
Terlihat keren, bertanya tentang kelebihan model mini-lm
Menulis "permainan bahasa" yang menggunakan fungsi serupa beberapa tahun lalu