🐙

Vertex AIのGenerative AIサポートの概要

2023/05/19に公開

こんにちは、クラウドエース データML ディビジョン所属の源です。
クラウドエースのITエンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータML ディビジョンです。

データML ディビジョンでは活動の一環として、
毎週Google Cloudの新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。その中でも重要と考えるリリースを本ページ含め記事として公開しています。
今回、ご紹介するリリースは2023年6月8日付で一般提供されたVertex AIのGenerative AIサービスについてです。

参考資料:Vertex AI release notes

Generative AIモデルとは

Vertex AIのGenerative AIサポートにより、Googleの大規模なGenerative AIモデルにアクセスできるようになり、
AIを活用したアプリケーションで使用するためにモデルをテスト、調整、デプロイできるようになります。
現在クイックスタートが用意されているインターフェースは、後述で紹介するGenerative AI StudioやVertex AI APIなどがあります。

利用可能なGenerative AIモデル

Vertex AIで利用可能なGenerative AIモデル(基礎モデルとも呼ぶ)の中で、今回リリースされた機能は下記になります。

  • テキスト(分類、文章要約、情報抽出などのタスクがある)
  • チャットモデル
  • テキストの埋め込み

モデルのチューニングと展開について

  • 調整する必要がない場合は、基盤モデルのデプロイ不要
  • 調整する必要がある場合は、特定のユースケースに合わせて基盤モデルをカスタマイズ可能
  • 調整されたモデルは、Google Cloudプロジェクト内に自動的にデプロイされる

Generative AIの料金

Vertex AI の生成 AI サポートは、入力 (プロンプト) 1,000 文字ごと、および出力 (レスポンス) 1,000 文字ごとに料金が発生します。文字は UTF-8コードポイントによってカウントされ、空白はカウントから除外されます。

image

参考資料:Pricing for Generative AI models

Vertex AI PaLM API

自然言語プロンプトに応答してテキストを生成する大規模言語モデル(LLM)であるPathways Language Model (PaLM)が利用できます。
大規模言語モデルは、言語の翻訳、テキストの要約、クリエイティブな文章の生成、コードの生成、チャットボットや仮想アシスタントの強化、検索エンジンや推奨システムの補完が可能です。

参考資料:Overview of Generative AI support on Vertex AI

不適切な応答について

初期段階のテクノロジーであるため、不快なテキスト、無神経なテキスト、事実に反するテキストなど、予期しない出力が生成される可能性があります。
これらを回避するためにGoogleの安全性フィルターがありますが、安全性フィルターのテストやユースケースやビジネスに適した信頼しきい値の定義を私たち自身が責任を持ってデプロイすることが重要です。

各安全属性には0.0~1.0の信頼スコアが関連付けられており、特定のカテゴリに属する​​可能性を示します。

※下記はドキュメント内のサンプルレスポンス

{
  "predictions": [
    {
      "safetyAttributes": {
        "categories": [
          "Hate",
          "Toxic",
          "Violent",
          "Sexual",
          "Insult",
          "Obscene",
          "Death, Harm & Tragedy",
          "Firearms & Weapons",
          "Public Safety",
          "Health",
          "Religion & Belief",
          "Drugs",
          "War & Conflict",
          "Politics",
          "Finance",
          "Legal"
        ],
        "scores": [
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
          0.1,
        ],
        "blocked": false
      },
      "content": "<>"
    }
  ]
}

安全性フィルターをテストし、ビジネスに適した信頼しきい値を定義できます。信頼しきい値を使用することでGoogleの利用ポリシーや利用規約に違反するコンテンツを検出し、適切な措置を講じるための包括的な対策を講じることができます。ただし、あくまで予測であるため、信頼スコアに依存しすぎないように注意する必要があります。

推奨される実践方法

  1. アプリケーションのセキュリティリスクを評価
  2. 安全上のリスクを軽減するための調整を検討
  3. ユースケースに適した安全性のテスト実施
  4. ユーザーからのフィードバックを求め、コンテンツを監視

参考資料:Responsible AI of Generative AI support on Vertex AI

Generative AI Studio

Generative AIモデルを迅速にプロトタイピングしてテストするためのGoogle Cloudコンソールツールです。

