1
/
5

-Qiita記事Part.46-SnowflakeのAI機能を試してみる(COMPLETE, TRANSLATE, SUMMARIZE, SENTIMENT)

こんにちは、ナイトレイインターン生の保科です。
Wantedlyをご覧の方に、ナイトレイのエンジニアがどのようなことをしているか知っていただきたく、Qiitaに公開している記事をストーリーに載せています。

今回はGISエンジニアの徳竹さんの記事です。
少しでも私たちに興味を持ってくれた方は下に表示される募集記事もご覧ください↓↓


先日、下記のSnowflake Cortex AIに関するイベントに参加してきました!
そこで、SnowflakeのAI機能が簡単に利用できるということを今更ながら知ったので、試してみました!

緊急来日!データエンジニア界のインフルエンサーDash DesaiによるSnowflake Cortex AI大解説!|IT勉強会・イベントならTECH PLAY[テックプレイ]
2024/07/23(火)開催 Dash Desai緊急来日決定!Snowflakeの生成AI機能である【Snowflake Cortex AI】に関する最新情報を日本で特別にお届けします!!
https://techplay.jp/event/950878

Cortex AIではいくつかの関数が準備されており、それを呼び出すだけで簡単に利用できるようになっています。

Large Language Model (LLM) Functions (Snowflake Cortex) | Snowflake Documentation
Snowflake Cortex gives you instant access to industry-leading large language models (LLMs) trained by researchers at companies like Mistral, Reka, Meta, and Google, including Snowflake Arctic, an open enterprise-grade model developed by Snowflake. Since t
https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-functions

今回は気軽に使えそうな以下の4つを試してみました!

  • COMPLETE
  • TRANSLATE
  • SUMMARIZE
  • SENTIMENT

COMPLETE

COMPRETEはChatGPTとの会話のように、入力したプロンプトに対してLLMからの回答が返ってくる関数です。
第1引数に利用するLLMモデル名、第2引数にプロンプトを入力します。

select SNOWFLAKE.CORTEX.COMPLETE('llama3.1-8b','DWHのSnowflakeについて簡単に説明して' );
select SNOWFLAKE.CORTEX.COMPLETE('llama3.1-8b','DWHのSnowflakeについて簡単に説明して' );

出力結果

Snowflakeは、クラウドベースのデータウェアハウス(DWH)です。主にデータ分析に使用されます。
Snowflakeの特徴は以下のとおりです。

  • クラウドベース: Snowflakeはクラウド上で動作するため、スケーラビリティが高く、管理が容易です。
  • マルチモデル: Snowflakeはマルチモデルなので、SQL、JSON、AVRO、PARQUETなどのデータ形式をサポートしています。
  • データ分割: Snowflakeはデータ分割をサポートしており、データを小さなパーティションに分割して管理できます。
  • データキャッシュ: Snowflakeはデータキャッシュをサポートしており、頻繁に参照されるデータをキャッシュして読み取りの高速化を実現します。
  • セキュリティ: Snowflakeは高度なセキュリティ機能を備えており、データの保護と管理を容易にします。

Snowflakeは、データ分析、ビジネスインテリジェンス、データサイエンスなどの分野で広く使用されています。


COMPLETEにはテーブルから取得した結果を直接渡すことも可能です。

COMPLETE (SNOWFLAKE.CORTEX) | Snowflake Documentation
Given a prompt, generates a response (completion) using your choice of supported language model. Required: A string specifying the model to be used. Specify one of the following values. Supported models might have different . The prompt or conversation hi
https://docs.snowflake.com/en/sql-reference/functions/complete-snowflake-cortex#responses-from-table-column


ChatGPTに作ってもらった渋谷の人気施設30個の一時テーブルをもとに、施設のカテゴリを判定してもらってみます。

SELECT 
spot_name,
SNOWFLAKE.CORTEX.COMPLETE(
'llama3.1-70b',
CONCAT('各施設について、「生活サービス」「宿泊」「ショッピング」「レジャー」「交通施設」「飲食」「観光」のいずれかのカテゴリーに分類してください。カテゴリー名のみを出力してください: <spot>', spot_name, '</spot>')
) AS category
FROM popular_spots_shibuya
;
SELECT
spot_name,
SNOWFLAKE.CORTEX.COMPLETE(
'llama3.1-70b',
CONCAT('各施設について、「生活サービス」「宿泊」「ショッピング」「レジャー」「交通施設」「飲食」「観光」のいずれかのカテゴリーに分類してください。カテゴリー名のみを出力してください: <spot>', spot_name, '</spot>')
) AS category
FROM popular_spots_shibuya
;

こちらが出力結果です!
何となく良さそうな感じがします。(すごー)
※ ChatGPTが作ってくれた施設一覧なので、渋谷外の施設や、そもそも施設や場所でないものも紛れ込んでいますがそこは🙈


