1 Punkte von GN⁺ 2024-09-16 | 1 Kommentare | Auf WhatsApp teilen

WordLlama

WordLlama ist ein schnelles und leichtgewichtiges NLP-Tool, das Aufgaben wie unscharfe Deduplizierung, Ähnlichkeit und Ranking mit minimalen Inferenz-Abhängigkeiten verarbeitet und für CPU-Hardware optimiert ist.

Inhaltsverzeichnis

  • Schnellstart
  • Was ist das?
  • MTEB-Ergebnisse
  • Text-Embeddings
  • Trainingsnotizen
  • Roadmap
  • Token-Embeddings extrahieren
  • Zitierung
  • Lizenz

Schnellstart

  • Installation:

    pip install wordllama
    
  • 256-dimensionale Modelle laden:

    from wordllama import WordLlama
    wl = WordLlama.load()
    
  • Ähnlichkeit zwischen zwei Sätzen berechnen:

    similarity_score = wl.similarity("i went to the car", "i went to the pawn shop")
    print(similarity_score)  # Output: 0.06641249096796882
    
  • Dokumente für eine Abfrage ranken:

    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)
    # ]
    
  • Weitere Inferenzmethoden:

    wl.deduplicate(candidates, threshold=0.8)  # unscharfe Deduplizierung
    wl.cluster(docs, k=5, max_iterations=100, tolerance=1e-4)  # Labeling mit kmeans/kmeans++-Initialisierung
    wl.filter(query, candidates, threshold=0.3)  # Kandidaten anhand der Abfrage filtern
    wl.topk(query, candidates, k=3)  # die Top-k-Strings für die Abfrage zurückgeben
    

Was ist das?

WordLlama ist ein NLP- und Wort-Embedding-Modell, das Komponenten großer Sprachmodelle (LLMs) wiederverwendet, um effiziente und kompakte Wortrepräsentationen zu erzeugen. Es ist Modellen wie GloVe, Word2Vec und FastText ähnlich.

  • Matryoshka Representations: Embedding-Dimensionen können bei Bedarf reduziert werden
  • Geringe Ressourcenanforderungen: Einfache Token-Lookups mit Average Pooling ermöglichen schnelle Ausführung auf CPUs
  • Binarisierung: Mit Straight-Through Estimator trainierte Modelle können in kleine Integer-Arrays gepackt werden (demnächst verfügbar)
  • Nur Numpy-Inferenz: leichtgewichtig und einfach

WordLlama eignet sich für eine Vielzahl von NLP-Aufgaben und ist durch seine Geschwindigkeit und portable Größe nützlich für explorative Analysen und Utility-Anwendungen.

MTEB-Ergebnisse

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-Embeddings

So lädt man vortrainierte Embeddings und bettet Text ein:

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)

Beispiel für die Verwendung eines binären Embedding-Modells:

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  # Kosinus-Ähnlichkeit statt Hamming-Ähnlichkeit verwenden
wl = WordLlama.load(config="l3_supercat", dim=1024)

Trainingsnotizen

Das binäre Embedding-Modell zeigte in höheren Dimensionen deutlichere Verbesserungen; empfohlen werden 512 oder 1024 Dimensionen. L2 Supercat wurde auf einer einzelnen A100 mit Batch-Größe 512 zwölf Stunden lang trainiert.

Roadmap

  • Es wird weiter an Inferenzfunktionen gearbeitet:
    • semantisches Text-Chunking
    • zusätzliche Beispiel-Notebooks
    • DSPy-Evaluator
    • RAG-Pipelines

Token-Embeddings extrahieren

Um Token-Embeddings aus dem Modell zu extrahieren, muss man der Nutzervereinbarung zustimmen und sich mit der Hugging Face CLI anmelden. Danach kann folgendes Snippet verwendet werden:

from wordllama.extract import extract_safetensors
extract_safetensors("llama3_70B", "path/to/saved/model-0001-of-00XX.safetensors")

Zitierung

Wenn du WordLlama in Forschung oder Projekten verwendest, zitiere es bitte wie folgt:

@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}
}

Lizenz

Dieses Projekt steht unter der MIT-Lizenz.

Zusammenfassung von GN⁺

  • WordLlama ist ein NLP-Tool, das Komponenten großer Sprachmodelle wiederverwendet, um effiziente und kompakte Wortrepräsentationen zu erzeugen.
  • Es läuft schnell auf CPUs und kann als vielseitiges „Schweizer Taschenmesser“-Utility für verschiedene NLP-Aufgaben eingesetzt werden.
  • Das binäre Embedding-Modell zeigt in höheren Dimensionen deutlichere Verbesserungen; empfohlen werden 512 oder 1024 Dimensionen.
  • Durch seine Geschwindigkeit und portable Größe ist es nützlich für explorative Analysen und Utility-Anwendungen.

1 Kommentare

 
GN⁺ 2024-09-16
Hacker-News-Kommentar
  • Mir gefällt die geringe Größe, sie ist vorteilhafter als das kleinste Modell von SBERT

    • Technisch veraltet, aber ein Kompromiss zugunsten der Performance
    • Bitte um eine Möglichkeit, zwischen verschiedenen Ähnlichkeitstypen umzuschalten, z. B. semantisch, NLI, Substantiv-abstrakt
    • Zum Beispiel möchte man "Freezing" und "Burning" bei der Klassifizierung von Zeitungsartikeln als ähnlich behandeln, bei Chemieartikeln jedoch gegensätzlich
    • Ich würde gern NLI-Embeddings verwenden, um Kausalbeziehungen zu erfassen
    • SBERT ist groß und ressourcenintensiv, weil mehrere Modelle geladen werden müssen
  • Embeddings erfassen viele semantische Informationen und können eigenständig für nützliche Aufgaben verwendet werden

    • Die Embeddings des Text-Encoders eines CLIP-Modells werden verwendet, um Prompts anzureichern
    • Wenn zum Beispiel das Wort "building" gegeben ist, sucht man in der Embedding-Matrix nach Begriffen wie "concrete" oder "underground" und ersetzt oder ergänzt damit
    • In begrenzten Experimenten wurde für die meisten Abfragen ein hoher Recall erzielt
  • Frage, ob Pläne für andere Sprachen außer Englisch bestehen

    • Das wäre ein perfektes Tool für Französisch
  • Zeigt, dass bereits die Tokens selbst viel semantischen Gehalt enthalten

  • Gedanken dazu, Little Alchemy mithilfe von Embeddings zu lösen

  • Sehr nützlich für die Spieleentwicklung, danke

  • Sieht großartig aus, Frage nach den Vorteilen des mini-lm-Modells

    • Es scheint bei den meisten MTEB-Aufgaben besser zu sein, aber ich frage mich, ob es auch bei Inferenz und Ähnlichem besser ist
  • Vor ein paar Jahren ein "Sprachspiel" mit ähnlicher Funktionalität geschrieben