transformers-ruby - Transformers สมัยใหม่สำหรับ Ruby
(github.com/ankane)- Transformers.rb เป็นไลบรารีที่ทำให้สามารถใช้งาน Transformers ของ Hugging Face ใน Ruby ได้ และมุ่งเน้นไปที่การรันโมเดล transformer สมัยใหม่ด้วยโค้ด Ruby
- การติดตั้งทำได้โดยติดตั้ง Torch.rb ก่อน แล้วจึงเพิ่ม
gem "transformers-rb"ลงใน Gemfile - ตัวอย่างที่รองรับประกอบด้วย embedding, sparse embedding และโมเดล reranking พร้อมแสดงวิธีใช้โมเดลตระกูล
sentence-transformers,mixedbread-ai,BAAI,Snowflake,OpenSearch - pipeline แบ่งเป็นข้อความและวิชัน โดยเรียกใช้งาน NER, การวิเคราะห์อารมณ์, การตอบคำถาม, การจัดหมวดหมู่ภาพ, การสกัดคุณลักษณะของภาพ เป็นต้น ในรูปแบบ
Transformers.pipeline - API ใช้ตาม Transformers Python API และปัจจุบันรองรับสถาปัตยกรรม BERT, DeBERTa-v2, DistilBERT, MPNet, ViT, XLM-RoBERTa
การใช้ Transformers ใน Ruby
- Transformers.rb คือไลบรารี transformers สมัยใหม่สำหรับ Ruby
- หากต้องการการอนุมานที่รวดเร็ว ให้ดู Informers
วิธีติดตั้ง
- ต้องติดตั้ง Torch.rb ก่อน
- จากนั้นเพิ่มบรรทัดต่อไปนี้ลงใน Gemfile ของแอปพลิเคชัน
gem "transformers-rb"
ตัวอย่างโมเดลที่รองรับ
- README แบ่งตัวอย่างการใช้งานโมเดลเป็น Embedding, sparse embedding และ reranking
-
Embedding
- sentence-transformers/all-MiniLM-L6-v2: รับอาร์เรย์ของประโยคและสร้าง embedding
- sentence-transformers/multi-qa-MiniLM-L6-cos-v1: มีตัวอย่างที่สร้าง embedding ของคำถามและเอกสาร แล้วจัดเรียงเอกสารด้วยคะแนน dot product
- sentence-transformers/all-mpnet-base-v2: แปลงอาร์เรย์ของประโยคเป็น embedding
- sentence-transformers/paraphrase-MiniLM-L6-v2: มีตัวอย่าง embedding ที่รับอาร์เรย์ของประโยคเป็นอินพุต
- mixedbread-ai/mxbai-embed-large-v1: มีตัวอย่างที่ใช้คำนำหน้า
"Represent this sentence for searching relevant passages: "สำหรับการแทนประโยคเพื่อการค้นหา - thenlper/gte-small: รับสองประโยคเป็นอินพุตเพื่อสร้าง embedding
- intfloat/e5-base-v2: มีตัวอย่างที่เติมคำนำหน้า
"passage: "ให้เอกสาร และ"query: "ให้คำถาม - BAAI/bge-base-en-v1.5: มีตัวอย่างที่ใช้คำนำหน้าสำหรับการแทน passage ที่เกี่ยวข้องกับการค้นหา
- Snowflake/snowflake-arctic-embed-m-v1.5: มีตัวอย่างที่สร้าง embedding ด้วยตัวเลือก
pooling: "cls"
-
Sparse embedding
- opensearch-project/opensearch-neural-sparse-encoding-v1: โหลด
AutoModelForMaskedLMและAutoTokenizerโดยตรงเพื่อคำนวณ sparse embedding - เอาต์พุตของ tokenizer ใช้
padding,truncation,return_tensors: "pt",return_token_type_ids: false - นำ attention mask ไปใช้กับค่าที่ได้ แล้วผ่าน
Torch.max,Torch.log,Torch.reluเพื่อสร้างอาร์เรย์ embedding - ตั้งค่าของตำแหน่ง special token เป็น 0
- opensearch-project/opensearch-neural-sparse-encoding-v1: โหลด
-
Reranking
- mixedbread-ai/mxbai-rerank-base-v1: รับคำถามและรายการเอกสารเพื่อสร้างผลลัพธ์ reranking
- BAAI/bge-reranker-base: มีตัวอย่าง reranking เช่นกัน โดยใช้อาร์เรย์ของคำถามและเอกสารเป็นอินพุต
Pipeline
- pipeline สำหรับ Text รองรับงานต่อไปนี้
embedding: สร้าง text embeddingreranking: จัดลำดับใหม่ของคำถามและอาร์เรย์เอกสารner: named-entity recognitionsentiment-analysis: การวิเคราะห์อารมณ์question-answering: สร้างคำตอบจากคำถามและบริบทที่ป้อนเข้าไปfeature-extraction: สกัดคุณลักษณะของข้อความ
- pipeline สำหรับ Vision รองรับงานต่อไปนี้
image-classification: การจัดหมวดหมู่ภาพimage-feature-extraction: การสกัดคุณลักษณะของภาพ
API และสถาปัตยกรรมที่รองรับ
- ไลบรารีนี้ใช้ตาม Transformers Python API
- สถาปัตยกรรมโมเดล ที่รองรับในปัจจุบันมีดังนี้
- BERT
- DeBERTa-v2
- DistilBERT
- MPNet
- ViT
- XLM-RoBERTa
การพัฒนาและการมีส่วนร่วม
- ดูประวัติการเปลี่ยนแปลงได้ที่ changelog
- แนวทางการมีส่วนร่วมครอบคลุมการรายงานบั๊ก, การแก้บั๊กและส่ง pull request, การเขียน·ทำให้ชัดเจน·แก้ไขเอกสาร, การเสนอหรือเพิ่มฟีเจอร์ใหม่
- คำสั่งเริ่มต้นสำหรับการพัฒนาคือโคลนรีโพซิทอรี,
bundle install,bundle exec rake download:files,bundle exec rake testตามลำดับ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ONNX Runtime สำหรับ Ruby ของ Ankane ใช้ง่ายมาก จนทำให้งงว่าทำไม repository JavaScript อย่างเป็นทางการถึงเข้าใจยากขนาดนั้น
สิ่งที่คนคนนี้ทำสำเร็จ ถึงผมจะเพิ่งได้แตะผิวเผิน ก็ยังดูเหมือนฮีโร่แล้ว
พูดจริง ๆ นะ คนนี้เป็นมนุษย์แน่เหรอ? ถ้าเป็นบุคคลที่มีพรสวรรค์ขนาดนี้ ผมก็อยากลงทุนให้สัก 1 พันล้านดอลลาร์ เลย
คงไม่ได้ทำไปเพื่อสิ่งนี้หรอก แต่ถ้ามีใครอยากแสดงความขอบคุณ ผมเสนอชื่อ Ankane สำหรับ Rails 2024 Luminary award ไว้แล้ว
https://rubyonrails.org/2024/8/2/nominations-open-for-2024-l...
การมีส่วนร่วมแบบนี้เป็นสิ่งที่ชุมชน Ruby ต้องการจริง ๆ และโปรเจกต์นี้ก็ดูน่าสนใจด้วย
ในกรณีนี้ จู่ ๆ Ruby ก็ได้ไลบรารีที่ยอดเยี่ยมขึ้นมา ซึ่งตัวมันเองเป็นผลงานที่น่าขอบคุณมาก แต่ “ชุมชน” ก็เหมือนเพิ่ง “สร้าง” สิ่งนี้ขึ้นมาหลังจากไลบรารีแบบเดียวกันออกมาใน Python, JavaScript, TypeScript, Rust, Go ฯลฯ ไปแล้วหลายเดือนหรือหลายปี
ไม่ใช่แค่แมชชีนเลิร์นนิง/ปัญญาประดิษฐ์เท่านั้น เรื่องเดียวกันนี้ก็เกิดกับ gem ซึ่งเป็นไลบรารี Ruby สำหรับเทคโนโลยีใหม่ ๆ ด้วย เมื่อก่อน SaaS หรือสตาร์ทอัพจะมี Rubygem อย่างเป็นทางการให้ตั้งแต่แรก และหลายครั้งก็ให้ก่อนแพลตฟอร์มหรือภาษาอื่นด้วยซ้ำ ทุกวันนี้ถ้าจะเชื่อมต่อกับอย่าง Notion, Slack, Cloudflare ก็มักไม่มีตัวเลือก Ruby หรืออย่างน้อยก็ไม่มีตัวเลือกทางการ
เรื่องนี้น่าเศร้า Ruby เป็นภาษาที่กว้างกว่า Rails มาก และผมเข้าใจได้ว่าบางคนอาจลังเลหรือมีอคติกับ Rails ถึงอย่างนั้น Ruby ก็เป็นภาษาที่ทำงานด้วยสนุกกว่า Python และแน่นอนว่าสนุกกว่า JavaScript มาก Ruby อาจอยู่ในตำแหน่งของ Python ในวันนี้ได้ และผมมั่นใจว่าถ้าเป็นเช่นนั้น นักพัฒนาหลายหมื่นคนคงมีความสุขกว่านี้สักหน่อย
Ankane เพียงคนเดียวก็ตอบแทนอุตสาหกรรมด้วย ผลงานมหาศาล ในหลากหลายทางจริง ๆ สุดยอดมาก
สงสัยจริง ๆ ว่าคนคนหนึ่งจะ ผลิตผลงาน ได้มากขนาดนี้ได้อย่างไร ทั้งงาน ครอบครัว และอื่น ๆ ชีวิตก็น่าจะยุ่งพอสมควรอยู่แล้ว
ยากจะบรรยายว่าผมรู้สึกขอบคุณ gem ของ Ankane มากแค่ไหน สิ่งที่เขาสร้างเป็น องค์ประกอบสำคัญ ในแอปหลายตัวของผม และผมมองว่ามันช่วยเติมช่องว่างใน ecosystem ได้
เครื่องมือที่คนนี้สร้างน่าทึ่งจริง ๆ อยากให้มีออกมาอีกเยอะ ๆ
เท่าที่รู้ Andrew Kane ยังเป็นผู้สร้าง pgvector, pgvector-ruby, neighbor ด้วย และทั้งหมดก็ค่อนข้างยอดเยี่ยม
เขายังสร้างอย่างอื่นไว้อีกมาก
บางทีเขาอาจแก้โจทย์ปัญญาประดิษฐ์/แมชชีนเลิร์นนิงได้ด้วยตัวคนเดียวตั้งนานแล้ว แล้วใช้มันทำให้ตัวเองผลิตผลงานได้มากขนาดนี้ก็ได้
[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 ทำได้ง่ายมาก
https://github.com/ankane/ahoy เป็นเครื่องมือวิเคราะห์ข้อมูลแบบโฮสต์เองสำหรับ Rails
https://github.com/ankane/blazer เป็นเครื่องมือ business intelligence ที่อยู่ใน Rails
https://github.com/ankane/field_test ใช้สำหรับ A/B testing
สิ่งเหล่านี้ช่วยเพิ่ม ผลิตภาพของ Rails ในเว็บแอปทั่วไปได้ แม้แต่ละอย่างอาจมีผลิตภัณฑ์จาก vendor หรือโซลูชันเฉพาะทางที่ดีกว่า แต่ถ้าใส่ gem แล้วตั้งค่านิดหน่อยเพื่อได้โซลูชันระดับ 80% ก็ช่วยให้ปล่อยของได้เร็วจริง ๆ
Chartkick เป็นไลบรารีทำกราฟสำหรับ Ruby, Ahoy เป็นไลบรารี analytics สำหรับ Rails, Searchkick เป็นไลบรารีค้นหาสำหรับ Rails
โปรไฟล์ GitHub ของเขามี repository มากกว่า 370 รายการ
ตัวอย่างเช่น
/discoเป็นการทำ collaborative filtering ที่เรียบง่ายมาก สำหรับเวลาที่อยากใส่ฟีเจอร์แนะนำเข้าไปที่ไหนสักแห่งอย่างรวดเร็วถ้าคุณกำลังหาอะไรเกี่ยวกับแมชชีนเลิร์นนิงใน Ruby โดยมาก ankane ก็มักจะเคยลองดูไว้แล้ว
ในชุมชน Ruby โดยส่วนตัวผมมองว่า Andrew Kane และ Chris Oliver คือที่สุดของที่สุด แม้จะไม่ได้ใช้ผลงานทุกชิ้นของพวกเขา แต่การมีส่วนร่วมแบบนั้นก็น่ายินดีเสมอ