PaLM2 BisonモデルとUnicornモデルの違い

## はじめに
こんにちは、京セラコミュニケーションシステム 森田（@kccs_kai-morita）です。
従来、Google Cloudが提供する生成AI基盤のテキスト処理用のPaLM 2モデルとして、Bisonモデルが主流でした。最近、PaLM APIに、2023年11月のアップデートで新たなテキストモデル**Unicorn**が追加されました。

この記事では各モデルの違いについて調べてみた結果をまとめています。

:::note info

本記事は2023年12月ごろに作成しております。
:::

## この記事の対象者
* PaLM 2の基本的な知識がある方

## 基本的な比較
トークン数や学習データなど基本的な部分は同じですが、Unicornモデルはより制限が厳しいです。
とくに注目すべきは、1分あたりのリクエスト数が最大5件に制限されている点です。これにより、Unicornモデルの適用範囲はかなり特定の用途に限られる可能性があります。

|                  |   Bison    |  Unicorn       | 
| :--------------- | :----- | :------ | 
| 最大入力トークン | 8192  | 8192    | 
| 最大出力トークン | 1024  | 1024    | 
| 学習データ | 2023 年 2 月まで  | 2023 年 2 月まで    | 
| 最大出力トークン | 1024  | 1024    | 
| ファインチューニング| ◯  | ✗    | 
| クォータ制限(1分あたりのリクエスト数)|60   | 5    | 
| 利用可能リージョン|アメリカ、ヨーロッパ、アジア主要リージョン   | us-central1のみ    | 