TRANSLATE

TRANSLATEは関数名のとおり、翻訳してくれる関数です!

select SNOWFLAKE.CORTEX.translate('`TRANSLATE`は関数名のとおり、翻訳してくれる関数です!','ja', 'en' );
select SNOWFLAKE.CORTEX.translate('`TRANSLATE`は関数名のとおり、翻訳してくれる関数です!','ja', 'en' );


出力結果はいかのとおりです!結構いい感じだと思います。

TRANSLATE is a function that translates, as the name of the function!


こちらもCOMPLETEと同様にテーブルの値を渡すことができます。
ChatGPTが作ってくれた文章を翻訳してみましょう。

select
text as ja_text,
SNOWFLAKE.CORTEX.translate(text,'ja', 'en' ) as en_text
from temp_japanese_texts;select
text as ja_text,
SNOWFLAKE.CORTEX.translate(text,'ja', 'en' ) as en_text
from temp_japanese_texts;

SUMMARIZE

SUMMARIZEはテキストを要約するための関数です。

select snowflake.cortex.summarize(
'渋谷は、東京で最も活気のあるエリアの一つとして知られています。
この地域は、ショッピング、エンターテイメント、飲食、ファッションといった
多様な楽しみ方ができるスポットが豊富に集まっています。特に、渋谷スクランブル
交差点は世界的に有名であり、多くの観光客が写真を撮るために訪れます。
渋谷駅周辺には渋谷ヒカリエや渋谷109といった商業複合施設が立ち並び、
若者や観光客に人気です。また、少し足を伸ばせば代々木公園や明治神宮などの
自然と歴史に触れることができる場所もあります。渋谷はその多様性とダイナミズムから、
訪れる人々に常に新しい発見と興奮を与えてくれるエリアです。'
);
select snowflake.cortex.summarize(
'渋谷は、東京で最も活気のあるエリアの一つとして知られています。
この地域は、ショッピング、エンターテイメント、飲食、ファッションといった
多様な楽しみ方ができるスポットが豊富に集まっています。特に、渋谷スクランブル
交差点は世界的に有名であり、多くの観光客が写真を撮るために訪れます。
渋谷駅周辺には渋谷ヒカリエや渋谷109といった商業複合施設が立ち並び、
若者や観光客に人気です。また、少し足を伸ばせば代々木公園や明治神宮などの
自然と歴史に触れることができる場所もあります。渋谷はその多様性とダイナミズムから、
訪れる人々に常に新しい発見と興奮を与えてくれるエリアです。'
);


英語で出力されます。要約はされていないようです。
ドキュメントに「英語の入力を要約します」とあるように、日本語には対応していません。
日本語を英語にしてからSUMMARIZEするのが良さそうですね!

Shibuya is known as one of the most lively areas in Tokyo. It offers various ways to enjoy shopping, entertainment, dining, and fashion. The famous Shibuya Scramble intersection is a world-renowned spot where many tourists take photos. Shibuya Station area is home to popular commercial complexes like Shibuya Hikarie and Shibuya 109, and is popular among young people and tourists. Nearby are also natural and historical sites like Yoyogi Park and Meiji Shrine. Shibuya's diversity and dynamism continually offers new discoveries and excitement to visitors.

SENTIMENT

SENTIMENTは感情分析ができる関数です。
-1 ~ 1の範囲で数字が返ってきてネガポジ判定が成されます。

select
text,
snowflake.cortex.sentiment(text) as score
from temp_negapoji_texts
;
select
text,
snowflake.cortex.sentiment(text) as score
from temp_negapoji_texts
;

日本語だと正しく分析できていないようです。
こちらもドキュメントに英語のみが対応してあります!


select
text,
snowflake.cortex.sentiment(
snowflake.cortex.translate(text, 'ja', 'en')
) as score
from temp_negapoji_texts
;
select
text,
snowflake.cortex.sentiment(
snowflake.cortex.translate(text, 'ja', 'en')
) as score
from temp_negapoji_texts
;

英語に翻訳してからだと、こんな感じになりました。
「騒音が気になる」がマイナス値になってくれたら完璧だったのに!
ChatGPTによると『 英語の翻訳が「I care about the noise of Shibuya」となっており、「care」という単語がポジティブなニュアンスを持つため、誤ってポジティブなスコアをつけた可能性があります。』とのこと。


用意されている関数だけでも、いろんな用途がありそうですね!
イベントでは他にもRAGやファインチューニングなども紹介されていたので、今後はそれらも試してみたいなと思います!

Invitation from 株式会社ナイトレイ
If this story triggered your interest, have a chat with the team?
株式会社ナイトレイ's job postings

Weekly ranking

Show other rankings
Like 保科 汐里's Story
Let 保科 汐里's company know you're interested in their content