Author Archives: staka

OpenManusを使ったサイトへのエージェント組み込み

Introducing Operator | OpenAIに支援してもらう飲み会[1]が面白かったのと、Manusが流行っていることもあって、FuguMTへのエージェント組み込みを試してみた。OpenManus[2] を用い、下記の動作を実装している。

  1. ユーザによるリクエストを受け付ける
  2. OpenManusを用いてリクエストを処理する
    • OpenManusをFuguMTに特化した動作を行うようにカスタマイズ[3]
    • fugumt.com以外のサイトへはアクセスしないよう制御
  3. 処理過程(Linuxデスクトップの動作)を適時スクリーンショットしてブラウザに表示する

実際の動作例は下記の通り。エージェントへの入力以降の処理、ブラウザの立ち上げや使用するツール選定、ツールの操作などはOpenManusが行っている[4]。WEBアプリとして実装しており、ブラウザの中でブラウザが立ち上がっているような不思議な光景となっている。

OpenManusの基本性能は高く見ていて面白い。OpenAIのOperatorでは(fugumt.comのようなマイナーな)個別サイトの構成や機能を知ることは難しい。個別サイトで用意されたエージェントとOperatorが会話、マルチエージェント的に協調する将来もあるのではないかと思う[5]。そこまでいかなくてもユーザからの問い合わせに対応してくれるエージェントはとても便利[6]。エージェントがブラウザを操作するため、サイト側での開発が必要ない点は大きなメリットである。

OpenManusのようなOSSなエージェントフレームワークは増えていくことが予想される。LLM based Agentを用いると個別にシステム開発するよりも多様なニーズに対応しやすい。このようなエージェントは今後様々なサイトに導入されていくであろう[7]。

一時的に[8] Fugu-MT:Agentで実行可能としているので興味のある方は試してほしい。

脚注

[1] 実際に注文をOperatorにやってもらった。ブラウザ対応の注文インタフェースをもつ居酒屋は多い。竜田揚げを人数分頼もうとしたり、やたら枝豆を頼もうとしたり、なかなか面白い挙動をしていた。Operatorによるとホッケに合うお酒は新政らしい。(先行事例としてみんなで飲みにいくんですけど、Devinさんも来ます? – Devin観察日記|Daiki Teramotoがある)
[2] GitHub – mannaandpoem/OpenManus: No fortress, purely open ground. OpenManus is Coming. MITライセンスのOSS
[3] fugumt.comのサイト構造、URL構成、提供しているツールの使い方などを事前設定している。これによってOpenManusのタスク達成率がかなり上がる。
[4] MLLMとしてGPT-4oを使用している。
[5] Operator用のナビゲーションファイルを置いておけばよいという説もある。AI Agent用のrobots.txt的なものが必要なのでは?という議論は多い。
[6] わざわざブラウザ使わなくても良いのではないかという説もある。
[7] すごく流行るかは微妙なところだが可能性は感じた。fugumt.comのような小さな個人サイトでも必要な機能を個別に作っていくより処理内容を自然言語でAIエージェントに指示しておく方が楽かもと思う。(処理時間やコストや色々と無駄など諸々の問題はあるが…)
[8] APIのコストが高いので限定公開の予定。

CyberAgentLM3-22B-Chat (CALM3-22B-Chat)の機械翻訳性能