参考サイト:
* [Vertex AI - モデル情報](https://cloud.google.com/vertex-ai/docs/generative-ai/learn/models)
* [Vertex AI - 割り当てと制限](https://cloud.google.com/vertex-ai/docs/quotas)
* [Vertex AI - 生成AIのローケーション](https://cloud.google.com/vertex-ai/docs/generative-ai/learn/locations-genai)

## 料金比較
PaLM 2は1000文字単位で入力出力ごとに課金され、オンラインかバッチかで料金が異なります。

|                  |   Bison <br> (1000文字あたり)   |  Unicorn<br> (1000文字あたり)        | 
| :--------------- | :----- | :------ | 
| 入力(オンライン) | $0.00025 | $0.0025    | 
| 入力(バッチ) | $0.00020 | $0.0020    | 
| 出力(オンライン) | $0.0005 | $0.0075    | 
| 出力(バッチ) | $0.0004 | $0.0060    | 

UnicornモデルはBisonモデルの入力は**10倍**、出力は**15倍**高価になっていますね。

参考サイト:
* [Vertex AI - 生成AIの価格設定(※)](https://cloud.google.com/vertex-ai/docs/generative-ai/pricing)
※日本語のページには表示されていません。

## 用途による比較
プロンプトを用意して、それぞれのモデルの出力結果を比較してみました。ここではBisonモデルの最新版（text-bison@002）とUnicornモデル（text-unicorn@001）を使用しています。

### 分類
プロンプトはVertex AIのサンプルプロンプトから引用しました。

```:プロンプト
次の文章を以下のカテゴリに分類してください。
 - アウトドア
 - 健康
 - ファッション
 - ショッピング

文章：フィットネス ウォッチを使ってセルフケアを実践する方法はほぼ無限にありますが、ここでは今日から始められる、簡単に実践できる6つのヒントを紹介します。
```

Bisonモデル出力結果

:::note info
健康
:::

Uniconモデル出力結果

:::note info
健康
:::

いくつかの例を試した結果、分類タスクとしてはBisonモデルでも得意としているところのため、どちらもおおむね同様の出力結果が得られました。これは、分類システムとしての使用においてUnicornモデルの高いコストが必ずしも必要でないことを示唆しています。

### 要約
[以前投稿した記事](https://qiita.com/kccs_kai-morita/items/7cc6510b8f483c31bf6e)を要約してみました。

詳細な結果は省略しますが、どちらも詳細に記述された結果が得られました。Unicornモデルの方が技術的な詳細は少なく記事の全体的な機能に焦点が当てられているように思えます。

これらの違いをそれぞれのモデルで評価してみました。

Bisonモデル出力結果

:::note info
モデル1とモデル2の要約を比較すると、モデル2の方が優れていると考えられます。

モデル1は、PaLM APIの概要や日本語対応について説明していますが、文章が冗長で、要点がわかりづらいです。また、PaLM2の日本語対応についても触れていますが、PaLM2とPaLM APIの関係がわかりづらいです。

一方、モデル2は、PaLM APIの概要、日本語対応前と後の生成精度の確認、英語回答との比較、日本語版Bardの検証結果、コード生成モデルであるCodeyの日本語対応状況など、PaLM APIに関する情報を網羅的にまとめています。また、文章が簡潔で、要点がわかりやすいです。

そのため、モデル2の方が優れていると考えられます。
:::


Unicornモデル出力結果

:::note info
モデル1は、PaLM APIの概要について説明されていますが、日本語対応やモデルパラメーターの設定などの詳細については触れられていません。
モデル2は、PaLM APIの概要だけでなく、日本語対応やモデルパラメーターの設定などの詳細についても説明されています。また、PaLM APIが使用できるタスクについても言及されています。

したがって、モデル2の方がモデル1よりも優れていると言えます。モデル2は、PaLM APIの概要だけでなく、詳細についても説明されているため、読者はPaLM APIについてより深く理解できます。また、PaLM APIが使用できるタスクについても言及されているため、読者はPaLM APIをどのように活用できるかを知ることができます。
:::

どちらも前回のプロンプトではUnicornモデルが優れているという評価をしています。実際Unicornモデルのほうが文章が日本語としてより自然な表現になっているように感じられますね。

### 知識の広さ
以下のプロンプトでどれくらい知識が有しているか確認しました。

```:プロンプト
ワグネリアン・ロマン主義とインプレッショニズムの違いを音楽と美術の観点から詳細に説明してください
```

どちらも詳細で長文の結果が返ってきたので記載は省略します。

Unicornモデルはワグネリアン・ロマン主義とインプレッショニズムの両運動を詳細に分析し、より深い理解を提供していました。
Bisonモデルも重要な情報を提供していますが、モデル2の方が歴史的背景や作曲家、画家の具体的な言及により、より豊かな知識を示しています。

今までの結果と同様にBisonモデルは簡潔に説明しているのに対して、Unicornモデルのほうがより詳細で文脈が明瞭になっていることがわかりました。

### コーディング
テキスト用のモデルでありコード用のモデルではないですが、Unicornモデルはコーディング能力も優れていると記述があったため比較してみました。

```:プロンプト
Pythonにて素数生成器を実装してください
詳細:
1から100までの間にある素数をすべて生成し、リストとして返す。
素数判定には、試し割り法を使用すること。
効率的な実装を行い、可能な限り計算時間を短縮すること。
```

結果は長くなるため省略しますが、評価を表にまとめました。コード用のモデルcode-bisonモデルでも評価しています。

| 評価項目       | text-bison@002               | text-unicorn@001                     | code-bison@002   | 
| -------------- | ---------------------------- | ------------------------------------ | ---------------- | 
| 効率性         | 良                           | 良                                   | 中               | 
| 良い点         | 柔軟性がない                 | 素数生成の範囲をより柔軟に指定できる | 柔軟性がない     | 
| 問題点         | コメントのフォーマット不適切 | コメントのフォーマット不適切         | 無駄な処理がある | 
| コードの明瞭さ | 良                           | 良                                   | 良               | 

全体的に効率よく実装できていましたが、Unicornモデルは無駄な処理がなく柔軟性がある点で他のモデルより優れていると言えました。もっと複雑な実装となると結果が異なる可能性があります。

## 応答時間の計測
APIの応答速度を測定するために、BisonモデルとUnicornモデルの両方に対して複数のプロンプトを使用しました。なお、同じリージョンのモデルに対して計測しています。

| 評価項目                 | text-bison@002(秒) | text-unicorn@001(秒) | 
| ------------------------ | -------------- | ---------------- | 
| 分類プロンプト           | 0.603          | 0.6445           | 
| 要約プロンプト           | 8.089          | 15.505           | 
| 知識の広さ確認プロンプト | 9.748          | 28.409           | 
| コーディングプロンプト   | 6.209          | 13.411           | 

応答速度は、出力される結果に依存する傾向がありますが、Unicornモデルのほうが応答時間が長いことがわかりました。
特に複雑な問題になるほど差が顕著に現れているように感じます。

### まとめ
ここまでの検証結果をまとめると以下の通りです。

| 評価項目     | Bisonモデル | Unicornモデル | 
| ------------ | ----------- | ------------- | 
| 簡単な処理   |  :sunny:        | :sunny:           | 
| 複雑な処理   | :partly_sunny:    | :sunny:        | 
| コーディング | :partly_sunny:         | :sunny:         | 
| コスト       | :sunny:    |  :cloud:            | 
| 使い勝手     | :sunny:    |  :partly_sunny:        | 
| 応答速度     | :sunny:     | :cloud:         | 

Unicornモデルは複雑な問題を解決できる分制限やコストが増加していることがわかりました。

これを考慮して、以下のようなモデルの利用例が考えられます。

Bisonモデル
* 答えが知識に頼らずプロンプト内容から解決できる処理（抽出、要約など）
* リアルタイム性が必要な問題
* 大量のデータ処理

Unicornモデル
* 専門性が高い知識を求める処理
* 論理的な回答の根拠の回答を得る必要がある分析
* Bisonモデルのカバー

Bisonモデルは、基本的な情報提供や大量のデータ処理、コスト効率を重視する場合に適しています。
一方で、Unicornモデルは、より深い知識や詳細な分析が必要な場合や、高い質の教材やコンテンツが求められる場合に適しているのではないかと思います。
## おわりに
Unicornモデルはリリースされたばかりであり、利用可能リージョンの拡大やその他の制限の拡大など今後の展開には期待が寄せられます。

他にもPaLM 2に関する記事をいくつか書いていますので、他の記事も見ていただけると幸いです。

[PaLM APIが日本語に対応：機能、精度、利用方法の評価](https://qiita.com/kccs_kai-morita/items/7cc6510b8f483c31bf6e)

[ドキュメントファイルをアップロードするだけでSlackに要約が届く！：Google Cloud PaLM2活用術](https://qiita.com/kccs_kai-morita/items/5f2e4abbabc3b3a7a7f1)