どっかのエンジニアの備忘録

読んで本や心に留めておきたい言葉をまとめたいと思ってます

google cloud セマンティック検索

google cloud のセマンティック検索を使ってみたい

詳しい内容は google cloud の 動画から www.youtube.com

テキスト検索ではなく、ベクトル検索になるので、いい感じで検索結果をかえしてくれるらしい また、マルチモーダルのため画像、音声なども扱える。 今回は 画像を google cloud storage に置き、セマンティック検索を試してみたい。

まずは、画像データの準備から

機械学習の無料のサンプルデータセットを利用した。 ここには 30枚の部屋の写真がのっている。 それぞれ、雰囲気や映しているものも異なる。 ローカルに一度保存。

cloud storage に 画像アップロード

これを google cloud storage に配置する。 ちなみに、google cloud のアカウントは最初に無料枠として $300 が使えるため、 どれくらい費用としてかかるのかも見てみたい。 バケットを作成し、準備した画像をアップロード

次に、Bigquery に オブジェクトテーブルを作成する

これ以降は google cloud のチュートリアルを参考にした。 https://cloud.google.com/blog/products/data-analytics/bigquery-multimodal-embeddings-generation/?hl=en

まずは画像データを扱う為のオブジェクトテーブルを作る。 オブジェクトテーブルとは非構造化データを扱う為の、読み取り専用テーブル https://cloud.google.com/bigquery/docs/object-table-introduction?hl=ja

チュートリアルには書かれていないが、コンソールから コネクションの作成が必要。

下記を参考にして、コネクションを作成する。 bk mk --connection コマンドで作るらしい。 zenn.dev

コネクション作成後、適宜下記の内容を書き換えて、create。 connectionId は先程作ったものを指定する。

CREATE OR REPLACE EXTERNAL TABLE
`bqml_tutorial.met_images`
WITH CONNECTION `Location.ConnectionID`
OPTIONS
( object_metadata = 'SIMPLE',
   uris = ['gs://gcs-public-data--met/*']
);

無事、テーブルは作成できたが、select が permission denied のエラー storage.objects.list の権限がなさそう。

Bigquery の サービスアカウントに対して、IAM と管理の画面から プリンシパルに Bigquery のサービスアカウント、ロールに、Storage オブジェクト閲覧者を付与して再実行。

無事、見えてきた。

モデルを作成する。

※これ以降のソースコードはサンプルをそのまま貼り付けている。 適宜、プロジェクト名など変更する必要があり。

CREATE OR REPLACE MODEL
 bqml_tutorial.multimodal_embedding_model REMOTE
WITH CONNECTION `LOCATION.CONNNECTION_ID`
OPTIONS (endpoint = 'multimodalembedding@001')

マルチモーダルだと、endpoint は 上記を使うらしい?

エンベディングを生成する

CREATE OR REPLACE TABLE `bqml_tutorial.met_image_embeddings`
AS
SELECT * FROM ML.GENERATE_EMBEDDING(
  MODEL `bqml_tutorial.multimodal_embedding_model`,
  TABLE `bqml_tutorial.met_images`)
WHERE content_type = 'image/jpeg'
Limit 10000

作った、テーブルとモデルを使用して、エンベディングをつくる。 また権限のエラー

gserviceaccount.com does not have the permission to access resources used by ML.GENERATE_EMBEDDING.

エラーメッセージで下記を参照して、権限付与しろとのこと Vertex AI ユーザーを付与すればよさそう → ダメだった。よくわらないかつ面倒なので vertex AI の 管理者ロールを与えた。 最小権限の原則とかから本来は調べるべき。実行できた ok https://cloud.google.com/bigquery/docs/generate-text-tutorial?hl=ja

生成されたエンベディングにベクトルインデックスを作成する

CREATE OR REPLACE VECTOR INDEX  `met_images_index`
ON bqml_tutorial.met_image_embeddings(ml_generate_embedding_result)
OPTIONS(index_type = 'IVF',
 distance_type = 'COSINE')

どうやら合計行数は最低でも 5000 行必要らしい。 まぁ、ベクトルインデックスは、オプションらしいので今回はとばす。

テキストから画像への (クロスモダリティ) 検索に埋め込みを使用する

-- embed search string

CREATE OR REPLACE TABLE `bqml_tutorial.search_embedding`
AS
SELECT * FROM ML.GENERATE_EMBEDDING(
  MODEL `bqml_tutorial.multimodal_embedding_model`,
  (
    SELECT "pictures of white or cream colored dress from victorian era" AS content
  )
)

これで、埋め込まれた検索文字列を使用して、 類似した埋め込みを検索できるようになった。

-- use the embedded search string to search for images

CREATE OR REPLACE TABLE
 `bqml_tutorial.vector_search_results` AS
SELECT
 base.uri AS gcs_uri,
 distance
FROM
 VECTOR_SEARCH( TABLE `bqml_tutorial.met_image_embeddings`,
   "ml_generate_embedding_result",
   TABLE `bqml_tutorial.search_embedding`,
   "ml_generate_embedding_result",
   top_k => 5)

ちなみに、自分は 部屋の写真を読み込み、

CREATE OR REPLACE TABLE `first-study-project-414006.bgml_turorial.room_search_embeddings`
AS
SELECT * FROM ML.GENERATE_EMBEDDING(
  MODEL `first-study-project-414006.bgml_turorial.room_model`,
  (
    SELECT "A natural room with a white base and sofa" AS content
  )
)

