- Transformers.rb एक लाइब्रेरी है जो Hugging Face के Transformers को Ruby में इस्तेमाल करने योग्य बनाती है, और Ruby कोड के साथ नवीनतम transformer models चलाने पर फोकस करती है
- इंस्टॉलेशन के लिए पहले Torch.rb इंस्टॉल करना होता है, फिर Gemfile में
gem "transformers-rb"जोड़ना होता है - समर्थित उदाहरणों में embedding, sparse embedding, reranking models शामिल हैं, और
sentence-transformers,mixedbread-ai,BAAI,Snowflake,OpenSearchपरिवार के models के उपयोग का तरीका दिखाया गया है - pipelines को text और vision में बाँटा गया है, और NER, sentiment analysis, question answering, image classification, image feature extraction आदि को
Transformers.pipelineरूप में कॉल किया जाता है - API Transformers Python API का पालन करता है, और फिलहाल BERT, DeBERTa-v2, DistilBERT, MPNet, ViT, XLM-RoBERTa architectures को सपोर्ट करता है
Ruby में Transformers का उपयोग
- Transformers.rb Ruby के लिए आधुनिक transformers लाइब्रेरी है
- अगर तेज inference की ज़रूरत हो, तो Informers देखने की सलाह दी गई है
इंस्टॉलेशन का तरीका
- पहले Torch.rb इंस्टॉलेशन की ज़रूरत होती है
- इसके बाद application की Gemfile में नीचे दी गई लाइन जोड़ें
gem "transformers-rb"
समर्थित models के उदाहरण
- README, model usage examples को Embedding, sparse embedding, और reranking में बाँटकर देता है
-
Embedding
- sentence-transformers/all-MiniLM-L6-v2: वाक्यों की array लेकर embedding बनाता है
- sentence-transformers/multi-qa-MiniLM-L6-cos-v1: query और document embeddings बनाने के बाद dot product score से documents को sort करने वाला उदाहरण शामिल है
- sentence-transformers/all-mpnet-base-v2: वाक्यों की array को embeddings में बदलता है
- sentence-transformers/paraphrase-MiniLM-L6-v2: input के रूप में वाक्यों की array लेने वाला embedding example देता है
- mixedbread-ai/mxbai-embed-large-v1: search के लिए sentence representation बनाने में
"Represent this sentence for searching relevant passages: "prefix इस्तेमाल करने का उदाहरण है - thenlper/gte-small: दो वाक्य input में देकर embedding बनाता है
- intfloat/e5-base-v2: documents के लिए
"passage: ", और queries के लिए"query: "prefix जोड़ने का उदाहरण है - BAAI/bge-base-en-v1.5: search-related passage representation के लिए prefix इस्तेमाल करने का उदाहरण है
- Snowflake/snowflake-arctic-embed-m-v1.5:
pooling: "cls"option के साथ embedding बनाने का उदाहरण है
-
Sparse embedding
- opensearch-project/opensearch-neural-sparse-encoding-v1:
AutoModelForMaskedLMऔरAutoTokenizerको सीधे लोड करके sparse embedding की गणना करता है - tokenizer output में
padding,truncation,return_tensors: "pt",return_token_type_ids: falseका उपयोग होता है - output values पर attention mask लागू करके,
Torch.max,Torch.log,Torch.reluके बाद embedding array बनाई जाती है - special token positions के values को 0 पर सेट किया जाता है
- opensearch-project/opensearch-neural-sparse-encoding-v1:
-
Reranking
- mixedbread-ai/mxbai-rerank-base-v1: query और document list लेकर reranking result बनाता है
- BAAI/bge-reranker-base: इसी तरह query और document array को input के रूप में लेने वाला reranking example है
पाइपलाइन
- Text pipeline नीचे दिए गए tasks को सपोर्ट करती है
embedding: text embedding बनानाreranking: query और document array की ranking को फिर से व्यवस्थित करनाner: named-entity recognitionsentiment-analysis: sentiment analysisquestion-answering: प्रश्न और context को input में लेकर उत्तर बनानाfeature-extraction: text feature extraction
- Vision pipeline नीचे दिए गए tasks को सपोर्ट करती है
image-classification: image classificationimage-feature-extraction: image feature extraction
API और समर्थित architectures
- यह लाइब्रेरी Transformers Python API का पालन करती है
- फिलहाल समर्थित model architectures ये हैं
- BERT
- DeBERTa-v2
- DistilBERT
- MPNet
- ViT
- XLM-RoBERTa
विकास और योगदान
- बदलावों का इतिहास changelog में देखा जा सकता है
- योगदान के तरीकों में bug report करना, bug fix और pull request भेजना, documentation लिखना·स्पष्ट करना·सुधारना, और नए features का सुझाव देना या जोड़ना शामिल है
- development शुरू करने के commands repository clone,
bundle install,bundle exec rake download:files,bundle exec rake testके क्रम में दिए गए हैं
1 टिप्पणियां
Hacker News टिप्पणियाँ
Ankane का Ruby के लिए ONNX runtime इतना आसान है कि हैरानी होती है कि official JavaScript repository इतनी समझ से बाहर क्यों लगती है
इस व्यक्ति ने जो काम किया है, उसकी अभी बस सतह ही देखी है, फिर भी वह हीरो जैसा लगता है
सच में, क्या यह व्यक्ति इंसान है? अगर कोई व्यक्ति इतना प्रतिभाशाली हो, तो मैं उसमें 1 अरब डॉलर भी निवेश करना चाहूँगा
शायद वह यह सब इसके लिए नहीं कर रहा होगा, लेकिन अगर कोई आभार जताना चाहता है, तो मैंने Ankane को Rails 2024 Luminary award के लिए nominate कर दिया है
https://rubyonrails.org/2024/8/2/nominations-open-for-2024-l...
Ruby community को ऐसी contributions की सच में ज़रूरत है, और यह project भी दिलचस्प दिखता है
इस मामले में Ruby को अचानक एक शानदार library मिल गई है, और यह अपने-आप में वाकई आभार योग्य उपलब्धि है। लेकिन “community” ने ऐसी चीज़ Python, JavaScript, TypeScript, Rust, Go वगैरह में वही library आने के कई महीनों या सालों बाद जाकर “बनाई” है
यह सिर्फ machine learning/artificial intelligence में ही नहीं, बल्कि नई technologies को संभालने वाली Ruby libraries यानी gems में भी हो रहा है। पहले SaaS या startups शुरुआत से ही official Rubygem देते थे, और कई बार दूसरे platforms या languages से पहले दे देते थे। आजकल Notion, Slack, Cloudflare जैसी चीज़ों से integrate करना हो, तो Ruby option नहीं होता, या कम से कम official option तो नहीं होता
यह दुखद है। Ruby, Rails से कहीं व्यापक language है, और Rails को लेकर झिझक या विरोध समझ में आता है। फिर भी Ruby, Python से ज्यादा, और JavaScript से तो निश्चित ही बहुत ज्यादा, आनंददायक language है काम करने के लिए। Ruby आज Python वाली जगह ले सकती थी, और मुझे पूरा भरोसा है कि अगर ऐसा होता तो हजारों developers आज की तुलना में थोड़ा ज्यादा खुश होते
Ankane अकेले ही industry को सच में बहुत तरीकों से जबरदस्त contribution वापस दे रहा है। कमाल है
सोचता हूँ कि कोई एक व्यक्ति इतना productive कैसे हो सकता है। काम, परिवार वगैरह के साथ जीवन काफी व्यस्त होता होगा
Ankane के gems के लिए मैं कितना आभारी हूँ, यह बताना मुश्किल है। उसने जो बनाया है वह मेरी कुछ apps में ज़रूरी हिस्सा रहा है, और मुझे लगता है कि वह ecosystem की खाली जगहें भरता है
इस व्यक्ति के बनाए tools सच में शानदार हैं। और भी आएँ तो अच्छा होगा
मेरी जानकारी में Andrew Kane pgvector, pgvector-ruby, neighbor के author भी हैं, और ये सभी काफी बेहतरीन हैं
उन्होंने इसके अलावा भी बहुत कुछ बनाया है
शायद उन्होंने बहुत पहले अकेले ही artificial intelligence/machine learning सुलझा ली हो, और उसी का इस्तेमाल करके इतने productive हों
[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 apps में किसी दूसरे user के रूप में impersonate करना बहुत आसान बना देता है
https://github.com/ankane/ahoy Rails के लिए self-hosted analytics tool है
https://github.com/ankane/blazer Rails के अंदर चलने वाला business intelligence tool है
https://github.com/ankane/field_test A/B testing के लिए है
ये चीज़ें सामान्य web app में Rails productivity बढ़ाती हैं। हर एक के लिए बेहतर vendor products या specialized solutions हो सकते हैं, लेकिन अगर gem जोड़कर और थोड़ी configuration करके 80% समाधान मिल जाए, तो बहुत तेजी से launch किया जा सकता है
Chartkick Ruby के लिए chart library है, Ahoy Rails analytics library है, और Searchkick Rails search library है
उनके GitHub profile में 370 से ज्यादा repositories हैं
उदाहरण के लिए
/discoएक बहुत सरल collaborative filtering implementation है, जिसका इस्तेमाल कहीं भी जल्दी से recommendation feature जोड़ने के लिए किया जा सकता हैअगर आप Ruby में machine learning से जुड़ी कोई चीज़ ढूँढ रहे हैं, तो ankane आमतौर पर उसे पहले ही एक बार देख चुके होते हैं
Ruby community में Andrew Kane और Chris Oliver निजी तौर पर मेरे लिए सबसे बेहतरीन लोगों में से हैं। भले ही मैं उनके हर contribution का इस्तेमाल न करूँ, ऐसी contributions हमेशा स्वागत योग्य हैं