Google CloudのVertex AI Searchを試してみる

2023-10-03

エヌデーデー関口です。

先日のGoogle Cloud Next ’23で発表がありましたが、Generative AI App Builder(Gen App Builder)のVertex AI SearchがGAになったということで、早速使ってみました。

[注意]2023年9月5日時点では日本語対応できていませんこの記事では日本語の検索を試してみたところ、完璧とまでは行かないですが一応動いたということで、その手順を記事にしました。

2023年10月3日現在、Vertex AI Searchが日本語に対応しました!

Vertex AI Seachとは?

Vertex AI Searchは、以前はGen App BuilderのEnterprise Searchと呼ばれたもので、指定されたWebサイトや、組織内で取り扱うドキュメント、BigQueryのデータなどのデータに基づいてAIが質問に答えてくれる検索システムを簡単に構築できるようになるものです。

Vertex AI Searchの特徴はいくつかあるのですが、中でもGoogleが提供するLLMを使いながらも組織独自の外部データを使用することで、AIがそれっぽい嘘をつくハルシネーション(幻覚)という現象を防ぐGroundingと呼ばれる手法を用いているところは個人的に注目しているところです。

AIの分野ではFine Tuning(微調整)と呼ばれる手法を聞いた方もいらっしゃると思います。Fine Tuningは基礎となる学習モデルに対して、特定の分野の情報を追加学習させてモデルを作り直すというようなアプローチです。

一方Groundingは学習モデルに変更を加えることはせず、至極ざっくりと説明すると、モデルが質問内容から語句を解釈し、その語句で検索エンジンを用いて情報を検索し、その結果を受けてモデルが回答として組み立てるというアプローチを取っています。

つまりどういうことか?をこれまたざっくりいうと 、LLMでは語句と語句の組み合わせのパターンの確率が大きいものを並べて文章にしているので、Fine Tuningでは追加学習させた語句の組み合わせ的に確率が高い文章を生成する結果、それっぽい嘘であるハルシネーションが起きるのに対し、Groundingでは内部的にはデータの検索結果を元にAIが要約を組み立て直すので、ハルシネーションが起きにくい(起こらないわけではない)というのです。

Vertex AI Searchで情報を検索できる環境を整える

それでは早速Vertex AI Searchで企業内情報検索の仕組みを構築してみましょう。

データを用意してGoogle Cloud Storageに保存する

今回のVertex AI Searchに検索させるものは、弊社の社内規程にしてみました。社内規程なので内容をお見せすることはできないのですが、給与規程とか旅費規程とかどの会社にもあるようなものです。

現状これらの規程は複数のPDFファイルになっているため、まずはこれらのファイルをGoogle Cloud Storage(GCS)に保存します。後ほどこれらのファイルをGen App Builderで読み込ませます。

クリックで拡大

Gen App Builderのコンソールでアプリを作る

Gen App Builderの中ではAIに学習させて作る検索やチャットの機能を「アプリ(Apps)」という単位で呼びます。PDFの保存が完了したら、次にCloudコンソールからGen App Builderのメニューを開いてアプリを作っていきましょう。

Google Cloudの該当プロジェクト内ではじめてGen App Builderを利用する場合は、利用規約への同意を求められているので、チェックをいれてAPIの有効化を行います。

クリックで拡大

遷移すると次のような画面が表示されるので、Vertex AI Searchを作る場合は「検索」を選択します。

クリックで拡大

次にプロジェクト内で、検索エンジンを識別するための名称を決めます。それから、ロケールも選択するのですが、現状ではglobal, eu, usのいずれかのみが選択でき、マルチリージョンで動作するのが前提となっています。選択したら続行しましょう。

クリックで拡大

アプリに読み込ませるデータを設定する

次にデータストアを選択するのですが、初期の段階ではデータストアは何も表示されていません。データストアは検索対象となるデータの所在を示すもので、一つのアプリに対して必ず一つのデータストアが必要になります。

クリックで拡大

画面上部のCREATE NEW DATA STOREを押すと、どの種類のデータソースを利用するのかを選択できます。現状次の4つが利用できます。

  • Public Web Content Crawler: インターネットに公開された特定のWebサイトをクローリングして検索対象とします
  • BigQuery: BigQueryのデータを検索対象とします
  • Cloud Storage: GCS内に保存されたデータを検索対象とします
  • API: 外部のアプリからAPIをコールしてデータを入れ込むことができるようですが詳細不明です

今回は先ほど用意したCloud Storageを対象とします。

クリックで拡大

GCSに保存したフォルダの中のファイルすべてを選択する場合は、バケットのURIを入力します。また、PDF内の文章が対象となるので、Unstructured documents(非構造ドキュメント)を選択してください。

なお、Google Cloudのドキュメントによると非構造ドキュメントで検索対象にできるのはHTML, PDF, TXT形式のデータのようです。

クリックで拡大

最後にデータストアの名称を決めます。

クリックで拡大

作成ボタンを押すと、データストアへのデータインポートが開始されます。しばらく時間をおいてから画面をリフレッシュすると、インポートが完了し、次のような画面になります。画面下部に読み込んだPDFファイルが一覧で表示されています。

クリックで拡大

検索機能を試してみる

データストアへのインポートが完了したら、早速検索機能を試してみましょう。