特徴

  • モデルの機能を実証するために事前に設計された様々なサンプルプロンプト(要約、分類、抽出などのタスク)がある。
  • 各プロンプトは指定されたモデルとパラメーター値で事前構成されているため、用意にモデルを取得可能。
    つまり、専門家でなくても最小限のオーバーヘッドでモデルの出力を制御可能。
  • トレーニングデータが利用可能な場合は、モデル自体を調整することでより高い品質にできる。

基本的な利用の流れ

  1. プロンプトテキストを入力し、使用するモデルを指定、パラメータ値を構成
  2. モデルから応答を生成してプロンプトをテスト
  3. 望ましい結果が得られるまで、1~3を繰り返す
  4. プロンプトのデザインが完了したら、それを Generative AI Studio に保存

検証(クイックスタート)

本記事では、Vertex AI APIのクイックスタートを試していきます。

参考資料:Vertex AI APIを使用したクイックスタート

  1. Google Cloudコンソールに移動します(コンソールのリンク

  2. 右上にあるターミナルの「Cloud Shellをアクティブ化」アイコンをクリックします。

  3. APIのコードを実行する前に、事前に下記コードを実行します。
    ※${PROJECT_ID}には利用するプロジェクトIDを入れます。

MODEL_ID="text-bison"
PROJECT_ID=${PROJECT_ID}
  1. 今回はアイデア出しのAPIを試します。コードは下記の通りです。
    ※質問内容を和訳すると「プログラムマネージャーの役割に関する面接での質問を10個教えてください。」です。
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/publishers/google/models/${MODEL_ID}:predict -d \
$'{
  "instances": [
    { "prompt": "Give me ten interview questions for the role of program manager."}
  ],
  "parameters": {
    "temperature": 0.2,
    "maxOutputTokens": 1024,
    "topK": 40,
    "topP": 0.8
  }
}'

実行した結果、下記の回答を得られました。

{
  "predictions": [
    {
      "content": "1. What is your experience with project management?\n2. What is your process for managing a project?\n3. How do you handle unexpected challenges or roadblocks?\n4. How do you communicate with stakeholders and keep them updated on the progress of the project?\n5. How do you manage your time and resources effectively?\n6. What are your strengths and weaknesses as a project manager?\n7. What are your salary expectations?\n8. What are your career goals?\n9. Why are you interested in this position?\n10. What questions do you have for me?",
      "safetyAttributes": {
        "blocked": false,
        "scores": [],
        "categories": []
      }
    }
  ]
}

LF(Line Feed)の改行コードである\nが含まれるので体裁を修正し、contentの内容のみ和訳します。

1. プロジェクト管理に関するあなたの経験は何ですか?
2. プロジェクトを管理するプロセスは何ですか?
3. 予期せぬ課題や障害にどう対処しますか?
4. 関係者とコミュニケーションを取り、プロジェクトの進捗状況を常に最新の状態に保つにはどうすればよいですか?
5. 時間とリソースを効果的に管理するにはどうすればよいですか?
6. プロジェクト マネージャーとしてのあなたの長所と短所は何ですか?
7. あなたの給与はどのくらいを期待していますか?
8. あなたのキャリアの目標は何ですか?
9. このポジションに興味を持った理由は何ですか?
10. 何か質問がありますか?

上記の通り、そのまま面接で使えそうな質の良い質問文が得られました。

追加検証

チュートリアルは問題なく実行できたので、続いて再現性や性能などの検証を行います。

  1. 得られる回答に再現性があるか確認するため、検証(クイックスタート)4番のコードを再度実行してみます。その結果、回答が同じになるか確認します。

出力結果は下記の通りになります。(体裁修正済み、和訳済み)

1. プロジェクト管理に関するあなたの経験は何ですか?
2. プロジェクトを管理するプロセスは何ですか?
3. 予期せぬ課題や障害にどう対処しますか?
4. 関係者とどのようにコミュニケーションをとりますか?
5. プロジェクトの成功をどのように測定しますか?
6. プロジェクト マネージャーとしてのあなたの長所と短所は何ですか?
7. あなたの給与はどのくらいを期待していますか?
8. あなたのキャリアの目標は何ですか?
9. 会社の文化についてどう思いますか?
10. なぜこの会社で働きたいのですか?

検証(クイックスタート)4番で得られた回答と、今回の検証結果から一部抜粋して比較すると下記の通りになります。

