1 điểm bởi GN⁺ 2024-09-16 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2024-09-16
Ý 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

    • Về mặt kỹ thuật thì đã cũ, nhưng là sự đánh đổi để lấy hiệu năng
    • Đề nghị cung cấp cách chuyển đổi giữa nhiều kiểu tương đồng khác nhau (ví dụ: ngữ nghĩa, NLI, danh từ-trừu tượng)
    • Ví dụ, muốn coi "Freezing" và "Burning" là tương tự nhau trong phân loại bài báo, nhưng là đối lập nhau trong bài viết về hóa học
    • Muốn dùng embedding NLI để nắm bắt quan hệ nhân quả
    • SBERT lớn và phải tải nhiều mô hình nên tốn tài nguyên
  • 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

    • Dùng embedding từ bộ mã hóa văn bản của mô hình CLIP để tăng cường prompt
    • Ví dụ, khi cho từ "building", có thể tìm các từ như "concrete", "underground" trong ma trận embedding để thay thế hoặc bổ sung
    • Trong các thử nghiệm hạn chế, đạt recall cao với hầu hết truy vấn
  • 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

    • Đây sẽ là công cụ hoàn hảo cho tiếng Pháp
  • 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

    • Có vẻ tốt hơn trong hầu hết các tác vụ MTEB, nhưng tò mò không biết có tốt hơn ở suy luận hay không
  • Đã 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