Show HN: Wordllama – Những điều có thể làm với token embedding của LLM
(github.com/dleemiller)WordLlama
WordLlama là một công cụ NLP nhanh và nhẹ, xử lý các tác vụ như khử trùng lặp mờ, đo độ tương đồng và xếp hạng với mức phụ thuộc tối thiểu vào thời gian suy luận, đồng thời được tối ưu cho phần cứng CPU.
Mục lục
- Bắt đầu nhanh
- Là gì?
- Kết quả MTEB
- Text embedding
- Ghi chú huấn luyện
- Lộ trình
- Trích xuất token embedding
- Trích dẫn
- Giấy phép
Bắt đầu nhanh
-
Cài đặt:
pip install wordllama -
Tải mô hình 256 chiều:
from wordllama import WordLlama wl = WordLlama.load() -
Tính độ tương đồng giữa hai câu:
similarity_score = wl.similarity("i went to the car", "i went to the pawn shop") print(similarity_score) # Output: 0.06641249096796882 -
Xếp hạng tài liệu cho một truy vấn:
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) # ] -
Các phương thức suy luận bổ sung:
wl.deduplicate(candidates, threshold=0.8) # khử trùng lặp mờ wl.cluster(docs, k=5, max_iterations=100, tolerance=1e-4) # gán nhãn bằng khởi tạo kmeans/kmeans++ wl.filter(query, candidates, threshold=0.3) # lọc ứng viên dựa trên truy vấn wl.topk(query, candidates, k=3) # trả về top k chuỗi dựa trên truy vấn
Là gì?
WordLlama là một mô hình NLP và word embedding tái sử dụng các thành phần của mô hình ngôn ngữ lớn (LLM) để tạo ra biểu diễn từ hiệu quả và gọn nhẹ. Nó tương tự các mô hình như GloVe, Word2Vec và FastText.
- Matryoshka Representations: có thể giảm số chiều embedding khi cần
- Yêu cầu tài nguyên thấp: có thể chạy nhanh trên CPU với tra cứu token đơn giản dùng average pooling
- Nhị phân hóa: các mô hình được huấn luyện bằng straight-through estimator có thể được đóng gói thành các mảng số nguyên nhỏ (sắp ra mắt)
- Suy luận chỉ với Numpy: nhẹ và đơn giản
WordLlama phù hợp cho nhiều tác vụ NLP, hữu ích cho phân tích khám phá và các ứng dụng tiện ích nhờ tốc độ nhanh và kích thước dễ mang theo.
Kết quả 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 |
Text embedding
Cách tải embedding đã được huấn luyện trước và embedding văn bản:
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)
Ví dụ sử dụng mô hình embedding nhị phân:
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 # dùng độ tương đồng cosine thay cho độ tương đồng Hamming
wl = WordLlama.load(config="l3_supercat", dim=1024)
Ghi chú huấn luyện
Mô hình embedding nhị phân cho thấy cải thiện rõ rệt hơn ở số chiều cao, và 512 hoặc 1024 chiều được khuyến nghị. L2 Supercat được huấn luyện trong 12 giờ trên một A100 duy nhất với batch size 512.
Lộ trình
- Đang bổ sung thêm các tính năng suy luận:
- Semantic text chunking
- Thêm notebook ví dụ
- DSPy evaluator
- Pipeline RAG
Trích xuất token embedding
Để trích xuất token embedding từ mô hình, bạn cần đồng ý với thỏa thuận người dùng và đăng nhập bằng Hugging Face CLI. Sau đó có thể dùng đoạn mã sau:
from wordllama.extract import extract_safetensors
extract_safetensors("llama3_70B", "path/to/saved/model-0001-of-00XX.safetensors")
Trích dẫn
Nếu bạn sử dụng WordLlama trong nghiên cứu hoặc dự án, vui lòng trích dẫn như sau:
@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}
}
Giấy phép
Dự án này được cấp phép theo giấy phép MIT.
Tóm tắt của GN⁺
- WordLlama là một công cụ NLP tạo ra biểu diễn từ hiệu quả và gọn nhẹ bằng cách tái sử dụng các thành phần của mô hình ngôn ngữ lớn.
- Nó chạy nhanh trên CPU và có thể được dùng như một tiện ích “dao đa năng” phù hợp cho nhiều tác vụ NLP khác nhau.
- Mô hình embedding nhị phân cho thấy cải thiện rõ rệt hơn ở số chiều cao, và 512 hoặc 1024 chiều được khuyến nghị.
- Với tốc độ nhanh và kích thước dễ mang theo, nó hữu ích cho phân tích khám phá và các ứng dụng tiện ích.
1 bình luận
Ý kiến Hacker News
Thích kích thước nhỏ, có lợi thế hơn mô hình nhỏ nhất của SBERT
Embedding nắm bắt rất nhiều thông tin ngữ nghĩa và có thể được dùng độc lập cho các tác vụ hữu ích
Hỏi liệu có kế hoạch hỗ trợ các ngôn ngữ khác ngoài tiếng Anh hay không
Cho thấy bản thân token đã chứa rất nhiều nội dung ngữ nghĩa
Suy nghĩ về việc dùng embedding để giải Little Alchemy
Rất hữu ích cho phát triển game, cảm ơn
Trông rất hay, hỏi về ưu điểm của mô hình mini-lm
Đã viết một "trò chơi ngôn ngữ" dùng chức năng tương tự vài năm trước