transformers-ruby - Ruby için modern Transformers
(github.com/ankane)- Transformers.rb, Hugging Face’in Transformers’ını Ruby’de kullanmayı sağlayan bir kütüphanedir ve modern transformer modellerini Ruby koduyla çalıştırmaya odaklanır
- Kurulum, önce Torch.rb kurulduktan sonra Gemfile’a
gem "transformers-rb"eklenerek yapılır - Desteklenen örnekler embedding, sparse embedding ve reranking modellerini içerir;
sentence-transformers,mixedbread-ai,BAAI,Snowflake,OpenSearchailesi modellerin kullanımını gösterir - Pipeline’lar metin ve görsel olarak ayrılır; NER, duygu analizi, soru-cevap, görüntü sınıflandırma, görüntü özellik çıkarımı gibi işlemler
Transformers.pipelinebiçiminde çağrılır - API, Transformers Python API’yi izler ve şu anda BERT, DeBERTa-v2, DistilBERT, MPNet, ViT, XLM-RoBERTa mimarilerini destekler
Ruby’de Transformers kullanımı
- Transformers.rb, Ruby için modern transformers kütüphanesidir
- Hızlı çıkarım gerekiyorsa Informers incelemesi önerilir
Kurulum yöntemi
- Önce Torch.rb kurulumu gereklidir
- Ardından uygulamanın Gemfile’ına şu satır eklenir
gem "transformers-rb"
Desteklenen model örnekleri
- README, model kullanım örneklerini Embedding, sparse embedding ve reranking olarak ayırarak sunar
-
Embedding
- sentence-transformers/all-MiniLM-L6-v2: cümle dizilerini alıp embedding üretir
- sentence-transformers/multi-qa-MiniLM-L6-cos-v1: sorgu ve belge embedding’leri oluşturduktan sonra belgeleri iç çarpım skoruna göre sıralayan bir örnek içerir
- sentence-transformers/all-mpnet-base-v2: cümle dizilerini embedding’lere dönüştürür
- sentence-transformers/paraphrase-MiniLM-L6-v2: girdi olarak cümle dizisi alan bir embedding örneği sunar
- mixedbread-ai/mxbai-embed-large-v1: aramayla ilgili pasajlar için cümle temsili üretmek üzere
"Represent this sentence for searching relevant passages: "önekini kullanan bir örnek vardır - thenlper/gte-small: iki cümleyi girdi olarak alıp embedding üretir
- intfloat/e5-base-v2: belgeler için
"passage: ", sorgular için"query: "öneki ekleyen bir örnek vardır - BAAI/bge-base-en-v1.5: aramayla ilgili passage temsili için önek kullanan bir örnek vardır
- Snowflake/snowflake-arctic-embed-m-v1.5:
pooling: "cls"seçeneğiyle embedding üreten bir örnek vardır
-
Sparse embedding
- opensearch-project/opensearch-neural-sparse-encoding-v1:
AutoModelForMaskedLMveAutoTokenizerdoğrudan yüklenerek sparse embedding hesaplanır - Tokenizer çıktısı
padding,truncation,return_tensors: "pt",return_token_type_ids: falsekullanır - Çıktılara attention mask uygulanır ve
Torch.max,Torch.log,Torch.reluüzerinden embedding dizisi oluşturulur - Special token konumlarındaki değerler 0 olarak ayarlanır
- opensearch-project/opensearch-neural-sparse-encoding-v1:
-
Reranking
- mixedbread-ai/mxbai-rerank-base-v1: sorgu ve belge listesini alıp reranking sonucu üretir
- BAAI/bge-reranker-base: benzer şekilde sorgu ve belge dizisini girdi olarak kullanan bir reranking örneği vardır
Pipeline’lar
- Text pipeline’ı şu görevleri destekler
embedding: metin embedding’i üretimireranking: sorgu ve belge dizisinin sıralamasını yeniden düzenlemener: named-entity recognitionsentiment-analysis: duygu analiziquestion-answering: soru ve bağlamı girdi olarak alıp yanıt üretmefeature-extraction: metin özellik çıkarımı
- Vision pipeline’ı şu görevleri destekler
image-classification: görüntü sınıflandırmaimage-feature-extraction: görüntü özellik çıkarımı
API ve desteklenen mimariler
- Bu kütüphane Transformers Python API’yi izler
- Şu anda desteklenen model mimarileri şunlardır
- BERT
- DeBERTa-v2
- DistilBERT
- MPNet
- ViT
- XLM-RoBERTa
Geliştirme ve katkı
- Değişiklik geçmişi changelog üzerinden görülebilir
- Katkı yöntemleri; hata bildirme, hata düzeltme ve pull request gönderme, dokümantasyon yazma·netleştirme·düzeltme, yeni özellik önerme veya eklemeyi içerir
- Geliştirmeye başlama komutları depo klonlama,
bundle install,bundle exec rake download:files,bundle exec rake testsırasıyla açıklanır
1 yorum
Hacker News yorumları
Ankane’in Ruby için ONNX runtime’ı kullanması o kadar kolay ki, resmi JavaScript deposunun neden bu kadar anlaşılması zor olduğunu sorgulatıyor
Bu kişinin yaptıklarına daha sadece yüzeysel baktım ama şimdiden kahraman gibi görünüyor
Cidden, bu adam insan mı? Bu kadar yetenekli bir bireye olsa olsa 1 milyar dolar yatırım yapmak isterdim
Bunu yapmak için değildir herhalde ama teşekkür etmek isteyen biri olursa diye Ankane’i Rails 2024 Luminary award için aday gösterdim
https://rubyonrails.org/2024/8/2/nominations-open-for-2024-l...
Ruby topluluğunun tam da böyle katkılara ihtiyacı var ve bu proje de ilgi çekici görünüyor
Bu örnekte Ruby bir anda harika bir kütüphane kazandı ve bu başlı başına gerçekten takdire değer bir başarı. Ama “topluluk”, bunu Python, JavaScript, TypeScript, Rust, Go vb. için aynı kütüphaneler çıktıktan aylar hatta yıllar sonra ancak “üretebildi”
Bu sadece makine öğrenmesi/yapay zeka için değil; yeni teknolojilere yönelik Ruby kütüphaneleri, yani gem’lerde de aynı durum geçerli. Eskiden SaaS ya da startup şirketleri en baştan resmi Rubygem sunardı, hatta çoğu zaman bunu diğer platform ya da dillerden önce yapardı. Bugünlerde Notion, Slack, Cloudflare gibi servislerle entegrasyon yapmak istediğinizde Ruby seçeneği ya hiç olmuyor ya da en azından resmi bir seçenek olmuyor
Bu üzücü. Ruby, Rails’ten çok daha geniş bir dil ve Rails’e karşı çekince ya da hoşnutsuzluk olmasını anlayabilirim. Yine de Ruby, Python’dan ve hele JavaScript’ten çok daha keyifli bir çalışma dili. Ruby bugün Python’un bulunduğu yerde olabilirdi ve öyle olsaydı on binlerce geliştiricinin şu ankinden biraz daha mutlu olacağına eminim
Ankane tek başına bile sektöre gerçekten çok fazla şekilde muazzam katkı sağlıyor. İnanılmaz
Bir insan nasıl bu kadar üretken olabilir, merak ediyorum. İş, aile vs. derken muhtemelen oldukça yoğun bir hayatı vardır
Ankane’in gem’leri için ne kadar minnettar olduğumu anlatmak zor. Yaptıkları birkaç uygulamamda vazgeçilmez unsur oldu ve ekosistemdeki boşlukları dolduruyorlar
Bu kişinin yaptığı araçlar gerçekten etkileyici. Daha fazlasını görmek güzel olurdu
Bildiğim kadarıyla Andrew Kane aynı zamanda pgvector, pgvector-ruby ve neighbor’ın da yazarı ve hepsi de oldukça iyi
Bunun dışında da pek çok şey yaptı
Belki de uzun zaman önce yapay zeka/makine öğrenmesini tek başına çözdü de şimdi bunu kullanarak bu kadar üretken oluyordur
[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 Rails uygulamalarında başka bir kullanıcı gibi davranmayı çok kolaylaştırıyor
https://github.com/ankane/ahoy Rails için kendi analitik aracı
https://github.com/ankane/blazer Rails içine gömülü bir iş zekası aracı
https://github.com/ankane/field_test A/B testleri için
Bunlar gibi araçlar sıradan web uygulamalarında Rails üretkenliğini artırıyor. Her biri için daha iyi bir vendor ürünü ya da daha uzmanlaşmış bir çözüm olabilir ama gem’i ekleyip biraz yapılandırmayla yüzde 80’lik bir çözüm elde edebiliyorsanız çok hızlı şekilde yayına çıkabilirsiniz
Chartkick Ruby için bir grafik kütüphanesi, Ahoy Rails için bir analitik kütüphanesi, Searchkick ise Rails için bir arama kütüphanesi
GitHub profilinde 370’ten fazla depo var
Örneğin
/disco, herhangi bir yere hızlıca öneri özelliği eklemek için kullanılabilecek çok basit bir işbirlikçi filtreleme uygulamasıRuby ile makine öğrenmesiyle ilgili bir şey arıyorsanız ankane muhtemelen ona zaten en az bir kez bakmıştır
Ruby topluluğunda Andrew Kane ile Chris Oliver’ın kişisel olarak en iyilerin de iyisi olduğunu düşünüyorum. Tüm katkılarını kullanmasanız bile, böyle katkılar her zaman memnuniyetle karşılanır