transformers-ruby – des Transformers modernes pour Ruby
(github.com/ankane)- Transformers.rb est une bibliothèque qui permet d’utiliser Transformers de Hugging Face en Ruby, avec pour objectif d’exécuter des modèles transformer modernes depuis du code Ruby
- L’installation se fait en installant d’abord Torch.rb, puis en ajoutant
gem "transformers-rb"au Gemfile - Les exemples pris en charge couvrent les embeddings, les sparse embeddings et les modèles de reranking, et montrent comment utiliser des modèles des familles
sentence-transformers,mixedbread-ai,BAAI,SnowflakeetOpenSearch - Les pipelines sont divisés entre texte et vision, et appellent notamment NER, l’analyse de sentiment, le question answering, la classification d’images et l’extraction de caractéristiques d’image via
Transformers.pipeline - L’API suit la Transformers Python API et prend actuellement en charge les architectures BERT, DeBERTa-v2, DistilBERT, MPNet, ViT et XLM-RoBERTa
Utiliser Transformers en Ruby
- Transformers.rb est une bibliothèque transformers moderne pour Ruby
- Pour une inférence rapide, il est recommandé de consulter Informers
Installation
- Il faut d’abord installer Torch.rb
- Ajoutez ensuite la ligne suivante au Gemfile de l’application
gem "transformers-rb"
Exemples de modèles pris en charge
- Le README fournit des exemples d’utilisation des modèles, répartis entre Embedding, sparse embedding et reranking
-
Embedding
- sentence-transformers/all-MiniLM-L6-v2 : prend un tableau de phrases et génère des embeddings
- sentence-transformers/multi-qa-MiniLM-L6-cos-v1 : inclut un exemple qui crée des embeddings pour une requête et des documents, puis trie les documents selon un score de produit scalaire
- sentence-transformers/all-mpnet-base-v2 : convertit un tableau de phrases en embeddings
- sentence-transformers/paraphrase-MiniLM-L6-v2 : fournit un exemple d’embedding prenant un tableau de phrases en entrée
- mixedbread-ai/mxbai-embed-large-v1 : propose un exemple utilisant le préfixe
"Represent this sentence for searching relevant passages: "pour représenter des phrases destinées à la recherche - thenlper/gte-small : génère des embeddings à partir de deux phrases en entrée
- intfloat/e5-base-v2 : propose un exemple ajoutant le préfixe
"passage: "aux documents et"query: "aux requêtes - BAAI/bge-base-en-v1.5 : propose un exemple utilisant un préfixe pour représenter des passages liés à la recherche
- Snowflake/snowflake-arctic-embed-m-v1.5 : propose un exemple qui génère des embeddings avec l’option
pooling: "cls"
-
Sparse embedding
- opensearch-project/opensearch-neural-sparse-encoding-v1 : charge directement
AutoModelForMaskedLMetAutoTokenizerpour calculer un sparse embedding - La sortie du tokenizer utilise
padding,truncation,return_tensors: "pt"etreturn_token_type_ids: false - Un attention mask est appliqué aux sorties, puis un tableau d’embeddings est créé via
Torch.max,Torch.logetTorch.relu - Les valeurs aux positions des special tokens sont définies à 0
- opensearch-project/opensearch-neural-sparse-encoding-v1 : charge directement
-
Reranking
- mixedbread-ai/mxbai-rerank-base-v1 : prend une requête et une liste de documents pour générer un résultat de reranking
- BAAI/bge-reranker-base : propose de même un exemple de reranking utilisant une requête et un tableau de documents en entrée
Pipelines
- Les pipelines Text prennent en charge les tâches suivantes
embedding: génération d’embeddings de textereranking: réordonnancement d’un tableau de documents selon une requêtener: reconnaissance d’entités nomméessentiment-analysis: analyse de sentimentquestion-answering: génération d’une réponse à partir d’une question et d’un contextefeature-extraction: extraction de caractéristiques textuelles
- Les pipelines Vision prennent en charge les tâches suivantes
image-classification: classification d’imagesimage-feature-extraction: extraction de caractéristiques d’image
API et architectures prises en charge
- Cette bibliothèque suit la Transformers Python API
- Les architectures de modèles actuellement prises en charge sont les suivantes
- BERT
- DeBERTa-v2
- DistilBERT
- MPNet
- ViT
- XLM-RoBERTa
Développement et contribution
- L’historique des changements est disponible dans le changelog
- Les contributions incluent le signalement de bugs, la correction de bugs avec soumission de pull requests, la rédaction, clarification ou correction de la documentation, ainsi que la proposition ou l’ajout de nouvelles fonctionnalités
- Les commandes pour démarrer le développement sont indiquées dans l’ordre suivant : cloner le dépôt,
bundle install,bundle exec rake download:files, puisbundle exec rake test
1 commentaires
Commentaires sur Hacker News
Le runtime ONNX pour Ruby d’Ankane est tellement facile à utiliser qu’on en vient à se demander pourquoi le dépôt JavaScript officiel est si difficile à comprendre.
Je n’ai encore fait qu’effleurer ce que cette personne a accompli, mais elle a déjà tout d’un héros.
Sérieusement, cette personne est-elle humaine ? Si un individu peut être aussi talentueux, j’aurais envie d’investir même 1 milliard de dollars.
Ce n’est sans doute pas pour ça qu’il fait tout cela, mais pour ceux qui voudraient exprimer leur gratitude, j’ai nommé Ankane au Rails 2024 Luminary award.
https://rubyonrails.org/2024/8/2/nominations-open-for-2024-l...
Ce genre de contribution est vraiment nécessaire à la communauté Ruby, et ce projet a l’air intéressant.
Dans ce cas précis, Ruby se retrouve soudain avec une excellente bibliothèque, et c’est en soi une réalisation dont on peut vraiment être reconnaissant. Mais la « communauté » ne l’a en quelque sorte « produite » que des mois, voire des années, après l’arrivée de bibliothèques équivalentes pour Python, JavaScript, TypeScript, Rust, Go, etc.
Cela ne concerne pas seulement le machine learning/l’intelligence artificielle, mais aussi les gems, les bibliothèques Ruby qui couvrent les nouvelles technologies. Autrefois, les SaaS ou les startups proposaient dès le départ un Rubygem officiel, souvent même avant d’autres plateformes ou langages. Aujourd’hui, quand on veut intégrer des services comme Notion, Slack ou Cloudflare, il n’y a souvent pas d’option Ruby, ou du moins pas d’option officielle.
C’est triste. Ruby est un langage bien plus vaste que Rails, et je peux comprendre les réticences ou l’antipathie envers Rails. Mais Ruby reste un langage bien plus agréable à utiliser que Python, et certainement bien plus que JavaScript. Ruby aurait pu occuper aujourd’hui la place de Python, et je suis convaincu que si cela avait été le cas, des dizaines de milliers de développeurs seraient un peu plus heureux qu’ils ne le sont maintenant.
À lui seul, Ankane apporte à l’industrie une contribution énorme de tant de manières. Impressionnant.
Je me demande comment une seule personne peut être aussi productive. Il doit déjà avoir une vie bien remplie avec le travail, la famille, etc.
Il est difficile d’exprimer à quel point je suis reconnaissant pour les gems d’Ankane. Ce qu’il a créé a été indispensable dans plusieurs de mes apps, et je trouve que cela comble des manques dans l’écosystème.
Les outils créés par cette personne sont vraiment incroyables. Qu’il y en ait encore plus, ce serait très bien.
Andrew Kane est aussi, à ma connaissance, l’auteur de pgvector, pgvector-ruby et neighbor, qui sont tous vraiment excellents.
Il a aussi créé beaucoup d’autres choses.
Peut-être qu’il a résolu l’intelligence artificielle/le machine learning à lui seul il y a longtemps, et qu’il s’en sert pour être aussi productif.
[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 facilite énormément l’usurpation d’un autre utilisateur dans les apps Rails.
https://github.com/ankane/ahoy est un outil d’analytics auto-hébergé pour Rails.
https://github.com/ankane/blazer est un outil de business intelligence intégré à Rails.
https://github.com/ankane/field_test sert aux tests A/B.
Tout cela augmente la productivité avec Rails dans une application web classique. Il existe sans doute de meilleurs produits éditeurs ou des solutions spécialisées pour chacun de ces cas, mais pouvoir ajouter un gem, faire un peu de configuration et obtenir une solution à 80 % permet de lancer très vite.
Chartkick est une bibliothèque de graphiques pour Ruby, Ahoy une bibliothèque d’analytics pour Rails, et Searchkick une bibliothèque de recherche pour Rails.
Son profil GitHub compte plus de 370 dépôts.
Par exemple,
/discoest une implémentation très simple de filtrage collaboratif pratique quand on veut ajouter rapidement des recommandations quelque part.Si vous cherchez quelque chose lié au machine learning en Ruby, ankane s’y est généralement déjà penché.
Dans la communauté Ruby, Andrew Kane et Chris Oliver sont, à mes yeux, parmi les tout meilleurs. Même si je n’utilise pas toutes leurs contributions, ce genre d’apports est toujours le bienvenu.