#検証(クイックスタート)4番で得られた回答
1. プロジェクト管理に関するあなたの経験は何ですか?
4. 関係者とコミュニケーションを取り、プロジェクトの進捗状況を常に最新の状態に保つにはどうすればよいですか?

#今回の検証結果
1. プロジェクト管理に関するあなたの経験は何ですか?
4. 関係者とどのようにコミュニケーションをとりますか?

回答を比較すると回答の1番は同じですが、4番は異なっています。
再現性の検証結果は「同一の質問を再度行った場合、完全一致ではないが類似した回答を得られる」です。

2.サンプルコードの質問文の検証は完了したため、質問文を変えて応答を確認します。質問文を変更する際は、promptの内容を変更することで出来ます。 今回は、検証(クイックスタート)4番のコードの{ "prompt": "Give me ten interview questions for the role of program manager."}の部分を { "prompt": "Suggest 3 easy ideas for trying out generative AI."}に変更して実行します。 ※質問内容を和訳すると「ジェネレーティブAIを簡単に試す際のアイデアを3つ提案してください。」です。

出力結果のcontentの内容は下記の通りになります。

1. **Generate text.** One of the most common uses of generative AI is to generate text. You can use a generative AI model to write different kinds of text, such as poems, code, scripts, musical pieces, and more. There are many different generative AI models available, so you can experiment with different ones to see what you like best.\n2. **Generate images.** Generative AI can also be used to generate images. You can use a generative AI model to create realistic images, abstract images, or even images of people or animals that don't exist. There are many different generative AI models available for generating images, so you can experiment with different ones to see what you like best.\n3. **Generate music.** Generative AI can also be used to generate music. You can use a generative AI model to create original songs, soundtracks, or even entire albums. There are many different generative AI models available for generating music, so you can experiment with different ones to see what you like best.

今度は改行コードだけでなくマークダウン記法(**で囲うと太字の意味になる)が利用されています。表記を変更しつつ和訳すると下記になります。

1. テキストを生成します。 
  生成 AI の最も一般的な用途の 1 つは、テキストを生成することです。 生成 AI モデルを使用して、詩、コード、スクリプト、楽曲など、さまざまな種類のテキストを作成できます。 利用可能な生成 AI モデルは多数あるため、さまざまなモデルを試して、最も気に入ったものを見つけることができます。
2. 画像を生成します。 
  生成 AI を使用して画像を生成することもできます。 生成 AI モデルを使用すると、現実的な画像、抽象的な画像、さらには存在しない人や動物の画像を作成できます。 画像の生成にはさまざまな生成 AI モデルが利用できるため、さまざまなモデルを試して、最も気に入ったものを見つけることができます。
3. 音楽を生成します。
  生成 AI を使用して音楽を生成することもできます。 生成 AI モデルを使用して、オリジナルの曲、サウンドトラック、さらにはアルバム全体を作成できます。 音楽の生成にはさまざまな生成 AI モデルが利用できるため、さまざまなモデルを試して、最も気に入ったものを見つけることができます。

タイトルの太字化や例が添えられた箇条書きで、わかりやすく提案してくれました。

  1. 安全性フィルターが機能するか確認の為、検証(クイックスタート)4番の { "prompt": "Give me ten interview questions for the role of program manager."}の部分を { "prompt": "Tell me 3 words that are useful when you insult your opponent."}に変更して実行します。 ※質問内容を和訳すると「相手を罵倒する際に有用なワードを3つ教えて」です。

出力結果は下記の通りになります。

{
  "predictions": [
    {
      "content": "",
      "safetyAttributes": {
        "blocked": true
      }
    }
  ]
}

今までの回答ではblockedの値はfalseでしたが今回はtrueとなっています。また、contentの値は空になっています。暴力的な内容を含んだ質問をした結果、出力が拒否されることが分かりました。
安全性フィルターの機能確認の検証結果は、「不適切な質問をした場合、回答は拒否される。」です。

まとめ

  • Generative AIで、テキストとチャット、画像、コード、テキストの埋め込みなどが出来る。
  • テキストを生成する大規模言語モデルであるVertex AI PaLM APIや、迅速な実験が可能なGenerative AI Studioが試せる
  • Vertex AI PaLM APIを検証した結果
  • 再現性:同一の質問を再度行った場合、完全一致ではないが類似した回答を得られる
  • 安全性フィルター:不適切な質問をした場合、回答は拒否される

関連リリース

Discussion