Transformers.js 対応の言語モデルを Node.js で動かしてみた
機械学習でよく使われる「Transformers ライブラリ」というのは Hugging Face が提供しているモノらしく、基本的には Python 製なので、実行するには Python 環境が必要になる。
しかし調べていくと、Transformers.js という JS 向けのライブラリも存在しているようで、JS 版に対応している言語モデルであれば Node.js などで動かせることが分かった。さらに Hugging Face API を通じて実行できるので、ローカルマシンのスペックを要求されないところも魅力的だった。
今回は Transformers.js を含めて、Node.js で実行できるいくつかの言語モデルを試してみたので結果を紹介する。
使用しているライブラリは package.json
を見てもらえば分かるが、カテゴリ別に紹介していこうと思う。
OpenAI API
コチラは Transformers ライブラリとか関係なく、openai
ライブラリを利用して、OpenAI API を使っての文章生成。検証時点では gpt-3.5-turbo-instruct
モデルを使用した。
いわゆる「ChatGPT」のウェブ画面でできるモノとほぼ同等の性能の答えが返ってくる感じ。OpenAI API を使っているので、アカウント作成後の無料枠がなくなったら API 利用に課金が必要になる。
Google Gemini API
コチラは Google Gemini API。使用したモデルは gemini-1.5-flash
。
海外だと API が無料で使える枠があるっぽいけど、日本では即課金された。GCP (今は「GC」って言うらしいね) アカウントでの課金となる。
Hugging Face API
これらは Hugging Face の API キーだけあれば、ライブラリ要らずでリクエストを投げるだけで利用できるモノ。Google Colaboratory みたいな感じで Hugging Face 側で実行環境を構築するっぽくて、初回実行時はちょっと待たされる。
Hugging Face Interface
コチラは Hugging Face の API キーと一緒に、@huggingface/inference
という npm パッケージを使うことで、AI チャットボットのようなやり取りが可能になるライブラリ。
つまり、「与えたテキストに続く文章を考えてもらう」のではなく、「ユーザが質問文を投げると、それに対する回答文章を生成してくれる」というワケだ。role: user
や role: assistant
といった指定部分からもそれが読み取れる。
使用したモデルは mistralai/Mistral-7B-Instruct-v0.2
というモノで、英語のみの対応だが、まぁそれなりの回答を返してくれた。無料で使えるというのが良いね。
Transformers.js
@xenova/transformers
という npm パッケージを通じて実行できる言語モデルたち。Xenova (Joshua Lochner) というのは Hugging Face 所属の人らしく、Transformers.js を開発している人っぽい。対応している言語モデルも Xenova 氏製作のモノのようである。
- transformers-xenova-distilgpt2.js
- transformers-xenova-gpt2.js
- transformers-xenova-lamini-flan-t5-783m.js
- transformers-xenova-t5-base.js
いずれも英語のみの対応だったが、一番自然な文章を生成できたのは Xenova/gpt2
モデルだろうか。パラメータをイジれば遊べそうだし、出力結果を日本語翻訳して使えば十分そうである。
ちなみに、Transformers.js に対応していないモデル名を渡すと、当然ながら動作しない。
以上
Python 環境をどうしても作りたくない、LLM をガリガリと動かすローカルマシンのリソースがない、という場合は、こうした JS で手軽に実装できる API 利用も検討してみると良いだろう。