このような埋め込みを使用した。 create されたテーブルはこのように、embedding された結果が格納されている。

-- use the embedded search string to search for images

CREATE OR REPLACE TABLE
 `first-study-project-414006.bgml_turorial.room_search_results` AS
SELECT
 base.uri AS gcs_uri,
 distance
FROM
 VECTOR_SEARCH( TABLE `first-study-project-414006.bgml_turorial.room_embeddings`,
   "ml_generate_embedding_result",
   TABLE `first-study-project-414006.bgml_turorial.room_search_embeddings`,
   "ml_generate_embedding_result",
   top_k => 5)

結果と cloud storage に格納されている画像見てみましたが、 だいぶ良さそうでした。もう少し調べてみます。

ノートパソコンの Out of Memory

大学時代から、約6年ほど使っているノートパソコンが

ブラウザを複数立ち上げていると、

エラー : Out of Memory となってしまう。

 

 

使用してるPC の情報としては下記。

 

 

https://www.fmworld.net/fmv/uh_b/1405/

 

タスクマネージャーを確認し、メモリの使用状況を確認すると、

4GB ぎりぎりをさまよってるので、交換してみようと思った。

 

 

この左下のところがメモリ。ちなみに右上の SSD だが、大学時代にHDDから交換した。

 

購入したメモリは、DDR3L の 8GB 

2000円もせず、購入できた。

 

 

メモリを入れ替えると、ブラウザでの動作も問題なく

 

 

8.00 GB で認識。

 


使用状況も余裕のある感じ。

問題なさそう。

 

 

 

AWS CodeWhisperer を VScode で使ってみた使用感

 

はじめに

 

Amazon CodeWhisperer という IDE 上で、

コメントを書くとコードを提案してくれるという

とても便利な機能があることを知った。

 

ちょうど、機械学習を学ぶ為にPythonを学びたいという気持ちがあったので

使ってみようと思った。

 

aws.amazon.com

 

AWS の CodeWhisperer の ページを見てみるとなんと…

生産性が 57% 迅速化。かつ、27% 正常にタスクを完了できる可能性が高くなるらしい。

 

インストール方法

 

インストール方法はとても簡単で、まずIDEをインストールする。

現在対応しているのは、

 

 

今回は VSCode で使ってみる。

 

VSCode をインストール後は、下記のサイトを参考に

インストール作業を進めた。

Amazon CodeWhisperer を VSCode に導入してみた! | cloud.config Tech Blog

 

ものの数分でインストールができた。

 

コードを生成するために使用したコメントを収集しているそうなので、

SettingでCodeWhispererと検索し、

「Sharing Code Whisperer Content With AWS」のチェックを外した

 

Python 3.12.0 のインストール

Windows版Pythonのインストール: Python環境構築ガイド - python.jp

こちらのサイトを参考に、インストール

 

pandas が使えなかったので ターミナルで

pip install pandas

 

使用方法

・コードの提案:Windows「Alt+C」
・次の候補を提案:→キー or ←キー
・提案されたコードの採用:Tabキー

 

Alt + C で コードを提案してもらい

よさそうなら、Tabキーで決定

 

試しに、こちらの本の1章を少しやってみる

www.shuwasystem.co.jp

 

1つずつのファイルを見てみようと思ったときにcsv ファイルを配置している

CSV フォルダ配下に存在しない order_master.csv を読み込むような提案をされた。

ただ、order_master.csv は存在しないので、customer_master.csv、item_master.csv

基づいて、予測してくれたのだと思う。

 

 

ある程度、コメントに書いてくれたことを理解して

コードを提案してくれる。

 

ものの15分くらいで、1章の内容のコーディングと

グラフの可視化までたどり着けた。

 



コメントを書けば、ある程度、コードを提案してくれるため

ほとんど自分でコードを修正することはなかった。

今回は、参考書もあったため、正しそうか確認もできたことが大きい。

 

今後は、この CodeWhisperer を活用しながら

Python を通して機械学習を勉強していきたいと思う。

 

他の言語も対応しているそうなので、色々やってみたい。

 

Language support in Amazon CodeWhisperer - CodeWhisperer

 

 

火星の夕焼けは青いらしい

ふと、太陽系の他の惑星で、空を見上げた時に

昼間、夕焼けでどんな色をしてるのか気になった。

 

流行りのBing AI に聞いてみたら、面白かった。

違う箇所もあるかもしれないが以下が回答。

 

 

 

終わりを思い描くことから始める (7つの習慣)

自分の葬式を想像し、そこに参列してくれる人のこと、そこで読まれる弔辞の文章をリアルにイメージして欲しい。終わりを思い描くことで自分がどう生きるべきなのか、本当の成功の定義が見えてくる。すべてのものは2度作られる 第一の創造はまず思い描くこと、第二の創造は実際に思い描いたものを作ること。第一の想像がなければ実際に実現されることはない。まずは思い描くことから、そのためには終わりを思い描くことが重要である。

人生はできることに集中することであり、出来ないことを悔やむことではない。(スティーブン・ホーキング)

ホーキング先生自身も筋萎縮性側索硬化症で車椅子の物理学者として、知られる。特異点定理やブラックホールの蒸発理論など、宇宙物理学に貢献された。いつまでも出来ないことにくよくよするのではなく、出来ることに誰も出来ないくらい取り組みたい。