- Transformers.rb ist eine Bibliothek, die Hugging Faces Transformers in Ruby nutzbar macht, und konzentriert sich darauf, moderne Transformer-Modelle in Ruby-Code auszuführen
- Die Installation erfolgt, indem zuerst Torch.rb installiert und anschließend
gem "transformers-rb"zur Gemfile hinzugefügt wird - Unterstützte Beispiele umfassen Embeddings, Sparse Embedding und Reranking-Modelle und zeigen die Verwendung von Modellen aus den Familien
sentence-transformers,mixedbread-ai,BAAI,SnowflakeundOpenSearch - Die Pipelines sind in Text und Vision unterteilt und rufen NER, Sentiment-Analyse, Fragebeantwortung, Bildklassifizierung, Bild-Feature-Extraktion usw. in der Form
Transformers.pipelineauf - Die API folgt der Transformers Python API und unterstützt derzeit die Architekturen BERT, DeBERTa-v2, DistilBERT, MPNet, ViT und XLM-RoBERTa
Transformers in Ruby verwenden
- Transformers.rb ist eine moderne transformers-Bibliothek für Ruby
- Wenn schnelle Inferenz benötigt wird, wird empfohlen, einen Blick auf Informers zu werfen
Installation
- Zuerst ist die Installation von Torch.rb erforderlich
- Danach wird die folgende Zeile zur Gemfile der Anwendung hinzugefügt
gem "transformers-rb"
Beispiele für unterstützte Modelle
- Das README bietet nach Embedding, Sparse Embedding und Reranking gegliederte Beispiele zur Modellnutzung
-
Embedding
- sentence-transformers/all-MiniLM-L6-v2: Erzeugt Embeddings aus einem Array von Sätzen
- sentence-transformers/multi-qa-MiniLM-L6-cos-v1: Enthält ein Beispiel, das Query- und Dokument-Embeddings erstellt und Dokumente nach Inner-Product-Score sortiert
- sentence-transformers/all-mpnet-base-v2: Wandelt ein Satz-Array in Embeddings um
- sentence-transformers/paraphrase-MiniLM-L6-v2: Bietet ein Embedding-Beispiel mit einem Satz-Array als Eingabe
- mixedbread-ai/mxbai-embed-large-v1: Enthält ein Beispiel, das für Satzrepräsentationen zur Suche den Präfix
"Represent this sentence for searching relevant passages: "verwendet - thenlper/gte-small: Erzeugt Embeddings aus zwei Sätzen
- intfloat/e5-base-v2: Enthält ein Beispiel, bei dem Dokumente den Präfix
"passage: "und Queries den Präfix"query: "erhalten - BAAI/bge-base-en-v1.5: Enthält ein Beispiel mit einem Präfix für die Repräsentation von Passages im Suchkontext
- Snowflake/snowflake-arctic-embed-m-v1.5: Enthält ein Beispiel, das Embeddings mit der Option
pooling: "cls"erzeugt
-
Sparse Embedding
- opensearch-project/opensearch-neural-sparse-encoding-v1: Lädt
AutoModelForMaskedLMundAutoTokenizerdirekt, um Sparse Embeddings zu berechnen - Für die Tokenizer-Ausgabe werden
padding,truncation,return_tensors: "pt"undreturn_token_type_ids: falseverwendet - Auf die Ausgabewerte wird eine Attention Mask angewendet, danach werden über
Torch.max,Torch.logundTorch.reluEmbedding-Arrays erzeugt - Werte an Positionen von Special Tokens werden auf 0 gesetzt
- opensearch-project/opensearch-neural-sparse-encoding-v1: Lädt
-
Reranking
- mixedbread-ai/mxbai-rerank-base-v1: Erzeugt Reranking-Ergebnisse aus einer Query und einer Dokumentliste
- BAAI/bge-reranker-base: Enthält ebenso ein Reranking-Beispiel mit einer Query und einem Dokument-Array als Eingabe
Pipelines
- Die Text-Pipelines unterstützen die folgenden Aufgaben
embedding: Text-Embeddings erzeugenreranking: Reihenfolge eines Query- und Dokument-Arrays neu ordnenner: Named-Entity Recognitionsentiment-analysis: Sentiment-Analysequestion-answering: Antwort aus Frage und Kontext erzeugenfeature-extraction: Text-Features extrahieren
- Die Vision-Pipelines unterstützen die folgenden Aufgaben
image-classification: Bildklassifizierungimage-feature-extraction: Bild-Features extrahieren
API und unterstützte Architekturen
- Diese Bibliothek folgt der Transformers Python API
- Die derzeit unterstützten Modellarchitekturen sind
- BERT
- DeBERTa-v2
- DistilBERT
- MPNet
- ViT
- XLM-RoBERTa
Entwicklung und Mitwirkung
- Änderungen lassen sich im Changelog nachverfolgen
- Zu den Möglichkeiten zur Mitwirkung gehören das Melden von Bugs, das Beheben von Bugs und Einreichen von Pull Requests, das Schreiben, Präzisieren und Überarbeiten der Dokumentation sowie das Vorschlagen oder Hinzufügen neuer Funktionen
- Zum Start der Entwicklung wird die Reihenfolge Repository klonen,
bundle install,bundle exec rake download:files,bundle exec rake testangegeben
1 Kommentare
Kommentare auf Hacker News
Ankanes ONNX Runtime für Ruby ist so einfach zu benutzen, dass man sich fragt, warum das offizielle JavaScript-Repository so schwer zu verstehen ist.
Ich habe bisher nur an der Oberfläche dessen gekratzt, was diese Person geleistet hat, und sie wirkt schon wie ein Held.
Ganz im Ernst: Ist dieser Mensch überhaupt menschlich? In eine so talentierte Einzelperson würde ich sogar 1 Milliarde Dollar investieren.
Er macht das sicher nicht deswegen, aber falls jemand seine Wertschätzung zeigen möchte: Ich habe Ankane für den Rails 2024 Luminary Award nominiert.
https://rubyonrails.org/2024/8/2/nominations-open-for-2024-l...
Solche Beiträge braucht die Ruby-Community wirklich, und auch dieses Projekt sieht interessant aus.
In diesem Fall hat Ruby plötzlich eine großartige Library bekommen, und das ist für sich genommen wirklich ein Grund zur Dankbarkeit. Aber die „Community“ hat so etwas erst Monate oder Jahre „hervorgebracht“, nachdem dieselbe Art Library bereits für Python, JavaScript, TypeScript, Rust, Go usw. erschienen war.
Das passiert nicht nur bei Machine Learning/Artificial Intelligence, sondern auch bei Ruby-Libraries, also Gems, die neue Technologien abdecken. Früher boten SaaS-Anbieter oder Startups von Anfang an ein offizielles Rubygem an, oft sogar vor anderen Plattformen oder Sprachen. Heute gibt es, wenn man mit Dingen wie Notion, Slack oder Cloudflare integrieren will, oft keine Ruby-Option oder zumindest keine offizielle.
Das ist traurig. Ruby ist eine viel breitere Sprache als Rails, und Zurückhaltung oder Abneigung gegenüber Rails kann ich nachvollziehen. Trotzdem ist Ruby eine Sprache, mit der das Arbeiten deutlich mehr Freude macht als mit Python und ganz sicher viel mehr als mit JavaScript. Ruby hätte heute die Position von Python einnehmen können, und ich bin überzeugt: Dann wären Zehntausende Entwickler heute ein kleines Stück glücklicher.
Ankane gibt der Branche im Alleingang auf wirklich viele Arten enorm viel zurück. Großartig.
Ich frage mich, wie eine einzelne Person so produktiv sein kann. Mit Arbeit, Familie usw. muss sein Leben doch ziemlich voll sein.
Es ist schwer auszudrücken, wie dankbar ich für Ankanes Gems bin. Die Dinge, die er gebaut hat, waren in mehreren meiner Apps unverzichtbar und schließen meiner Ansicht nach Lücken im Ökosystem.
Die Tools, die diese Person gebaut hat, sind wirklich erstaunlich. Davon darf gern noch mehr kommen.
Soweit ich weiß, ist Andrew Kane auch der Autor von pgvector, pgvector-ruby und neighbor, und die sind alle ziemlich großartig.
Außerdem hat er noch vieles andere gebaut.
Vielleicht hat er vor langer Zeit im Alleingang künstliche Intelligenz/Machine Learning gelöst und nutzt das nun, um so produktiv zu sein.
[0] https://github.com/pgvector/pgvector
[1] https://github.com/pgvector/pgvector-ruby
[2] https://github.com/ankane/neighbor
[3] https://github.com/ankane/
https://github.com/ankane/pretender macht es in Rails-Apps sehr einfach, sich als ein anderer Benutzer auszugeben.
https://github.com/ankane/ahoy ist ein eigenes Analytics-Tool für Rails.
https://github.com/ankane/blazer ist ein Business-Intelligence-Tool innerhalb von Rails.
https://github.com/ankane/field_test ist für A/B-Tests gedacht.
Solche Dinge steigern die Rails-Produktivität in gewöhnlichen Web-Apps. Für jedes davon gibt es vermutlich bessere Vendor-Produkte oder spezialisierte Lösungen, aber wenn man ein Gem einbindet, ein wenig konfiguriert und eine 80-Prozent-Lösung bekommt, kann man wirklich schnell ausliefern.
Chartkick ist eine Chart-Library für Ruby, Ahoy eine Analytics-Library für Rails und Searchkick eine Such-Library für Rails.
Auf seinem GitHub-Profil gibt es mehr als 370 Repositories.
Zum Beispiel ist
/discoeine sehr einfache Implementierung von Collaborative Filtering, mit der man schnell Empfehlungsfunktionen fast überall einbauen kann.Wenn du in Ruby nach irgendetwas rund um Machine Learning suchst, hat ankane es in der Regel schon einmal angesehen.
In der Ruby-Community gehören Andrew Kane und Chris Oliver für mich persönlich zu den Besten der Besten. Auch wenn man nicht all ihre Beiträge nutzt, sind solche Beiträge immer willkommen.