transformers-ruby - Ruby向けの最新Transformers
(github.com/ankane)- Transformers.rbは、Hugging FaceのTransformersをRubyで利用できるようにするライブラリで、最新のtransformerモデルをRubyコードで実行することに重点を置いている
- インストールは、まずTorch.rbをインストールした後、Gemfileに
gem "transformers-rb"を追加する手順で行う - サポート例には埋め込み、sparse embedding、rerankingモデルが含まれ、
sentence-transformers、mixedbread-ai、BAAI、Snowflake、OpenSearch系モデルの使い方を示している - パイプラインはテキストとビジョンに分かれ、NER、感情分析、質問応答、画像分類、画像特徴抽出などを
Transformers.pipeline形式で呼び出す - APIはTransformers Python APIに従っており、現在BERT、DeBERTa-v2、DistilBERT、MPNet、ViT、XLM-RoBERTaアーキテクチャをサポートしている
RubyでTransformersを使う
- Transformers.rbはRuby向けの最新transformersライブラリ
- 高速な推論が必要な場合はInformersを確認するよう案内している
インストール方法
- まずTorch.rbのインストールが必要
- その後、アプリケーションのGemfileに次の行を追加する
gem "transformers-rb"
サポートモデルの例
- READMEはモデルの使用例をEmbedding、sparse embedding、rerankingに分けて提供している
-
Embedding
- sentence-transformers/all-MiniLM-L6-v2: 文の配列を受け取り、埋め込みを生成する
- sentence-transformers/multi-qa-MiniLM-L6-cos-v1: クエリと文書の埋め込みを作成した後、内積スコアで文書を並べ替える例が含まれている
- sentence-transformers/all-mpnet-base-v2: 文の配列を埋め込みに変換する
- sentence-transformers/paraphrase-MiniLM-L6-v2: 文の配列を入力として受け取る埋め込みの例を提供している
- mixedbread-ai/mxbai-embed-large-v1: 検索用の文表現のために
"Represent this sentence for searching relevant passages: "プレフィックスを使う例がある - thenlper/gte-small: 2つの文を入力して埋め込みを生成する
- intfloat/e5-base-v2: 文書には
"passage: "、クエリには"query: "プレフィックスを付ける例がある - BAAI/bge-base-en-v1.5: 検索関連のpassage表現用プレフィックスを使う例がある
- Snowflake/snowflake-arctic-embed-m-v1.5:
pooling: "cls"オプションで埋め込みを生成する例がある
-
Sparse embedding
- opensearch-project/opensearch-neural-sparse-encoding-v1:
AutoModelForMaskedLMとAutoTokenizerを直接読み込み、sparse embeddingを計算する - トークナイザー出力は
padding、truncation、return_tensors: "pt"、return_token_type_ids: falseを使う - 出力値にattention maskを適用し、
Torch.max、Torch.log、Torch.reluを経て埋め込み配列を作る - special token位置の値は0に設定する
- opensearch-project/opensearch-neural-sparse-encoding-v1:
-
Reranking
- mixedbread-ai/mxbai-rerank-base-v1: クエリと文書リストを受け取り、reranking結果を生成する
- BAAI/bge-reranker-base: 同様にクエリと文書配列を入力として使うrerankingの例がある
パイプライン
- Textパイプラインは次のタスクをサポートする
embedding: テキスト埋め込みの生成reranking: クエリと文書配列の順位再調整ner: named-entity recognitionsentiment-analysis: 感情分析question-answering: 質問とコンテキストを入力として回答を生成feature-extraction: テキスト特徴抽出
- 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 のコメント
Ankane の Ruby 向け ONNX Runtime はあまりにも使いやすく、公式 JavaScript リポジトリがなぜあんなに分かりにくいのか不思議に思うほど。
この人が成し遂げたことは、まだ表面をなぞっただけでも英雄的に見える。
本気で、この人は人間なのか? これほど才能のある個人なら、10億ドルでも投資したい。
これのためにやっているわけではないだろうけど、感謝を示したい人がいるなら、Ankane を Rails 2024 Luminary award に推薦しておいた。
https://rubyonrails.org/2024/8/2/nominations-open-for-2024-l...
こういう貢献は Ruby コミュニティに本当に必要だし、このプロジェクトも面白そう。
今回の場合、Ruby に突然すばらしいライブラリが生まれたわけで、それ自体は本当にありがたい成果だ。とはいえ「コミュニティ」がこういうものを、Python、JavaScript、TypeScript、Rust、Go などで同じライブラリが出てから数か月、あるいは数年たってようやく「作り出した」形になっている。
機械学習/人工知能だけでなく、新しい技術を扱う Ruby ライブラリである gem でも同じことが起きている。以前は SaaS やスタートアップが最初から公式 Rubygem を提供し、しばしば他のプラットフォームや言語より先に提供することさえあった。最近は Notion、Slack、Cloudflare のようなものと連携しようとすると、Ruby の選択肢がない、少なくとも公式の選択肢がないことが多い。
これは悲しい。Ruby は Rails よりずっと広い言語であり、Rails への抵抗感や反感は理解できる。それでも Ruby は Python より、そして JavaScript よりは確実にずっと楽しく作業できる言語だ。Ruby が今日の Python の位置にいる可能性もあったし、そうなっていれば何万人もの開発者が今より少しは幸せだったはずだと確信している。
Ankane は一人で、業界に本当に多くの形でものすごい貢献を還元している。すごい。
一人の人間がどうしてここまで生産的でいられるのか気になる。仕事や家族などでかなり忙しい生活のはずなのに。
Ankane の gem たちにどれほど感謝しているか、言葉にするのが難しい。彼が作ったものは自分のいくつかのアプリで必須要素だったし、エコシステムの隙間を埋めてくれていると思う。
この人が作るツールは本当に驚くべきものだ。もっと出てきてほしい。
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 は Rails 内に組み込めるビジネスインテリジェンスツール。
https://github.com/ankane/field_test は A/B テスト用。
こうしたものが、普通の Web アプリでの Rails の生産性を高めてくれる。それぞれについて、より優れたベンダー製品や特化型ソリューションはあるだろうが、gem を入れて少し設定するだけで 80% の解決策が得られるなら、本当に素早くリリースできる。
Chartkick は Ruby 向けのチャートライブラリ、Ahoy は Rails の分析ライブラリ、Searchkick は Rails の検索ライブラリ。
彼の GitHub プロフィールには 370 を超えるリポジトリがある。
たとえば
/discoは、どこにでも素早く推薦機能を入れたいときに使える、とても単純な協調フィルタリング実装だ。Ruby で機械学習関連の何かを探しているなら、たいてい ankane がすでに一度は調べている。
Ruby コミュニティでは、Andrew Kane と Chris Oliver は個人的に最高中の最高だと思う。すべての成果物を使うわけではなくても、そうした貢献はいつでも歓迎すべきものだ。