LLMに、SLMを使った自分専用英文添削ツールを作成させてみた

不適切な単語をマスキングしました
 

とても重宝しているDeepL Writeだけど..

今年(2024年)になって、DeepL Write の正式版リリースと同時期に DeepL Writeを含んだプランの料金体系が変わり、なかなかの出費になることがわかった。2023-08時点では Write がベータ版扱いで料金が徴収されておらず、9,000円/年だった。今後は抱き合わせ契約が 28,200円/年で3倍以上、 Write 単体だと 18,000円/年で2倍になる。 DeepL Write は自分にとって本当に良いサービスなので、x1.2 位の値上げだったらこのまま継続したかったんだけど、 Claude Project でもっと気の利いたことができるようになったので契約を終了した。 

あと、すでに ChatGPT または Claude に約3,000/月払ってるので、こういったサービスへの支払いはなるべく小さくしたいというのも理由の一つ。YouTube Premium とか Google One とか、個人で支払ってるサービス利用料が結構かかってるので、もうこれ以上は..。

ということで、SLMs (Small Language Models) を Ollama にロードして、localhost:11434 にプロンプトを流し込んでレスポンスを表示するだけの簡素な画面を、Claude 3.5 Sonnet に作らせてみた。
初期バージョンは15分くらいで完成、その後のプロンプト調整とかUI改善に正味7時間くらいかけてしまった。

なお、Ollama のチャットをWebで使いたいなら Open WebUI があるんでそれを使えば良い。

それから、完全に自分だけが利用することを前提としてるので、ソースコードは公開しない。
やりたいことを整理し、使い方をちょっと Google 検索などで調べれば、ソースコードは AIチャットボットを使えば誰にでも作れるし。

方針: CUDA や Metal がなくてもそれなりの速度で

パソコンで LLM というと、NVIDIA の GPU を積んだ Winodws/Linux か、 Applie silicon の超お高い macOS か、という感じで今まで試してきたけど、会社のPCは長年Winodws で手癖が完全に Winodws に最適化されている。特に Microsoft Office を頻繁に使用する作業では、 macOS では自分にとって効率が下がるということが半年くらいで実感できた。
ちなみに、半年使った macOS のパソコンは MacBook Pro M3 Max に 64GB のユニファイドメモリを積んだ超お高い機体。動作速度は快適そのもので、ローカル LLM も、例えば Command-R+ は無理にしても、70B 位で 4bit 量子化されたモデルならなんとか使えていた。あと、Adobe 製品は、 XD に関しては Winodws 版よりずっといい感じに使えた(Windows 版は他の作業をして XD を再表示すると Ctrl か Alt がロックされて、マウスホイールでズームするというくだらないバグがあって、サポートに報告したのに何年も放置されたまま。 Adobe は XD に投資しないみたいなので多分永久に修正されない)。

モバイル用の NVIDIA GPU はどんなものかと思ったら VRAM が大変少ない。大枚はたいても、モバイル版 RTX 4090 は 16GB 。そうした状況で折良く Run Ollama with IPEX-LLM on Intel GPU という手引きが見つかった。実際にはこちらの方が書いている手順をなぞっただけなんだけど。

システム構成

図にするまでもない構成図
Intel iGPU (Core Ultra 7 155H 内蔵) 用にコンパイルした llamap.cpp を使う Ollama を手作業で起動し、 使いたいモデルファイルを ollama pull とかで手作業で利用可能にしておく。

で、Claude 3.5 Sonnet に作らせた Vite + React + TypeScript + Tailwind CSS の UI を npm run dev で手作業で起動し、ブラウザで localhost:33333 にアクセスすると、冒頭のスクショの画面が表示される。

ここまで全部手作業。 Windows サービス化とかアカウントにサインインしたら自動起動するとか全く考慮してない。

Ollama の初期設定では、ロードしたモデルは5分でアンロードされるし、一度に1つのモデルしかロードできないので、以下の環境変数を追加。

set OLLAMA_KEEP_ALIVE=-1
set OLLAMA_MAX_LOADED_MODELS=4

Ollama-ipex のコンソール出力(モデルロード時)

一度ロードしたら Ollama を終了するまでメモリを占有。モデルのロードが必要な初回だけは、英文短文添削に20秒以上かかったりするけど、2回目以降は5秒以内で終わる。また、当初4種類くらいのモデルを使い分けようと思ったのでモデル同時ロード最大数を4に。
DeepL Write はもっと速いし品質が高いので、用途によっては DeepL Pro の有償サブスク契約することをおすすめする。

当初は Llama3.1:8b を使ったりもしてたんだけど、英文添削で "s***e" とか不適切な単語があるとガードレールが作用してレンスポンスそのものが生成されないことがあったので、gemma2:9b に変更。こちらは翻訳でも Google Translate にちょっと劣るくらいの結果を得られるので、英文添削・英語へ翻訳・日本語へ翻訳の3機能で gemma2:9b を使うように変更した。

Gemma のプロンプトガイドラインはここにあるので、これに従うことで、割と多くの場合で欲しい結果を得られるようになる。もちろん、今回はプロンプトも自分で書かずに Claude に作らせた。

社外秘情報は外部サービスに投げ込みたくない

パソコンでこの手の処理を動かすのは効率が悪いので(遅いし回答品質が高くない)、ほとんどの場合、有名な Web チャットボットサービスや Web API を使った方が良いのは言うまでもないんだけど(Claude ProjectsとかGPTsとか)、やはり社外秘情報を含んだ文章を外部サービスに投げ込むのはなかなか勇気がいる。 Azure OpenAI Service では入出力データを学習に使わないことになってるし、不正監視のためのデータ保存をオプトアウトする設定もあるので、会社全体で利用したいならそういったサービスを利用するのが良い。

自分は用途を限定して効率の悪さを容認してるので、パソコン SLMs をそれなりに便利に使っている。オフラインでも使えるし、社外秘情報をいくら入力しても自分のパソコンから外へ出て行かないという安心感が意外と大きい。

新鮮な開発体験

今まで担当してきた業務システムでは、機能ごとに設計と実装が異なるのが普通だったけど、 SLM を使う場合はプロンプトを変更するだけで「英文改善」「多言語から英語に翻訳」「多言語から日本語に翻訳」「多言語文章要約」が作れてしまう点が大変新鮮だった。
もちろん、「開発」といってもソースコードは AIチャットボットに作らせ、自分がやったのは動作確認とちょっとした調整のみだけど。

0 件のコメント:

コメントを投稿

いわゆる「ホットスワップソケット」はこりごり

  時代はTKL   「ホットスワップソケット」をすぐに壊す 自分のように粗略な作業を行うと、ホットスワップソケットがPCBからもげたり、ソケット内部のリーフスプリングをへし折ったりという事故が頻繁に発生する。特に自分の作業と相性が悪いのは Gateron のもので、Keychr...