Vertex AI Search で過去の日記を LLM に読ませよう
この記事は Google Cloud Advent Calendar 2023 (通常版) の 12/17 の記事です。
Google Cloud で Data Analytics Customer Engineer をやっている Yuma です。
突然ですが皆さん、日記はつけていますか?
Bard に聞いてみたところ、日記を継続すると次の効果が期待できるそうです。
- ストレス解消
- 記憶力向上
- 表現力・伝える力向上
- 自己理解の深まり
- 過去の思い出の保存
(各項目の詳細も説明してくれましたが省略しています)
私自身はというと、10年以上昔から日記をつけるようにしています。
ただ実態としては分報が近いでしょうか。その一日を振り返って日記を残すことも偶にありますが、どちらかというと思い立ったときに思い立ったことを、スマホやパソコンのメモ帳に書き綴ることが中心です。私の使っているメモ帳アプリにはページの概念があるので、毎日新しいページを作成し、そこにその日の出来事をひたすら追記しています。内容はプライベートな事柄から、仕事上発生した課題、その解決法、有用だったネット上の記事をスクラップしたもの、後で試したいアイデア、ビルドが失敗したときの怨嗟の声まで様々。特に整理は行わず、あらゆる雑多なコンテンツをメモ帳の中に蓄積しています。
後になってメモ帳を検索し、過去の解決法やアイデアを振り返りたくなることもあるのですが…ここで問題が生じます。
検索があまり役に立たないのです。
あらゆるコンテンツをメモ帳に入れてしまっているため、簡単な検索クエリだと検索結果がノイズだらけになってしまいます。関係のないページが多数ヒットしますし、1つのページの分量が多いとヒット箇所を探すのも面倒です。一方で検索クエリを複雑にすると、今度はヒットしなくなります。日記は思い付くままに綴っているため表記ゆれが多く、略語や同義語も多用しています。ですがメモ帳はキーワード一致検索にしか対応していません。よって表記ゆれなども含めた完全なキーワードでクエリしないと想定のページにはたどり着けなくなってしまいます。
結局、メモ帳を検索する代わりに Google 検索に最初から頼ってしまうことが多いのですが、過去の膨大な知見(メモ)があるのにも関わらずこれを有効活用できないのはつくづくもったいないとは感じていました。
そんなとき登場したのが Vertex AI Search です。
Vertex AI Search
Vertex AI Search はエンタープライズグレードの検索ソリューションで、皆様のお持ちのデータに対して Google の検索テクノロジーを適用できます。単純なキーワード検索だけでない文章の意味を理解したセマンティック検索を簡単に実現でき、さらに大規模言語モデルの統合により検索結果の要約や自然言語による対話型検索も利用できます。今回このソリューションを使えば同義語や表記ゆれも考慮して適切なメモを見つけてくれる上、LLM による要約まで利用できるのでは…!と期待し検証してみました。
では実際に触りながら、セットアップ方法を説明しましょう。
データの準備
Vertex AI Search の検索対象とするデータを用意します。
現時点で Cloud Storage 上の PDF、txt、HTML、DOCX(プレビュー)、PPTX(プレビュー)や BigQuery データセット、ウェブサイトなどを検索対象とすることが可能です。
サードパーティデータのサポートなど、機能追加も進んでおりますので、最新のステータスとしてドキュメントを併せて参照ください。
また、データソースにより使用できる機能・セットアップの手順が異なります。たとえばウェブサイトの場合、LLM 関連の機能はドメインの所有権確認を行うまで有効にできません。
私の使用しているメモ帳アプリは、すべてのページを個別の HTML ファイルとしてエクスポートする機能が搭載されており、これを使ってエクスポートを実施しました。その後、Cloud Storage の適当なディレクトリ下にこの HTML ファイルをアップロードします。
メモ帳アプリ側の仕様でページタイトルがそのままファイル名になるのですが、 (無題)
ばかり...。いかに適当に日記をつけていたかがわかります。
アプリの作成
次にこのデータを検索するアプリを作成します。
Google Cloud Console を開き、左側のナビゲーションメニューから「検索と会話」に進みます。
「新しいアプリ」または「新しいアプリを作成」ボタンをクリックし、次の画面に進みます。
「アプリの種類の選択」画面に進んだら、「検索」を選択します。
なお上記画像からわかるように、「チャット」や「リコメンデーション」を行うアプリを構成することも可能です。
次の画面の「アプリで使用する機能」で、LLMなど個別機能の有効・無効を切り替えられます。
今回はデフォルトのままとし、スクロールして画面したに進みます。
「アプリ名」「会社名または組織名」「アプリのロケーション」を適切に指定し、「続行」をクリックします。
「データストア」の画面で、検索対象とするデータを指定します。
「新しいデータストアを作成」をクリックします。
今回は Cloud Storage
の下にある「SELECT」をクリックします。
次に、データの保存場所を指定します。今回私は、gs://vertex_ai_search_diary_data
というフォルダに html ファイルをアップロードしたため、このフォルダを指定します。
データの種類として「非構造化ドキュメント」がチェックされていることを確認し「続行」をクリックします。
最後に、「データストア名」を適当に設定し、「作成」をクリックしてデータストア作成を完了させます。
データストア作成が完了すると、先程の「アプリの作成」でデータストアを選択する画面に戻ってきます。今作成したデータストアを選択し「作成」をクリックしてアプリを作成します。
これでアプリ作成は完了です。
裏側ではデータストアのインポートとインデックス作成が行われています。所要時間はデータ形式やサイズに依存しますが、今回のケース(6192 ファイル)の場合は 10 分ほどでした。インポートの進捗状況は上図「前回のドキュメントのインポート」の表示や、「アクティビティ」タブから確認できます。
いざ検索
さて、インポートが完了したら早速検索を試してみましょう。
画面左に出ている虫眼鏡アイコン(プレビューボタン)をクリックすると、上図ような検索プレビュー画面に遷移します。ここから検索を試すことができますので、早速やってみましょう。
まずは普通にキーワード検索を試してみましょう。CMake を使いアプリケーションをビルドする方法を忘れてしまったと仮定して、cmake build hello_world
と検索してみます。
このような結果になりました。
(個人のPC内のパスなど、見えてしまっているのでモザイクを多めにかけさせて頂いております。)
検索結果の上部にあるのが検索結果の要約で、私の過去のメモをもとにビルド手順を自然言語ベースで教えてくれています。また、関連するドキュメントへのリンクも引用として表示されます。
その下には発見されたドキュメントが列挙されます。モザイクを掛けてしまっているのでわかりにくいのですが、私の過去の作業メモをしっかり見つけ出してくれました。
実のところ、この検索はメモアプリ標準の検索機能では行いにくいものでした。細かな話にはなりますが、cmake でビルドする際に使うコマンドは cmake .. (いろいろなオプション)
で、build
という単語が出現しないこともあります。そういったメモは単純なキーワード検索では見つけ出せませんでした。Vertex AI Search はセマンティック検索を行えますので、的確な検索結果を返してくれます。
では次に、自然言語による検索も試してみましょう。「2020年を振り返ると?」と聞いてみます。
ちょっと恥ずかしい要約が返ってきました。データストア中の個人の日記をしっかり検索してくれたようですね。2020年は深層学習を実プロジェクトに適用して手応えを感じたり、長引く在宅勤務で腰が痛くなり、コロナが落ち着いた際友人に温泉とマッサージに連れて行ってもらったのでした。過去の日記や、年末振り返りのメモを的確に要約してくれてますが、なんかちょっと小っ恥ずかしいです。
(2020年はまだいいのですが、他の年にするとブログに記載しにくい黒歴史が要約されて出てくることもありました。)
このように、自然言語で質問することもできますし、「追加で質問する」をクリックすれば更に追加で情報を聞くこともできます。
以上のように Vertex AI Search を使うことで、個人の日記の内容ベースでいろいろ質問できる優秀な検索システムを手に入れることができました。
(おまけ) インテグレーション
作成した検索システムを、既存のウェブサイト等に連携することももちろんできます。HTML ページに Widget として埋め込む方法と、 API で連携する方法の 2 種類を紹介します。
まず、Widget として埋め込む方法です。
左側のメニューから「統合」を選択すると、まず Widget として埋め込む手順が表示さます。この手順に従い HTML にタグを追加することで、先程まで遊んでいた検索プレビュー画面をそのまま既存のウェブサイトに埋め込めます。認証の要不要や、オートコンプリートの挙動、表示する要素の調整なども一部可能になっています。ユーザーインターフェースを自力で実装する必要なく、気軽に既存のウェブサイトに埋め込めることがこの方法のメリットです。
次に、画面上部のタブで「API」を選択すると、REST API を使い連携するための手順が表示されます。この API は検索クエリを構成して POST すると検索結果を JSON で返します。ユーザーインターフェースは別途用意する必要がありますが Widget と比べるとより柔軟に既存のアプリケーションに組み込めます。
まとめ
Vertex AI Search の便利さが伝わりましたでしょうか。個人の日記を検索対象とすると黒歴史を引っ張り出されるリスクがありますが、それだけの性能を秘めていることの証左でもあります。
LLM に「2024年はどんな年だった?」と聞いたときの結果を充実させるべく、来年も頑張って行ければと思います。
Discussion