こんにちは。
今回はテキストからベクトルへの変換を目的として、BigQuery上でEmbeddingモデルを使う話をします。
設定自体は以下の内容に従うことで設定可能だと思います。
https://cloud.google.com/bigquery/docs/generate-text-embedding?hl=ja
上記は非常にシンプルかつ分かりやすい内容ですが、具体的に処理をするとなったらちょいちょい詰まったところがあったので
本記事では上記の内容に従って設定を行った状況で、どのようなSQLを動かしたのか簡単にまとめます。
コスト面についても多少言及できれば良いかなと思います。
前提知識としてEmbeddingの説明を省きますが、以下記事などを参考にしていただくと良いかと思います。
- ちゃんと読むのにおすすめ: https://qiita.com/Detroit/items/99ac1d5b6ec8c07eb48b
- ざっくり読むのにおすすめ: https://qiita.com/takarui/items/bce75aad95f1df17e93d
- ざっくり読むのにおすすめ2: https://zenn.dev/peishim/articles/c696ff85a539bd
使用したデータセットのテーブル構成
列数2のテーブルを用意しました。
- id
- content
idは識別用で、contentはEmbeddingモデルが埋め込み表現を作成する対象となるカラムです。Embeddingの対象となるカラムは必ずこの名前にする必要があります。
最終的に使ったSQL
CREATE OR REPLACE TABLE `environment.dataset.table` AS
SELECT
*
FROM
ML.GENERATE_EMBEDDING(
MODEL `environment.dataset.model_name`,
(SELECT * FROM `environment.dataset.table` LIMIT 10000),
STRUCT(
TRUE AS flatten_json_output,
'CLUSTERING' AS task_type,
8 AS output_dimensionality
)
)
どのモデルを使ったか
text-multilingual-embedding-002
を使いました。日本語対応してるEmbeddingモデルだからです!
作った時のSQL
CREATE OR REPLACE MODE `モデルへのパス`
REMOTE WITH CONNECTION `BigQueryにVertexAIを接続した時に取得できる接続ID`
OPTIONS (ENDPOINT = `text-multilingual-embedding-002`)
詰まったポイント. ML.GENERATE_EMBEDDING
を入れる場所
詰まったポイントとしては、ML.GENERATE_EMBEDDING
をFROM
句移行に入れないと動かなさそうという点です。これはSQLを普段書いてないとか、BigQueryに慣れてないとかその辺の問題も大いにありそうです。
最初はselectで絞った時に、EMBEDDINGかけようかなと思っていたのですが
↓イメージ
CREATE OR REPLACE TABLE `environment.dataset.table` AS
SELECT
id,
ML.GENERATE_EMBEDDING(`何かのテーブル`...
ML.GENERATE_EMBEDDING
はスカラーではなく複数のカラムを返却値として持っているため設定できないっぽいです。
精神的に詰まったところ: コスト面
私の中で一番怖かったのはここです。OpenAIのAPIにおけるEmbeddingが安いことは知っていたものの初めて使うサービスだとドキドキしました。
最初は下記のうち上の方だけしか知らなくて、この記事を書くにあたって下の料金表を見つけました。
見つけるのむずすぎます。
Vertex AIの料金
https://cloud.google.com/vertex-ai/pricing?hl=ja
Vertex AIの料金 for Generative AI
https://cloud.google.com/vertex-ai/generative-ai/pricing?hl=ja#embedding-models
今回は13,155,264カウントで40円くらいでした。
カウントがgoogle cloud platformにおけるトークン数に当たるようです。
仲間募集中
株式会社ホープでは、福岡で働くエンジニアを募集中です。
ぜひ、求人を見てみてください!
▼ Wantedly求人
https://www.wantedly.com/projects/1684027
▼ コーポレートサイト
https://www.zaigenkakuho.com/recruit/
「自治体を通じて人々に新たな価値を提供し、会社及び従業員の成長を追求する」
この理念の実現に向けて、今後も自治体の課題解決に取り組んでいきます。
ご応募お待ちしております!