Snowflake Cortexについて調べてたら凄いワクワクしてきた！

[Snowflake Advent Calendar 2023](https://qiita.com/advent-calendar/2023/snowflake)の16日目の記事です。

# はじめに
先日、[Snowflake Cortex](https://www.snowflake.com/blog/use-ai-snowflake-cortex/?lang=ja)という新機能を知りました。

11月に行われたSnowflakeのイベント、[Snowday 2023](https://www.snowflake.com/snowday/?lang=ja)で発表されたものですが、あまり認識できていなかったので調べてみることにします。

https://www.snowflake.com/snowday/?lang=ja

# 機能内容
２つの公式ブログを読みながら理解を進めていきます。
- [Snowflake CortexでAIを数秒で使用](https://www.snowflake.com/blog/use-ai-snowflake-cortex/?lang=ja)

- [Snowflake Cortexによる迅速、簡単、安全なLLMアプリ開発](https://www.snowflake.com/blog/fast-easy-secure-llm-app-development-snowflake-cortex/?lang=ja)

> Snowflake内から離れることなく、企業が迅速にデータを分析し、AIアプリケーションを構築できるようにする、Snowflakeの新しいインテリジェントなフルマネージド型サービス

とのことで、下記のような全体像の2行目左側にSnowflake Cortexがあります。右側にはSnowflake Container Services。

この２つが、Snowflakeの生成AI機能を使うための選択肢だと書かれています。
![173057E8-A095-43C8-8AFC-38F18B701E6C.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41382/9fe7f103-c0d8-ddcd-6a62-eb529524b97b.png)

図に `Serverless AI & LLM Functions` とありますが、SQLまたはPythonで色々な **MLモデル・LLMモデルを使用した機能（サーバーレス関数）** が利用できます。
AI/LLMを実行するGPU等のインフラはSnowflakeがフルマネージドで用意してくれるので、ユーザーが構築する必要がないというのが大きな売り。

また、データの近くで実行できるので **最短ルートで高速に安全に処理できる** というのも大きいと。

以下に各機能を列挙していきます。

### LLMベースのモデルを使った関数

| 機能 | 概要 |
| ---- | ---- |
| 回答の抽出 | 非構造化データから情報を抽出する。 |
| センチメント検出 | テーブル全体のテキストのセンチメントを検出する。 |
| テキスト要約 | 長い文書をまとめてより迅速に利用できるようにする。 |
| 翻訳 | テキストを大規模に翻訳する。  |

### MLベースのモデルを使った関数

| 機能 | 概要 |
| ---- | ---- |
| 予測 | 過去の時系列データでトレーニングを行い、季節性やスケーリングなどを自動的に処理することによってその時系列の未来を予測。<br> [Time-Series Forecasting](https://docs.snowflake.com/en/user-guide/ml-powered-forecasting) |
| 異常検知 | 時系列データの外れ値を特定する。データパイプラインのモニタリングなどで活用。<br> [Anomaly Detection](https://docs.snowflake.com/en/user-guide/ml-powered-anomaly-detection) |
| Contribution Explorer | 2つの異なるユーザー定義時間間隔にまたがる特定のメトリクスの変化に寄与するディメンションを迅速に特定。 <br>[Contribution Explorer](https://docs.snowflake.com/en/user-guide/ml-powered-contribution-explorer) |
| 分類 | データを事前定義されたクラスまたはラベルに分類することで、データのパターンに基づいてより適切な推奨を作成できる。 |

### より汎用的なユースケースに使用できる最先端のモデルを使った関数

| 機能 | 概要 |
| ---- | ---- |
| Complete | プロンプトに対して、Llama 2などの最先端のオープンソースLLMを使用してテキスト補完応答を返す。 |
| Text2SQL | Snowflake LLMを使用して、自然言語からSQL生成。ユーザーが独自のアプリケーションを構築可能。 |

以下は、２つ目のブログにのみ記載がありました。

| 機能 | 概要 |
| ---- | ---- |
| Embed Text | ユーザーが選択した埋め込みモデルを使用して、与えられたテキスト入力をベクトル埋め込みに変換。 |
| ベクトル距離 | ベクトル間の距離を計算するために、開発者はコサイン類似度（vector_cosine_distance()）、L2ノルム（vector_l2_distance()）、内部積（vector_inner_product()）の3つの関数から選択。 |
| ネイティブベクトルデータ型 | これらの関数をデータに対して実行できるようにするために、ベクトルもネイティブサポートされるデータ型になった。 |

また、先程の全体図ではCortexの上に配置されていたDocument AI、Universal Search、Snowflake Copilotの３つがどんな位置づけなのか（Cortexとは別物なのか）気になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41382/f86edb3c-3e4b-d082-8e71-e86b67c7b1ca.png)


その答えは、**「Cortexで提供される関数を活用して開発された機能・サービス」** となるようです。

| 機能 | 概要 |
| ---- | ---- |
| Document AI | PDFやWord、画像などからデータ抽出する。Cortexの「回答の抽出」を利用（多分）。 |
| Universal Search | LLMを活用した検索機能で、Snowflakeアカウント内のデータベースオブジェクト、Snowflakeマーケットプレイスのデータ製品、ネイティブアプリ、Snowflakeドキュメントの記事を検索可能。買収したNeevaの検索エンジンを利用（これがCortexのものなのかは不明）。 |
| Snowflake Copilot | 自然言語でSQLを生成するためのLLMアシスタント。Cortexの「Text2SQL」を利用。 |


# 考察・感想
調べてみた印象ですが、一言でいうと、**「Snowflakeが提供するAI系機能の総称」** という感じでしょうか。

各機能を個別に見ると全く新しいものではなく、既存で他に実現する方法がある機能も多いですが、 **フルマネージドにデータの近くで、高速・安全・簡単に使える** という点が嬉しいことだと思います。

まだ各機能はプレビュー段階で、一般公開までにさらなる変更や進化があるかもしれません。

AWSにおけるSagemakerのようなものになっていくかも？
参考：[Amazon SageMakerサービスまとめ　令和4年12月版](https://qiita.com/knowledgecommunication/items/080ac973ac0d8f0d06e5)


かなり多くのAI機能があり、Snowdayのサブタイトルである `THE WAY TO AI` の通り、AIに対してものすごいリソースを投入して強化しているのが分かります。

これらの機能を利用して世界を変革していくのはSnowflakeユーザーである我々。
しっかり理解して価値のあることに活用していきたいです。

個人的に興味があるのは、予測、異常検知、Contribution Explorer、Text2SQLあたり。
普段の仕事でAIに親しみがない開発者でも簡単に素早く低コストでAI・LLMを活用できるはず！ワクワクしてきますね！

### 料金

そういえば、これらの機能を使った場合の料金がどうなるかは情報がないですね。

ビッグデータでこういった機能を利用するならかなりのマシンパワーが必要になるシーンもあるだろうし、莫大な開発・買収コストもかかっているので単純にウェアハウス料金だけってこともない気がしていますが・・

いずれにしても、Snowflake Cortexを使って新しい価値を作っていくのが非常に楽しみです。
引き続きウォッチしていきたいと思います。

・・・と書いた後にこちらのページに記載があるのを発見しました。

https://docs.snowflake.com/en/guides-overview-ml-powered-functions

具体的にいくら、という書き方ではなくコンピュートとストレージの料金がかかりますよと。ちょっと詳細は不明ですが。

# 余談
Cortexとは、直訳すると「皮質」という意味だそうです。
以下はChatGPTに聞いた内容。

> Cortexは異なる文脈で使用されることがあります。
> 例えば、Cortexは、人間の脳の外部の部分を指す医学的な用語としても使用されます。また、機械学習やディープラーニングの文脈では、CortexはNeural Network（ニューラルネットワーク）の構造やモデルを指すことがあります。


[別でCortexというOSSのプロダクトもあるようで](https://openstandia.jp/oss_info/cortex/)、説明を読むと似たものにも見えますね。

> Cortex（コーテックス）は、インフラの専門家ではないデータサイエンティストに、機械学習モデルをクラウドサービスにデプロイし、管理・運用する手段を提供するOSSです。

現在は1年以上メンテされていない状態なので、開発者がSnowflakeに入社してたりして？

# 参考
公式ブログ2本

https://www.snowflake.com/blog/use-ai-snowflake-cortex/?lang=ja

https://www.snowflake.com/blog/fast-easy-secure-llm-app-development-snowflake-cortex/?lang=ja

クラスメソッドさん

https://dev.classmethod.jp/articles/snowflake-summary-of-snowday-2023-refer-blog-youtube/

https://dev.classmethod.jp/articles/snowflake-cortex-ml-based-functions-time-series-preview/

動画

https://www.youtube.com/watch?v=-ZagrEDUnHQ