- Transformers.rb adalah library yang memungkinkan penggunaan Transformers dari Hugging Face di Ruby, dengan fokus pada menjalankan model transformer terbaru melalui kode Ruby
- Instalasi dilakukan dengan memasang Torch.rb terlebih dahulu lalu menambahkan
gem "transformers-rb"ke Gemfile - Contoh dukungan mencakup embedding, sparse embedding, dan model reranking, serta menunjukkan cara menggunakan model keluarga
sentence-transformers,mixedbread-ai,BAAI,Snowflake, danOpenSearch - Pipeline dibagi menjadi teks dan visi, dan NER, analisis sentimen, tanya jawab, klasifikasi gambar, ekstraksi fitur gambar, dan lainnya dipanggil dalam bentuk
Transformers.pipeline - API mengikuti Transformers Python API dan saat ini mendukung arsitektur BERT, DeBERTa-v2, DistilBERT, MPNet, ViT, dan XLM-RoBERTa
Menggunakan Transformers di Ruby
- Transformers.rb adalah library transformers modern untuk Ruby
- Jika membutuhkan inferensi cepat, pengguna diarahkan untuk melihat Informers
Cara instalasi
- Pertama, perlu memasang Torch.rb
- Setelah itu, tambahkan baris berikut ke Gemfile aplikasi
gem "transformers-rb"
Contoh model yang didukung
- README menyediakan contoh penggunaan model yang dibagi menjadi Embedding, sparse embedding, dan reranking
-
Embedding
- sentence-transformers/all-MiniLM-L6-v2: menerima array kalimat dan menghasilkan embedding
- sentence-transformers/multi-qa-MiniLM-L6-cos-v1: menyertakan contoh membuat embedding kueri dan dokumen lalu mengurutkan dokumen dengan skor dot product
- sentence-transformers/all-mpnet-base-v2: mengubah array kalimat menjadi embedding
- sentence-transformers/paraphrase-MiniLM-L6-v2: menyediakan contoh embedding dengan input array kalimat
- mixedbread-ai/mxbai-embed-large-v1: ada contoh penggunaan prefiks
"Represent this sentence for searching relevant passages: "untuk representasi kalimat pencarian - thenlper/gte-small: menghasilkan embedding dari dua kalimat sebagai input
- intfloat/e5-base-v2: ada contoh menambahkan prefiks
"passage: "untuk dokumen dan"query: "untuk kueri - BAAI/bge-base-en-v1.5: ada contoh penggunaan prefiks untuk representasi passage terkait pencarian
- Snowflake/snowflake-arctic-embed-m-v1.5: ada contoh menghasilkan embedding dengan opsi
pooling: "cls"
-
Sparse embedding
- opensearch-project/opensearch-neural-sparse-encoding-v1: memuat
AutoModelForMaskedLMdanAutoTokenizersecara langsung untuk menghitung sparse embedding - Output tokenizer menggunakan
padding,truncation,return_tensors: "pt",return_token_type_ids: false - Nilai keluaran diberi attention mask lalu diproses dengan
Torch.max,Torch.log, danTorch.reluuntuk membuat array embedding - Nilai pada posisi special token diatur menjadi 0
- opensearch-project/opensearch-neural-sparse-encoding-v1: memuat
-
Reranking
- mixedbread-ai/mxbai-rerank-base-v1: menerima kueri dan daftar dokumen untuk menghasilkan hasil reranking
- BAAI/bge-reranker-base: juga memiliki contoh reranking dengan input kueri dan array dokumen
Pipeline
- Pipeline Text mendukung tugas berikut
embedding: menghasilkan embedding teksreranking: menyusun ulang peringkat kueri dan array dokumenner: named-entity recognitionsentiment-analysis: analisis sentimenquestion-answering: menghasilkan jawaban dari pertanyaan dan konteks sebagai inputfeature-extraction: ekstraksi fitur teks
- Pipeline Vision mendukung tugas berikut
image-classification: klasifikasi gambarimage-feature-extraction: ekstraksi fitur gambar
API dan arsitektur yang didukung
- Library ini mengikuti Transformers Python API
- Arsitektur model yang saat ini didukung adalah sebagai berikut
- BERT
- DeBERTa-v2
- DistilBERT
- MPNet
- ViT
- XLM-RoBERTa
Pengembangan dan kontribusi
- Riwayat perubahan dapat dilihat di changelog
- Cara berkontribusi mencakup pelaporan bug, memperbaiki bug dan mengirim pull request, menulis·memperjelas·memperbaiki dokumentasi, serta mengusulkan atau menambahkan fitur baru
- Perintah untuk memulai pengembangan dijelaskan berurutan sebagai clone repositori,
bundle install,bundle exec rake download:files, lalubundle exec rake test
1 komentar
Komentar di Hacker News
ONNX Runtime untuk Ruby dari Ankane begitu mudah digunakan sampai membuat orang bertanya-tanya kenapa repositori JavaScript resminya begitu sulit dipahami.
Padahal saya baru melihat sekilas apa yang orang ini kerjakan, tapi rasanya dia seperti pahlawan.
Serius, orang ini benar-benar manusia? Kalau ada individu setalenta ini, saya ingin berinvestasi bahkan 1 miliar dolar.
Mungkin bukan itu alasan dia melakukan ini, tapi kalau ada yang ingin menunjukkan apresiasi, saya sudah menominasikan Ankane untuk Rails 2024 Luminary award.
https://rubyonrails.org/2024/8/2/nominations-open-for-2024-l...
Kontribusi seperti ini benar-benar dibutuhkan komunitas Ruby, dan proyek ini juga terlihat menarik.
Dalam kasus ini, Ruby tiba-tiba mendapat library yang hebat, dan itu sendiri adalah pencapaian yang sangat patut disyukuri. Namun “komunitas” baru “menciptakan” hal seperti ini beberapa bulan atau bahkan beberapa tahun setelah library yang sama muncul untuk Python, JavaScript, TypeScript, Rust, Go, dan lainnya.
Ini tidak hanya terjadi pada machine learning/artificial intelligence, tetapi juga pada gem, library Ruby untuk teknologi baru. Dulu, SaaS atau startup sejak awal menyediakan Rubygem resmi, sering kali bahkan sebelum platform atau bahasa lain. Sekarang, kalau ingin berintegrasi dengan sesuatu seperti Notion, Slack, atau Cloudflare, sering kali tidak ada opsi Ruby, atau setidaknya tidak ada opsi resmi.
Ini menyedihkan. Ruby adalah bahasa yang jauh lebih luas daripada Rails, dan saya bisa memahami keengganan atau antipati terhadap Rails. Tetap saja, Ruby adalah bahasa yang jauh lebih menyenangkan untuk digunakan dibanding Python, dan jelas jauh lebih menyenangkan daripada JavaScript. Ruby bisa saja menempati posisi Python saat ini, dan saya yakin jika itu terjadi, puluhan ribu developer akan sedikit lebih bahagia daripada sekarang.
Ankane, sendirian, benar-benar mengembalikan kontribusi luar biasa ke industri dalam begitu banyak cara. Mengagumkan.
Saya penasaran bagaimana satu orang bisa se-produktif ini. Hidupnya pasti cukup sibuk dengan pekerjaan, keluarga, dan lain-lain.
Sulit mengungkapkan betapa saya berterima kasih atas gem-gem Ankane. Hal-hal yang ia buat adalah komponen penting di beberapa aplikasi saya, dan menurut saya ia mengisi celah di ekosistem.
Tool yang dibuat orang ini benar-benar luar biasa. Saya akan senang kalau ada lebih banyak lagi.
Setahu saya Andrew Kane juga penulis pgvector, pgvector-ruby, dan neighbor, semuanya cukup hebat.
Ia juga membuat banyak hal lainnya.
Mungkin saja dia sudah menyelesaikan artificial intelligence/machine learning sendirian sejak lama, lalu menggunakannya untuk menjadi seproduktif ini.
[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 membuat impersonasi sebagai pengguna lain di aplikasi Rails menjadi sangat mudah.
https://github.com/ankane/ahoy adalah tool analitik mandiri untuk Rails.
https://github.com/ankane/blazer adalah tool business intelligence yang berjalan di dalam Rails.
https://github.com/ankane/field_test adalah untuk A/B testing.
Hal-hal seperti ini meningkatkan produktivitas Rails pada aplikasi web biasa. Untuk masing-masing mungkin ada produk vendor atau solusi khusus yang lebih baik, tetapi kalau bisa memasang gem, melakukan sedikit konfigurasi, dan mendapatkan solusi 80%, kita bisa merilis dengan sangat cepat.
Chartkick adalah library chart untuk Ruby, Ahoy adalah library analitik Rails, dan Searchkick adalah library pencarian Rails.
Profil GitHub-nya punya lebih dari 370 repositori.
Misalnya,
/discoadalah implementasi collaborative filtering yang sangat sederhana untuk menambahkan fitur rekomendasi cepat di mana saja.Kalau Anda mencari sesuatu terkait machine learning di Ruby, biasanya ankane sudah pernah meninjaunya.
Di komunitas Ruby, menurut saya pribadi Andrew Kane dan Chris Oliver adalah yang terbaik di antara yang terbaik. Meski tidak memakai semua kontribusi mereka, kontribusi seperti itu selalu layak disambut.