1 poin oleh GN⁺ 2024-09-16 | 1 komentar | Bagikan ke WhatsApp

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

 
GN⁺ 2024-09-16
Komentar Hacker News
  • Suka ukurannya yang kecil, lebih unggul daripada model SBERT yang paling kecil

    • Secara teknis memang agak usang, tetapi ini adalah kompromi demi performa
    • Meminta cara untuk beralih antara berbagai jenis kemiripan (misalnya semantik, NLI, nomina-abstrak)
    • Misalnya, ingin memperlakukan "Freezing" dan "Burning" sebagai mirip dalam klasifikasi artikel surat kabar, tetapi kebalikannya dalam artikel kimia
    • Ingin menggunakan embedding NLI untuk memahami hubungan kausal
    • SBERT berukuran besar dan harus memuat beberapa model, sehingga boros sumber daya
  • Embedding menangkap banyak informasi makna dan bisa digunakan secara mandiri untuk tugas yang berguna

    • Menggunakan embedding text encoder dari model CLIP untuk memperkaya prompt
    • Misalnya, jika diberi kata "building", ia mencari "concrete", "underground", dan sebagainya dalam matriks embedding lalu mengganti atau menambahkannya
    • Dalam eksperimen terbatas, memperoleh recall tinggi untuk sebagian besar kueri
  • Bertanya apakah ada rencana untuk bahasa lain selain Inggris

    • Ini akan menjadi alat yang sempurna untuk bahasa Prancis
  • 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

    • Tampaknya lebih baik di sebagian besar tugas MTEB, tetapi penasaran apakah juga lebih baik untuk inferensi dan sebagainya
  • Menulis "permainan bahasa" yang menggunakan fungsi serupa beberapa tahun lalu