Gen App Builderの左メニューからAppsを選択すると、作成されたアプリが一覧に表示されるのでクリックしてください。

正しそうな回答の例

検索のプレビュー画面に遷移しますので、検索文字を入力してみます。
出張旅費について聞いてみると、次のように回答が出力されました。細かいところまでは確認できていませんが、概ねPDFの内容から抽出された内容に合致しているようです。

さらに、回答エリアの下部には関連ドキュメントの一覧が表示され、クリックするとPDFが開くようになっています。ほんの数ステップでこのレベルの検索ができるというのは驚きですね!

日本語のゆれへの対応状況

もう少し調べてみましょう。今度は「育休について」どのように規程されているかを検索します。

おっと、情報が見つからないと出ました。代わりに厚生労働省ホームページの情報を見るように誘導する回答が出てきました。このあたりは、単純な検索エンジンであれば、検索結果が見つからないという回答で終わってしまうのに対して、AIらしく既存の情報などを元に導き出しているのではないかと思われます。

ちなみに、弊社に育休規程がない訳がなく「育児休業制度について」と言葉を変えたところ、規程のPDFの内容を回答として表示できました。これは日本語対応が不完全であるために、検索エンジン内で「育休」と「育児休業制度」の言葉の「ゆれ」に対応できず検索できなかったのではないかと推測されます。

ハルシネーション?

日本語対応が不完全なためにハルシネーション(幻覚)のような回答もありました。次の回答をみてください。

一見すると正しいようにはみえるのですが、規程にはこのようには書いておらず「特別休暇」を規定している部分で、別の箇所の休暇規程を表示しています。日本語対応が不完全であるために、文書の解釈に誤りが生じているのではないかと推測されます。

しかし、その一方で特別休暇には関係しない、結婚時の祝金の金額などは別のPDFから情報を持ってきて、正しい結果を出力するという、AIらしく気の利いた回答にもなっています。

作成したアプリをWebサイトなどに統合する

さて、こうして作成したアプリをWebサイトなどに検索機能として統合させたい場合、アプリメニューから統合を選択すると次のような画面になります。

ウィジェットとして

ウィジェット(Webページの一部にパーツとして表示)にする場合は、認証の要否を選択した上で、ウィジェットを貼り付けるWebサイトのドメインを複数追加することができます。

さらに、WebサイトのHTML上に画面に表示されているスニペットコードを貼り付けると検索パーツが表示されるようになります。

クリックで拡大

例えば次のようにHTML内に表示されているスニペットを組み込みます。

<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Webサイト</title>
</head>
<body>
Hello world!
<br/>

<!-- この下がコードスニペット -->
<!-- Gen App Builder widget bundle -->
<script src="https://cloud.google.com/ai/gen-app-builder/client"></script>

<!-- Search widget element is not visible by default -->
<gen-search-widget
  configId="xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
  triggerId="searchWidgetTrigger">
</gen-search-widget>

<!-- Element that opens the widget on click. It does not have to be an input -->
<input placeholder="Search here" id="searchWidgetTrigger" />

</body>
</html>

そして、Webサイトに公開すると次のような表示になります。

Search hereをクリックするとウィジェットが開いて、検索できるようになります。
なお、未確認なのですが即時反映されるのではなく、検索が完全に機能するまでしばらく時間を要するようでした。

APIで呼び出す

APIで呼び出すには同じ画面の上部にあるAPIタブをクリックすると、APIとして呼び出すためのサンプルコードが表示されます。

サンプルコードは次のようなものです。

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/xxxxxxxxx/locations/global/collections/default_collection/dataStores/ndd-ai-datastore_xxxxxxxxx/conversations/-:converse" \
-d '{"query":{"input":"育児休業制度について"}}'

実際にこれをCloud Shellから実行してみると次のような結果が得られます。

{
  "reply": {
    "reply": "育児休業制度について・・・・・",
    "summary": {
      "summaryText": "育児休業制度について・・・・・"
    }
  },
  "conversation": {
    "name": "projects/xxxxxxxxx/locations/global/collections/default_collection/dataStores/ndd-ai-datastore_xxxxxxxxx/conversations/xxxxxxxxxxxxxxxx",
    "state": "IN_PROGRESS",
    "userPseudoId": "xxxxxxxxxxxxxxxx",
    "messages": [
      {
        "userInput": {
          "input": "育児休業制度について"
        }
      },
・・・・・検索結果が続く
}

まとめ

日本語の対応はまだですが、英語ではGAとなったばかりのVertex AI Searchの紹介でした。いかがでしょうか?簡単にエンタープライズ検索ができるということはイメージできたのではないでしょうか?

例えば次のような利用場面が想定できます。

  • 企業特有の情報をPDFやBigQueryなどにいれて企業内検索が容易に作成できるようになる(検索結果表示の権限などをどのように分離するべきなのかは別途検討は必要そうです)
  • 企業が取り扱っている商品やサービスのマニュアルなどを読み込ませることでFAQサイトなどの構築に利用する
  • 構造化データが正式リリースになれば、商品リストやカタログなどを読み込ませて、受発注システムの支援にも利用できそうです

日本語への早期対応を期待しつつ、英語のデータが用意できる方は是非試してみてはいかがでしょうか?

また、Vertex AI Conversationについてもいずれ記事を書く予定ですのでご期待ください!