Show HN: Wordllama – สิ่งที่ทำได้ด้วย token embedding ของ LLM
(github.com/dleemiller)WordLlama
WordLlama เป็นเครื่องมือ NLP ที่รวดเร็วและมีน้ำหนักเบา ออกแบบมาสำหรับงานอย่างการลบข้อมูลซ้ำแบบฟัซซี การวัดความคล้ายคลึง และการจัดอันดับ โดยมีการพึ่งพาเวลาอนุมานให้น้อยที่สุด และปรับให้เหมาะกับฮาร์ดแวร์ CPU
สารบัญ
- เริ่มต้นอย่างรวดเร็ว
- มันคืออะไร?
- ผลลัพธ์ MTEB
- การฝังข้อความ
- หมายเหตุการฝึก
- โรดแมป
- การดึง token embedding
- การอ้างอิง
- ไลเซนส์
เริ่มต้นอย่างรวดเร็ว
-
การติดตั้ง:
pip install wordllama -
โหลดโมเดลขนาด 256 มิติ:
from wordllama import WordLlama wl = WordLlama.load() -
คำนวณความคล้ายคลึงระหว่างสองประโยค:
similarity_score = wl.similarity("i went to the car", "i went to the pawn shop") print(similarity_score) # output: 0.06641249096796882 -
จัดอันดับเอกสารตามคิวรี:
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) # ] -
วิธีอนุมานเพิ่มเติม:
wl.deduplicate(candidates, threshold=0.8) # ลบข้อมูลซ้ำแบบฟัซซี wl.cluster(docs, k=5, max_iterations=100, tolerance=1e-4) # ติดป้ายกำกับโดยใช้การเริ่มต้นแบบ kmeans/kmeans++ wl.filter(query, candidates, threshold=0.3) # กรอง candidate ตามคิวรี wl.topk(query, candidates, k=3) # คืนค่าสตริง top k ตามคิวรี
มันคืออะไร?
WordLlama เป็นโมเดล NLP และ word embedding ที่นำองค์ประกอบของโมเดลภาษาขนาดใหญ่ (LLM) มาใช้ซ้ำเพื่อสร้างตัวแทนคำที่มีประสิทธิภาพและกะทัดรัด คล้ายกับโมเดลอย่าง GloVe, Word2Vec และ FastText
- Matryoshka Representations: ลดมิติของ embedding ได้ตามต้องการ
- ใช้ทรัพยากรต่ำ: ทำงานได้รวดเร็วบน CPU ด้วยการ lookup token แบบง่ายร่วมกับ average pooling
- การทำให้เป็นไบนารี: โมเดลที่ฝึกด้วย straight-through estimator สามารถแพ็กเป็นอาร์เรย์จำนวนเต็มขนาดเล็กได้ (จะมาเร็ว ๆ นี้)
- อนุมานด้วย Numpy ล้วน: เบาและเรียบง่าย
WordLlama เหมาะกับงาน NLP ได้หลากหลาย และมีประโยชน์สำหรับการวิเคราะห์เชิงสำรวจและแอปพลิเคชันประเภทเครื่องมืออรรถประโยชน์ ด้วยความเร็วและขนาดที่พกพาได้
ผลลัพธ์ 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 ที่ผ่านการฝึกล่วงหน้าและนำข้อความไปทำ embedding:
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)
ตัวอย่างการใช้งานโมเดล embedding แบบไบนารี:
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 # ใช้ cosine similarity แทน hamming similarity
wl = WordLlama.load(config="l3_supercat", dim=1024)
หมายเหตุการฝึก
โมเดล embedding แบบไบนารีแสดงการปรับปรุงที่ชัดเจนยิ่งขึ้นเมื่อใช้มิติสูง โดยแนะนำให้ใช้ 512 หรือ 1024 มิติ ส่วน L2 Supercat ถูกฝึกบน A100 เดียวเป็นเวลา 12 ชั่วโมง ด้วย batch size 512
โรดแมป
- กำลังเพิ่มความสามารถด้านการอนุมาน:
- การแบ่งข้อความตามความหมาย
- เพิ่มตัวอย่างโน้ตบุ๊ก
- ตัวประเมิน DSPy
- ไปป์ไลน์ RAG
การดึง token embedding
หากต้องการดึง token embedding จากโมเดล ต้องยอมรับข้อตกลงผู้ใช้และล็อกอินด้วย Hugging Face CLI ก่อน จากนั้นสามารถใช้สไนเป็ตต่อไปนี้ได้:
from wordllama.extract import extract_safetensors
extract_safetensors("llama3_70B", "path/to/saved/model-0001-of-00XX.safetensors")
การอ้างอิง
หากใช้ WordLlama ในงานวิจัยหรือโปรเจ็กต์ กรุณาอ้างอิงดังนี้:
@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}
}
ไลเซนส์
โปรเจ็กต์นี้อยู่ภายใต้ไลเซนส์ MIT
สรุปโดย GN⁺
- WordLlama เป็นเครื่องมือ NLP ที่นำองค์ประกอบของโมเดลภาษาขนาดใหญ่มาใช้ซ้ำ เพื่อสร้างตัวแทนคำที่มีประสิทธิภาพและกะทัดรัด
- ทำงานได้รวดเร็วบน CPU และนำไปใช้เป็นยูทิลิตีแบบ "Swiss Army knife" สำหรับงาน NLP ได้หลากหลาย
- โมเดล embedding แบบไบนารีให้การปรับปรุงที่ชัดเจนยิ่งขึ้นในมิติสูง โดยแนะนำให้ใช้ 512 หรือ 1024 มิติ
- มีประโยชน์สำหรับการวิเคราะห์เชิงสำรวจและแอปพลิเคชันประเภทเครื่องมืออรรถประโยชน์ ด้วยความเร็วและขนาดที่พกพาได้
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ชอบตรงที่มีขนาดเล็ก ได้เปรียบกว่าโมเดลที่เล็กที่สุดของ SBERT
embeddings จับข้อมูลเชิงความหมายได้มาก และสามารถนำไปใช้กับงานที่มีประโยชน์ได้ด้วยตัวเอง
มีการถามว่ามีแผนรองรับภาษาอื่นนอกจากภาษาอังกฤษหรือไม่
แสดงให้เห็นว่าในตัวโทเค็นเองมีเนื้อหาด้านความหมายอยู่มาก
แสดงความคิดเห็นเกี่ยวกับการใช้ embeddings เพื่อแก้เกม Little Alchemy
มีประโยชน์มากสำหรับการทำเกม ขอบคุณ
ดูเจ๋งมาก ถามถึงข้อดีของโมเดล mini-lm
เคยเขียน "เกมภาษา" ที่ใช้ความสามารถคล้ายกันเมื่อหลายปีก่อน