公式のニュースリリースや論文発表はされていない気がするが[1]、HuggingFaceリポジトリでCALM3 22Bが公開されていた(cyberagent/calm3-22b-chat · Hugging Face

いつもの設定で機械翻訳性能を検証してみた。性能評価に使用したデータは以前(DAMO PolyLM-13Bの機械翻訳性能 | ぷるーふおぶこんせぷと (staka.jp))と同じ。検証環境は環境はColab Pro+ (A100)を用いリポジトリの推奨設定[2]でロードしている。

前回のGemma 2 9Bと同様に余計なトークンが入ることが少なく[3] GPT-4oを用いた回答部分の特定は行っていない。評価指標はBLEU、使用したツールやtokenizerは以前と同じ(sacrebleu –tokenize ja-mecab)である。「0 shot」と「1 shot」の比較でICLやRAGなどプロンプト内にデータを与えた時の性能をザックリとみる事ができる。いつもの通り非常に限定された機械翻訳ベンチマークであることに注意が必要である。

モデル0 shot1 shot
cyberagent/calm3-22b-chat · Hugging Face24.738.9
CALM3-22B-Chatの機械翻訳性能(BLEU)

結果と所感

Gemma 2 9Bと比べると評価が難しいが性能はかなり高い。Gemma 2 9Bとのスコア差は今使っているベンチマークが機能していない可能性高く要再検証であると思う[4]。

日本の会社による高性能LLMがApache 2ライセンスで公開されている意義は大きい。他のベンチマークでの検証結果も気になるところ[5]。

脚注

[1] Xでは話題になっている。
[2] model = AutoModelForCausalLM.from_pretrained(“cyberagent/calm3-22b-chat”, device_map=”auto”, torch_dtype=”auto”)
[3] <|im_start|>assistant ~ <|im_end|>をとる方針で十分だった。
[4] 外務省のページが自動取得不可になったようで他の省庁のデータでベンチマークを再構成中
[5] Nejumi LLMリーダーボード3 | llm-leaderboard3 – Weights & Biases (wandb.ai) はかなり参考になる

Gemma 2 9Bの機械翻訳性能

GoogleからGemma2がリリースされた[1]。9B[2]と27Bが公開されている。Llama3を超える性能とのことで検証してみた。性能評価に使用したデータは以前(DAMO PolyLM-13Bの機械翻訳性能 | ぷるーふおぶこんせぷと (staka.jp))と同じ。検証環境は環境はColab Pro+を用いた。 量子化によって性能が変わるという話もあり、量子化方針を変えて実験している。

Gemma2は回答に余計なトークンが入ることが少なく[3]、本件の検証ではGPT-4oを用いた回答抽出は行っていない。評価指標はBLEU、使用したツールやtokenizerは以前と同じ(sacrebleu –tokenize ja-mecab)である。「0 shot」と「1 shot」の比較でICLやRAGなどプロンプト内にデータを与えた時の性能をザックリとみる事ができる。いつもの通り非常に限定された機械翻訳ベンチマークであることに注意が必要である。

モデルと量子化0 shot1 shot
google/gemma-2-9b-it · Hugging Face / 16bit [4]29.143.5
google/gemma-2-9b-it · Hugging Face / 8bit [5]29.342.5
google/gemma-2-9b-it · Hugging Face / 4bit [6]25.440.2
Gemma 2 9BのBLEU

結果と所感

Gemma2 9Bの機械翻訳は非常に高く商用モデルに匹敵している[7]。訳抜けなど若干の問題はあるとはいえ1 shotであれば機械翻訳モデルとしても実用に達していそうな性能。この品質が公開モデルで達成できることに正直驚いた[8]。

量子化による性能劣化は8bitまでは大きくなさそうに見えるが、4bitまで落とすとさすがに影響が出ている。

蒸留を介している構築方針も興味深くNemotron-4 340B – arXiv最新論文の紹介 (devneko.jp)のような合成データ構築にフォーカスしたLLMも併せて特化型・独自LLMの可能性を感じる。

脚注

[1] Google launches Gemma 2, its next generation of open models (blog.google)
[2] 9Bモデルはより大規模なモデルから蒸留によって構築されているとのこと(「We also train the 2B and 9B models with knowledge distillation (Hinton et al , 2015) instead of next token prediction. The resulting models deliver the best performance for their size, and even offer competitive alternatives to models that are 2-3× bigger.」(gemma-2-report.pdf (storage.googleapis.com)より引用)。
[3] <bos><eos><end_of_turn>は機械的に除去している。
[4] torch.bfloat16
[5] BitsAndBytesConfig(load_in_8bit=True)
[6] BitsAndBytesConfig(load_in_4bit=True)
[7] leakageの疑いはあるが…
[8] ベンチマークがベンチマークとして成立しているか若干疑問が出てきたため、より実用的なデータセットを構築しようかと考えている最近。

Qwen2-7B, GLM-4-9Bの機械翻訳性能

中国からもWeightを公開している or オープンなモデルの発表が続いている。いつもの通り機械翻訳性能を検証してみた。性能評価に使用したデータは以前(DAMO PolyLM-13Bの機械翻訳性能 | ぷるーふおぶこんせぷと (staka.jp))と同じ。検証環境は環境はColab Pro+を用いた。基本的にfp16で扱っている。

本件の検証でもGPT-4oを用いて回答抽出を行った結果を併記しているが、基本的に指示への対応は安定していた。評価指標はBLEU、使用したツールやtokenizerは以前と同じ(sacrebleu –tokenize ja-mecab)である。「0 shot」と「1 shot」の比較でICLやRAGなどプロンプト内にデータを与えた時の性能、「出力そのまま」と「GPT-4で回答抽出」の比較で指示のしやすさをザックリとみる事ができる。いつもの通り非常に限定された機械翻訳ベンチマークである[1]ことに注意が必要である。

モデル0 shot /
出力そのまま
0 shot /
GPT-4oで回答抽出
1 shot /
出力そのまま
1 shot /
GPT-4oで回答抽出
Qwen/Qwen2-7B-Instruct · Hugging Face20.520.429.730.0
THUDM/glm-4-9b · Hugging Face25.525.530.430.6
Qwen2, GLM4の機械翻訳性能

結果と所感

Qwen2 7B、GLM 4 9Bとも機械翻訳性能は高い。さすがマルチリンガル利用を想定され構築されたモデルである。Qwen2とGLM4の性能差はパラメータサイズによるものに見える。

今までの検証結果を振り返ると、同様に構築されたAya-23 8B [2]と比べると出力の安定性(使いやすさ)はQwen, GLMが優れ、絶対性能は競合的またはややAya-23が優位といえそう [3]。

サイズが近く有名なモデルにはMistral 7B v0.3やGemma 7B、Llama 3 8Bがある。これらと比べると0 shot性能ではQwen, GLMが優れ、1 shot性能はほぼ互角である。0 shot性能はLLM内の知識に依存し、日本語での継続学習・SFTを行うと性能拡張の余地も大きそう。

Qwen2 7BはApache-2ライセンスと完全なOSSであることも重要。絶対性能が高く、命令追従性が良い、かつ、周辺ツールもよく整備されている強力で使いやすいモデルであるように思う。

脚注

[1] このあたりのザックリ感はいつもと同じ。
[2] Aya-23はCC-BY-NCと商業利用が禁止されているため使いどころは限られる。
[3] BLEUで測れるのかという話はあるが…

Mistral 7B v0.3, Phi-3 small/medium, Aya 23 8Bの機械翻訳性能

オープンなモデルの発表が続いている。ローカル環境での動作がやりやすい7B, 8B, 14Bのモデルについて機械翻訳性能を検証してみた。性能評価に使用したデータは以前(DAMO PolyLM-13Bの機械翻訳性能 | ぷるーふおぶこんせぷと (staka.jp))と同じ。検証環境は環境はColab Pro+を用いた。基本的にfp16で扱っている。

本件の検証でも出力形式が一定しないことが多かったためGPT-4oを用いて回答抽出を行った結果を併記した。評価指標はBLEU、使用したツールやtokenizerは以前と同じ(sacrebleu –tokenize ja-mecab)である。「0 shot」と「1 shot」の比較でICLやRAGなどプロンプト内にデータを与えた時の性能、「出力そのまま」と「GPT-4で回答抽出」の比較で指示のしやすさをザックリとみる事ができる[1]。ただし、非常に限定された機械翻訳ベンチマークである[2]ことに注意が必要である。

モデル0 shot /
出力そのまま
0 shot /
GPT-4oで回答抽出
1 shot /
出力そのまま
1 shot /
GPT-4oで回答抽出
mistralai/Mistral-7B-Instruct-v0.3 · Hugging Face10.714.427.029.7
microsoft/Phi-3-small-8k-instruct · Hugging Face (7B)17.918.426.826.9
CohereForAI/aya-23-8B · Hugging Face11.323.511.034.7
microsoft/Phi-3-medium-128k-instruct · Hugging Face (14B)23.523.434.536.2
各種小規模モデルのBLEU

結果と所感

Mistral 7B v3は日本語性能がかなり向上しているようでv2と比べて大幅にスコアが上がっている。Apache-2ライセンスと正真正銘のOSSであり活躍の機会が多そう。Phi-3は小型高性能の名に恥じない結果になっており、以前検証したmini、今回検証したsmall、mediumで順当にスコアが上がっている。こちらもMITライセンスと正真正銘のOSS。FuguMTの性能が0 shotで32前後であることを考えると、Phi-3 medium(14B)は用途によっては実用レベルに達しているかもしれない。

AYA 23は上記のモデルと印象が異なり、命令への追従はあまりできていないがモデルの絶対性能はとても高い。「1 shot / GPT-4oで回答抽出」の性能はプロンプトの工夫で達成できると思われ、AYA 23のように多言語想定で作られたモデルであれば8Bでも実用レベルの性能が出せるかもしれない。より大規模なASA 23 35Bも試してみたいところ[3][4]。

脚注

[1] 毎度のことながら本当にザックリとしか見れない。
[2] 日本語・英語の文書ともにデータがインターネット上で公開されているため、潜在的なLeakの可能性がある。BLEUではそもそも性能を測れないなど注意点は多い。(ぼちぼち改善しようと思ってはいるが……)
[3] 35Bだと8bit以下に量子化しないと実行が厳しい。
[4] ライセンスはCC-BY-NC、併せてCohere For AI Acceptable Use Policyも守る必要がある。ざっくりとは商用利用不可。