top of page

BigQueryのベクトルサーチを試してみる

更新日:5月9日

1.はじめに

  • 最近提供が始まったBigQueryのベクトル検索機能を試しました。

  • pineconeより良い点として、metadataのテキスト量に制限が無いのでまとめて放り込んでおけます。


2.BigQueryのベクトル検索

  • この記事を参照。 パブリックプレビューですが、ベクトルサーチどころか、RAGの完全版までBIgQueryで完結できる!とのことですごいですね。gemini with Bigqueryもありましたが、何でも吸収してしまうBigQuery。

  • 現状ベクトルDBとしてはpineconeを使ってましたが、データ処理はほとんどGoogleCloudに依存しているので、GoogleCloudの中で完結するといいなと思い試してみます。

  • 記事では特許データ(Google Patetns Public datasetのベクトル表現を利用)してますが、今回は有価証券報告書の研究開発活動やリスクに関する文章を使います。




3.流れ

(1)テキスト抽出

  • 過去に取得していた2018〜2023までの分の有価証券報告書(20000件ほど)の【研究開発活動】、【経営方針、経営環境及び対処すべき課題等】【サステナビリティに関する考え方及び取組】、【事業等のリスク】、【経営上の重要な契約等】などのテキストを抽出。

  • こんな感じです。


(2)埋め込み表現へ

ここは過去のブログでもやったので省略しますが、BigQueryから呼び出せる埋め込み表現の制限により、textembedding-gecko-multilingualを使います。

PROJECT_ID = "***"
LOCATION = "***"

import vertexai
vertexai.init(project=PROJECT_ID, location=LOCATION)
from vertexai.preview.language_models import TextEmbeddingModel
model = TextEmbeddingModel.from_pretrained("textembedding-gecko-multilingual@latest")
model.task_type="SEMANTIC_SIMILARITY"#"RETRIEVAL_QUERY"

(3)BigQueryに投入

  • 一旦jsonlにしてから、Bigqueryに読み込みます。こんな形ですが、


  • ポイントは768次元のfloatの配列が入っている点。これを使って類似度を出します。ちなみにこれは【研究開発活動】部分を埋め込み表現にしたものです。他のテキスト項目も同様に埋め込み表現にしていきます。




(4)BigQueryMLとVectorSearchを使って検索

  • 普通の検索

#普通の検索
SELECT query.query, base.FilerName,base.FiscalYear,base.RDtext
FROM VECTOR_SEARCH(
   TABLE `{PROJECT}.{DATASET}.RDtext`, 'values',
   (SELECT text_embedding, content AS query
    FROM ML.GENERATE_TEXT_EMBEDDING(
         MODEL `{PROJECT}.{DATASET}.embedding_model`,
         (SELECT '生成AIを利用したサービスに関してレコメンド性能を向上したもの' AS content))
   ), top_k => 10)

結構色々でてきました。



  • RAG 上記の検索に加えて、LLMで更に情報をまとめてアイデアを出させてしまいましょう。というものです。上記の記事にあるtext-bison-32kを使いました。

#RAG
SELECT ml_generate_text_llm_result AS generated, prompt
FROM ML.GENERATE_TEXT(
   MODEL `{PROJECT}.{DATASET}.text-bison-32k`,
   (SELECT CONCAT('次の内容で新たな事業アイデアを提案してください。: ', STRING_AGG(FORMAT("%s", base.RDText), ',\n')) AS prompt,
     FROM VECTOR_SEARCH(
         TABLE `{PROJECT}.{DATASET}.RDtext`, 'values',
         (SELECT text_embedding, content AS query
           FROM ML.GENERATE_TEXT_EMBEDDING(
               MODEL `{PROJECT}.{DATASET}.embedding_model`,
               (SELECT '生成AIを利用したサービス' AS content))
         ), top_k => 5)
   ),
   STRUCT(0.4 AS temperature, 500 AS max_output_tokens, 0.5 AS top_p, 5 AS top_k,
     TRUE AS flatten_json_output));

不動産*AIの説明があったので、そこから発想したようです。


事業アイデア: AIを活用した不動産投資プラットフォーム

概要: このプラットフォームは、AIを活用して不動産投資の機会を分析し、投資家が投資判断を下すのを支援します。プラットフォームは、不動産の価格、賃貸料、空室率、犯罪率などのデータを収集し、AIアルゴリズムを使用して、投資家が収益性の高い不動産を見つけるのを支援します。

ターゲット市場: 不動産投資に興味のある個人投資家や機関投資家

収益モデル: プラットフォームは、サブスクリプションベースのモデルで提供され、投資家はプラットフォームへのアクセスに対して月額または年額の料金を支払います。

競合他社: 他の不動産投資プラットフォームには、Zillow、Trulia、Redfinなどがあります。しかし、これらのプラットフォームは、AIを活用した分析機能を提供していません。

差別化要因: このプラットフォームは、AIを活用した分析機能を提供することで、投資家がより収益性の高い不動産を見つけるのを支援します。また、プラットフォームは、投資家が他の投資家とつながり、投資に関するアイデアを共有できるコミュニティも提供します。

成長戦略: プラットフォームは、不動産投資に興味のある個人投資家や機関投資家向けにマーケティング活動を実施することで、成長を目指します。また、プラットフォームは、他の不動産投資プラットフォームとの提携も検討しています。

リスク: プラットフォームの主なリスクは、AIアルゴリズムの精度が低いことです。AIアルゴリズムの精度が低い場合、投資家は収益性の低い不動産に投資してしまう可能性があります。また、プラットフォームは、他の不動産投資プラットフォームとの競争にも直面しています。



4.その他

  • gemini-pro1.0はモデルとしては登録できましたが、RAGで使うと空白で出てしまうdので、またトライしてみようと思います。

  • こちらのlangchainのラッパーの方が使いやすそうですね。





閲覧数:41回0件のコメント

最新記事

すべて表示

Comentários


bottom of page