transformers-ruby - Transformers hiện đại cho Ruby
(github.com/ankane)- Transformers.rb là thư viện cho phép sử dụng Transformers của Hugging Face trong Ruby, tập trung vào việc chạy các mô hình transformer hiện đại bằng mã Ruby
- Cách cài đặt là trước tiên cài Torch.rb, sau đó thêm
gem "transformers-rb"vào Gemfile - Ví dụ được hỗ trợ bao gồm embedding, sparse embedding, và mô hình reranking, đồng thời cho thấy cách dùng các dòng mô hình
sentence-transformers,mixedbread-ai,BAAI,Snowflake,OpenSearch - Pipeline được chia thành văn bản và thị giác, gọi các tác vụ như NER, phân tích cảm xúc, hỏi đáp, phân loại ảnh, trích xuất đặc trưng ảnh dưới dạng
Transformers.pipeline - API tuân theo Transformers Python API và hiện hỗ trợ các kiến trúc BERT, DeBERTa-v2, DistilBERT, MPNet, ViT, XLM-RoBERTa
Sử dụng Transformers trong Ruby
- Transformers.rb là thư viện transformers hiện đại dành cho Ruby
- Nếu cần suy luận nhanh, tài liệu gợi ý xem Informers
Cách cài đặt
- Trước tiên cần cài Torch.rb
- Sau đó thêm dòng sau vào Gemfile của ứng dụng
gem "transformers-rb"
Ví dụ về các mô hình được hỗ trợ
- README cung cấp ví dụ sử dụng mô hình theo các nhóm Embedding, sparse embedding, và reranking
-
Embedding
- sentence-transformers/all-MiniLM-L6-v2: nhận một mảng câu và tạo embedding
- sentence-transformers/multi-qa-MiniLM-L6-cos-v1: có ví dụ tạo embedding cho truy vấn và tài liệu rồi sắp xếp tài liệu theo điểm tích vô hướng
- sentence-transformers/all-mpnet-base-v2: chuyển một mảng câu thành embedding
- sentence-transformers/paraphrase-MiniLM-L6-v2: cung cấp ví dụ embedding nhận đầu vào là mảng câu
- mixedbread-ai/mxbai-embed-large-v1: có ví dụ dùng tiền tố
"Represent this sentence for searching relevant passages: "cho biểu diễn câu phục vụ tìm kiếm - thenlper/gte-small: nhận hai câu đầu vào để tạo embedding
- intfloat/e5-base-v2: có ví dụ thêm tiền tố
"passage: "cho tài liệu và"query: "cho truy vấn - BAAI/bge-base-en-v1.5: có ví dụ dùng tiền tố cho biểu diễn passage liên quan đến tìm kiếm
- Snowflake/snowflake-arctic-embed-m-v1.5: có ví dụ tạo embedding với tùy chọn
pooling: "cls"
-
Sparse embedding
- opensearch-project/opensearch-neural-sparse-encoding-v1: trực tiếp tải
AutoModelForMaskedLMvàAutoTokenizerđể tính sparse embedding - Đầu ra của tokenizer dùng
padding,truncation,return_tensors: "pt",return_token_type_ids: false - Áp dụng attention mask lên giá trị đầu ra rồi đi qua
Torch.max,Torch.log,Torch.reluđể tạo mảng embedding - Giá trị ở vị trí special token được đặt thành 0
- opensearch-project/opensearch-neural-sparse-encoding-v1: trực tiếp tải
-
Reranking
- mixedbread-ai/mxbai-rerank-base-v1: nhận truy vấn và danh sách tài liệu để tạo kết quả reranking
- BAAI/bge-reranker-base: tương tự, có ví dụ reranking dùng đầu vào là truy vấn và mảng tài liệu
Pipeline
- Pipeline Text hỗ trợ các tác vụ sau
embedding: tạo embedding văn bảnreranking: sắp xếp lại thứ hạng của truy vấn và mảng tài liệuner: nhận diện thực thể có tênsentiment-analysis: phân tích cảm xúcquestion-answering: tạo câu trả lời từ đầu vào là câu hỏi và ngữ cảnhfeature-extraction: trích xuất đặc trưng văn bản
- Pipeline Vision hỗ trợ các tác vụ sau
image-classification: phân loại ảnhimage-feature-extraction: trích xuất đặc trưng ảnh
API và các kiến trúc được hỗ trợ
- Thư viện này tuân theo Transformers Python API
- Kiến trúc mô hình hiện được hỗ trợ gồm
- BERT
- DeBERTa-v2
- DistilBERT
- MPNet
- ViT
- XLM-RoBERTa
Phát triển và đóng góp
- Có thể xem lịch sử thay đổi trong changelog
- Cách đóng góp bao gồm báo cáo lỗi, sửa lỗi và gửi pull request, viết/làm rõ/chỉnh sửa tài liệu, đề xuất hoặc bổ sung tính năng mới
- Hướng dẫn bắt đầu phát triển theo thứ tự: clone kho mã,
bundle install,bundle exec rake download:files,bundle exec rake test
1 bình luận
Ý kiến trên Hacker News
ONNX Runtime cho Ruby của Ankane dễ dùng đến mức khiến người ta tự hỏi vì sao kho chính thức cho JavaScript lại khó hiểu như vậy
Dù mới chỉ nhìn lướt qua những gì người này làm được, tôi đã thấy anh ấy như một người hùng
Nói thật, người này có thật là con người không vậy? Nếu là một cá nhân tài năng đến mức này, tôi muốn đầu tư 1 tỷ USD cũng được
Có lẽ anh ấy không làm việc này vì điều đó, nhưng nếu ai muốn bày tỏ sự cảm ơn, tôi đã đề cử Ankane cho Rails 2024 Luminary award
https://rubyonrails.org/2024/8/2/nominations-open-for-2024-l...
Những đóng góp như thế này là điều cộng đồng Ruby rất cần, và dự án này trông cũng thú vị
Trong trường hợp này, Ruby bỗng có một thư viện tuyệt vời, và bản thân điều đó là một thành quả rất đáng biết ơn. Nhưng có thể nói “cộng đồng” chỉ “tạo ra” thứ như vậy sau vài tháng hoặc vài năm kể từ khi cùng thư viện đã xuất hiện cho Python, JavaScript, TypeScript, Rust, Go, v.v.
Không chỉ trong machine learning/trí tuệ nhân tạo, điều tương tự cũng xảy ra với các thư viện Ruby, tức gem, dành cho công nghệ mới. Trước đây, SaaS hay startup thường cung cấp Rubygem chính thức ngay từ đầu, đôi khi còn trước cả các nền tảng hoặc ngôn ngữ khác. Ngày nay, nếu muốn tích hợp với những thứ như Notion, Slack, Cloudflare, nhiều khi không có lựa chọn Ruby, hoặc ít nhất là không có lựa chọn chính thức
Điều này thật buồn. Ruby là một ngôn ngữ rộng hơn Rails rất nhiều, và tôi có thể hiểu sự e dè hay ác cảm với Rails. Dù vậy, Ruby là ngôn ngữ làm việc thú vị hơn Python, và chắc chắn thú vị hơn JavaScript rất nhiều. Ruby hoàn toàn đã có thể chiếm vị trí của Python ngày nay, và tôi tin chắc nếu vậy thì hàng chục nghìn lập trình viên đã hạnh phúc hơn hiện tại một chút
Một mình Ankane đang đóng góp to lớn trở lại cho ngành theo rất nhiều cách. Thật đáng nể
Tôi tò mò làm sao một người có thể năng suất đến vậy. Hẳn cuộc sống cũng khá bận rộn với công việc, gia đình, v.v.
Khó mà diễn tả tôi biết ơn các gem của Ankane đến mức nào. Những thứ anh ấy tạo ra từng là thành phần thiết yếu trong vài ứng dụng của tôi, và tôi thấy chúng lấp đầy các khoảng trống của hệ sinh thái
Các công cụ người này tạo ra thật sự đáng kinh ngạc. Càng có thêm nhiều càng tốt
Theo tôi biết, Andrew Kane cũng là tác giả của pgvector, pgvector-ruby, neighbor, và tất cả đều khá tuyệt
Ngoài ra anh ấy còn tạo ra rất nhiều thứ khác
Có lẽ từ lâu anh ấy đã một mình giải quyết xong trí tuệ nhân tạo/machine learning, rồi dùng nó để đạt năng suất như thế này cũng nên
[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 giúp việc giả lập thành người dùng khác trong ứng dụng Rails trở nên rất dễ dàng
https://github.com/ankane/ahoy là công cụ phân tích tự quản cho Rails
https://github.com/ankane/blazer là công cụ business intelligence chạy bên trong Rails
https://github.com/ankane/field_test dùng cho A/B testing
Những thứ này giúp tăng năng suất Rails trong các ứng dụng web thông thường. Với từng thứ có thể có sản phẩm vendor tốt hơn hoặc giải pháp chuyên biệt hơn, nhưng nếu chỉ cần thêm gem và cấu hình một chút là có được giải pháp 80%, bạn có thể ra mắt cực nhanh
Chartkick là thư viện biểu đồ cho Ruby, Ahoy là thư viện phân tích cho Rails, Searchkick là thư viện tìm kiếm cho Rails
Hồ sơ GitHub của anh ấy có hơn 370 repository
Ví dụ
/discolà một triển khai collaborative filtering rất đơn giản, dùng khi muốn nhanh chóng thêm tính năng gợi ý vào bất cứ đâuNếu đang tìm thứ gì đó liên quan đến machine learning bằng Ruby, thường thì ankane đã xem qua rồi
Trong cộng đồng Ruby, cá nhân tôi xem Andrew Kane và Chris Oliver là những người xuất sắc nhất trong số xuất sắc nhất. Dù không dùng hết mọi đóng góp của họ, những đóng góp như vậy luôn đáng hoan nghênh